En essayant de créer une fonction de filtre pour faciliter l'écriture de fichiers html par les éditeurs.Rechercher des correspondances et remplir un tableau
Les utilisateurs vont saisir un texte comme celui-ci:
Fusce eget sapien a tortor hendrerit pharetra sed a libero. Vestibulum quis dui sed elit semper semper non molestie nulla. Curabitur suscipit feugiat varius.
{{accordion}}
{{title}}1 This is the first accordion title{{title_end}}
{{body}}1 This is the first accordion body{{body_end}}
{{title}}1 This is the second accordion title{{title_end}}
{{body}}1 This is the second accordion body{{body_end}}
{{title}}1 This is the third accordion title{{title_end}}
{{body}}1 This is the third accordion body{{body_end}}
{{accordion_end}}
Nulla consequat cursus turpis vitae pretium. Suspendisse iaculis nisl rhoncus justo luctus vel scelerisque diam volutpat.
{{accordion}}
{{title}}2 This is the first accordion title{{title_end}}
{{body}}2 This is the first accordion body{{body_end}}
{{title}}2 This is the second accordion title{{title_end}}
{{body}}2 This is the second accordion body{{body_end}}
{{title}}2 This is the third accordion title{{title_end}}
{{body}}2 This is the third accordion body{{body_end}}
{{accordion_end}}
Ut imperdiet odio quis diam ornare in congue purus rhoncus. Quisque scelerisque est sed sapien facilisis a facilisis turpis adipiscing. In hac habitasse platea dictumst.
Notez que les blocs d'accordéon apparaît entre autres morceaux de texte, et ils apparaissent dans plusieurs occurences. J'utilise un gabarit pour thématiser les accordéons, donc je voudrais que les accordéons soient structurés comme un tableau, et ensuite injecter les accordéons thématiques dans les bonnes positions dans le texte.
Array
(
[0] => Array
(
[title] => 1 This is the first accordion title
[body] => 1 This is the first accordion body
)
[1] => Array
(
[title] => 1 This is the second accordion title
[body] => 1 This is the second accordion body
)
[2] => Array
(
[title] => 1 This is the third accordion title
[body] => 1 This is the third accordion body
)
)
Je suis de déconner avec preg_replace_callback, mais je ne peux pas vraiment trouver la bonne façon de le faire.
Jusqu'à présent, Ive été en train de faire comme ceci:
function format_accordion($text) {
$regex = '#{{accordion}}(.+?){{accordion_end}}#is';
return preg_replace_callback(
$regex,
"lolfunction",
$text);
}
function lolfunction($accordion_content) {
$title_regex = '#{{title}}(.+?){{title_end}}#is';
$body_regex = '#{{body}}(.+?){{body_end}}#is';
$data = array();
foreach ($accordion_content as $key => $value) {
$data[$key]['title'] = $key . " title"; // I need to find the titles
$data[$key]['body'] = $key . " body"; // I need to find the bodies
}
return theme("kunsten_accordion", array("data" => $data));
}
La fonction thème() passe le tableau à un modèle html. Je l'ai appelé la fonction lolfunction(), parce que je l'avais espéré avoir tout simplement une fonction format_accordion() :)
aura-t-il vraiment plus facile pour vos utilisateurs écrire '{{accordéion}} {{title}} {{body}}' quand ils pourraient utiliser du XML standard (ou même du HTML) pour baliser le texte? Si vous utilisez XML (' '), vous n'aurez pas besoin d'écrire un analyseur personnalisé. –
Je ne veux pas qu'ils écrivent html, ce qui signifierait qu'ils doivent écrire des classes, c'est-à-dire aussi. Mais c'est peut-être une bonne idée de les faire écrire xml. Je serais quand même obligé de remplacer les balises xml par des classes html +. Des idées? – tolborg
oui sauf l'inverse. J'ai une chaîne. Puis transformez les correspondances en tableau. Ensuite, formatez le tableau en une nouvelle chaîne. Puis injectez la nouvelle chaîne dans le texte original. – tolborg