Intereting Posts
Обновить страницу после удаления jquery в codeigniter Как вставить входной массив html в mysql, используя PDO Какая хорошая система управления пользователями с открытым исходным кодом? mysqli bind_param не устанавливает ошибку $ stmt-> или $ stmt-> errno CakePHP 2.0: соединение с базой данных «Mysql» отсутствует или не может быть создано PHP: создание копии ссылочной переменной Заблокированная загрузка смешанного активного содержимого по http Как легко создать форму входа в систему HTTPS? Что это значит, когда var_dump сообщает о неправильной длине строки? CakeResque – Resque не найден в … app / Plugin / CakeResque / Lib / CakeResque.php в строке 82 Как ограничить скорость исходящего ответа от php-скрипта? скрыть путь к папке, когда пользователь загружает файл Кнопка загрузки PHP не работает Создание пустого файла Могу ли я открыть предупреждение в javascript, используя php SimpleXML цикл работает, но прерывается на полпути

Разбор пользовательских тегов с помощью PHP

Я пытаюсь сделать простые пользовательские теги, чтобы разрешить настраиваемые шаблоны в моем приложении. Но я не могу понять, как анализировать и заменять теги.

(пример)

<div class="blog"> <module display="posts" limit="10" show="excerpt" /> </div> <div class="sidebar"> <module display="users" limit="5" /> <module display="comment" limit="10" /> </div> 

для каждого найденного тега модуля я хочу запустить функцию создания модуля с параметрами (указанными в теге как атрибуты). И замените тег модуля, с фактическим куском HTML, который возвращается из функции.

Вы можете использовать регулярные выражения в соответствии с вашими пользовательскими тегами.

 $html // Your html preg_match_all('/<module\s*([^>]*)\s*\/?>/', $html, $customTags, PREG_SET_ORDER); foreach ($customTags as $customTag) { $originalTag=$customTag[0]; $rawAttributes=$customTag[1]; preg_match_all('/([^=\s]+)="([^"]+)"/', $rawAttributes, $attributes, PREG_SET_ORDER); $formatedAttributes=array(); foreach ($attributes as $attribute) { $name=$attribute[1]; $value=$attribute[2]; $formatedAttributes[$name]=$value; } $html=str_replace($originalTag, yourFunction($formatedAttributes), $html); } 

Если вы хотите воспользоваться XML aproach, свяжитесь со мной, и я покажу вам, как это сделать.

http://us3.php.net/manual/en/function.preg-replace-callback.php

Мой партнер выполнил работу с разбором тегов … в зависимости от сложности, которую вы хотите достичь, вы можете использовать регулярное выражение. Используйте регулярное выражение для поиска тегов, а затем вы можете разделить строки дальше с функциями манипуляции строками по своему усмотрению. Функция обратного вызова на preg_replace_callback позволит вам заменить тег на любые html-данные, которые вы хотите представить. Ура!

edit: (<module +? ([^ =] +? = "[^"] *? " ?) ?? />) Это должно соответствовать функциям модуля … удалить пространство между <и модулем (SO – синтаксический анализ это неправильно). В вашей пользовательской функции соответствуют индивидуальные параметры, содержащиеся в теге, с использованием регулярного выражения типа: ([^ =] +? = "[^"] ? ")

Вы можете проанализировать свой файл с помощью simplexml и получить атрибуты после итерации и поиска ваших элементов. Вот пример.

Как предположил preg_replace_callback подходит для решения такого типа.

Другой вариант – прочитать шаблон / файл в формате XML, если вы ожидаете проверки разметки xml, с помощью XmlReader и действовать на соответствующих узлах. В качестве дополнительного предложения вы можете использовать Xml Namespaces для своих пользовательских тегов, поскольку это гарантирует, что у вас нет коллизий.

Я написал фактический класс php для этого и выпущен под BSD. Посмотреть эту другую тему