Заменить шорткод на HTML
Есть обычный текст подтягивающийся из БД, а внутри текста есть строка [link href="/news" name="Новости" class="apply"].
Я хочу, чтобы эта строка на выходе заменялась на <a class="btn btn-med btn-apply" href="/news">Новости</a>. Т.е. типа как шорткоды в WordPress реализованы (но нигде не могу найти примеры чисто на PHP). Как это можно реализовать? str_replace тут не подходит, так как шорткод разный может быть. А в регулярных выражениях я не разбираюсь. Может у кого есть готовые решения?
Ответы (1 шт):
Достаточно сделать для начала так, как видите, а потом пытаться оптимизировать.
К Symfony, кстати, вопрос не имеет никакого отношения.
Самый простой способ (пока без использования классов, но это можно потом переделать):
Берём "шорткод", обрезаем скобки
[и](например черезtrim)Разбиваем строку по пробелу, получив все атрибуты строки (используя
explode)Тип элемента будет содержаться в
[0]индексе полученного массива. Собственно это ключевой момент. Предположим, что таких элементов может быть несколько, тогда будем иметьswitch(ну илиmatchилиif, elseifи т.д.), который будет отрисовывать элемент, в зависимости от типа, т.е. например:switch ($elementParts[0]) { case "link": // Тут логика прохождения по остальным элементам массива // для формирования ключ-значения HTML атрибутов return "<a class="$formedClass" href="formedHref">$formedText</a>"; case "div": // Тут логика прохождения по остальным элементам массива // для формирования ключ-значения HTML атрибутов return "div class="$formedClass">$formedText</div>" ... }Там где в п.3 написано "Тут логика прохождения по остальным элементам массива для формирования ключ-значения HTML атрибутов" - нужно пробежаться по оставшимся элементам массива, каждый из них разбить через
explodeи=и сформировать новые значения, если такой шаг необходим. Если всё вставляется как есть - то вставить в элементы HTML как они прописаны