2013-07-02 5 views
-2

Je dois coder un hub d'expédition de Newsletter en PHP. L'architecture DB (que je ne peux pas changer) est construit comme ceci:Noeuds XML en tant que variables Smarty

Tableau: <customer_prefix>_data: Contient les données au format XML Strings (avec des données telles que le nom du client, adresse e-mail, etc.) et le lien vers la tpl-Table. Chaque ligne est titulaire d'un e-mail du client, ainsi que du contenu supplémentaire qui peut changer de bulletin à la newsletter

Tableau: <customer_prefix>_tpl: Contient tous les bulletins d'information (HTML) avec {$ var} -Variables qui devrait représenter les XML-nœuds (et leurs données, donc <node>value</node> devrait devenir {$ node} et cette variable devrait contenir 'value'). Plus le schéma XSD, avec lequel les XML-Strings devraient être validés (je l'ai eu ce travail). Le problème est que les chaînes XML peuvent différer de Newsletter à Newsletter et tout doit se faire de manière dynamique (puisque je dois coder un Cronjob qui rassemble toutes les données, restitue le contenu du mail et l'envoie ensuite). On m'a dit d'utiliser Smarty, mais je ne sais pas comment (DYNAMIQUEMENT) convertir les nœuds XML en Smarty Variables ...

S'il y a une meilleure façon que d'utiliser Smarty (str_replace n'est pas une option), je ' m toutes les oreilles ...

J'espère que vous obtenez mon problème ... Si vous avez besoin de plus d'informations, je serai heureux de les fournir.

+1

je reçois votre problème mais on ne sait pas pourquoi vous n'êtes pas en mesure de le résoudre. Stackoverflow n'est pas un site de problème de programmation, mais un site de questions de programmation, alors quelle est votre question de programmation concrète? Où sont vos exemples de données? Où est votre exemple de code qui démontre un problème concret? – hakre

+1

Voir http://php.net/book.simplexml et [Analyser et traiter HTML/XML?] (Http://stackoverflow.com/q/3577641/367456) – hakre

+1

Cela peut également contenir des pointeurs: [Analyse syntaxique XML utilisant mais les noms d'éléments sont dynamiques] (http://stackoverflow.com/q/13221155/367456) – hakre

Répondre

1

Je l'ai pensé comme ça:

<?php 

// foreach loop is started here to count through a number of database entries 
// that explains the $i. Just adjust that to your needs 

// Get DOMDocument here and validate with XSD Schema 

// ... 

// Get XML Elements and assign them to Smarty variables 
$elements[$key][$i] = $dom->documentElement; 
foreach ($elements[$key] as $element) { 
    foreach ($element->childNodes as $el) { 
    $tpl->assign($el->nodeName, $el->nodeValue); 
    $params[$el->nodeName] = $el->nodeValue; 
    } 
} 

?> 

Voilà comment cela a fonctionné pour moi