как реализовать шорткоды на страницах или в блоге?

Я использую php framework laravel, и я хотел бы реализовать шорткоды.

У кого-нибудь есть предложения, как использовать шорткоды, которые пользователь может вставить в страницу или в блог?

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

[Галерея = идентификатор]

который затем будет отображать эту конкретную галерею. Конечно, у меня есть модель галереи и галерея & таблицы изображений.

Сначала я подумал, что мне придется сканировать содержимое страницы / поста и искать шорткод, а когда я найду определенный шорткод, что тогда? Что я вставлю вместо него?

Я не могу вставить PHP-код, который проходит по галерее и производит вывод. Я думаю, что лучший способ сделать это — запустить функцию, которая возвращает полный HTML-код, который я вставляю вместо шорткода.

Можно ли вернуть представление из функции и вставить результат в страницу / сообщение?

2

Решение

В зависимости от того, какой «шорткод» вы хотите, здесь есть множество вариантов:

  1. Директивы по лезвиям
  2. Макеты лезвий
  3. Blade Sub-Views
  4. Стеки лезвий
1

Другие решения

Чтобы быть ясным, я предполагаю, что вы хотите вставить это в блоки содержимого, хранящиеся в БД или что-то, а не в ваших файлах просмотра.

Предполагая, что вы хотите вставить текст в ваше представление для отображения, вы можете разрешить создателям контента использовать шаблонный формат, такой как усы (https://en.wikipedia.org/wiki/Mustache_%28template_system%29) с обратными вызовами / помощниками / частями на стороне сервера (в представлении) для заполнения ваших собственных пользовательских тегов динамическим контентом (в данном случае ссылками на галерею).

Основные моменты

  1. Я бы придерживался базового широко известного шаблона шаблонов, таких как
    усы для этого. В laravel разрешите Blade шаблонную нотацию, похоже, вы хотите, чтобы в этом случае регистрировался Blade::directive: https://www.laravel.com/docs/5.3/blade#service-injection.
  2. Я бы попробовал использовать существующую библиотеку, если одна такая существует раньше
    пытаясь создать свой собственный синтаксический анализ разметки /
    парадигма обратного вызова. Blade имеет функции и методы для обработки таких обратных вызовов.

№ 2 не обязателен, но настоятельно рекомендуется, но № 1 следует считать почти религиозным.

ОБНОВЛЕНИЕ: как указано в других ответах, встроенный шаблонный Blade Laravels обладает этой функциональностью, поэтому придерживайтесь его формата и функциональности.

Вот мое предложение (в псевдо-laravel / php):

  • Предположим, что ваш размеченный контент из модели, подключенной к контроллеру, находится в $content['blade_markedup_content' => 'here is my new gallery: @gallery(1)'] быть переданным на вид.
  • Добавить директиву Blade @preprocess() в и в шаблоне / представлении использования <p>@preprocess($blade_markedup_content)</p> вместо того, чтобы просто заменить сырье <p>{{$blade_markedup_content}}</p>,
  • В соответствующей функции обратного вызова для @preprocess() директива
    • Создать новый $my_compiler = new BladeCompiler();
    • Зарегистрируйтесь в этой новой директиве компилятора лезвия, чтобы справиться с подобным @gallery(1) вы положили в свой blade_markedup_content
    • вернуться из @preprocess() с $my_compiler->compileString($blade_markedup_content);
  • Виола … В теории это должно привести к анализу и замене строки из @preprocess($blade_markedup_content) в оригинальном шаблоне.
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector