Я использую php framework laravel, и я хотел бы реализовать шорткоды.
У кого-нибудь есть предложения, как использовать шорткоды, которые пользователь может вставить в страницу или в блог?
Например, допустим, я хотел бы иметь шорткод для галереи с некоторыми изображениями, что-то вроде
[Галерея = идентификатор]
который затем будет отображать эту конкретную галерею. Конечно, у меня есть модель галереи и галерея & таблицы изображений.
Сначала я подумал, что мне придется сканировать содержимое страницы / поста и искать шорткод, а когда я найду определенный шорткод, что тогда? Что я вставлю вместо него?
Я не могу вставить PHP-код, который проходит по галерее и производит вывод. Я думаю, что лучший способ сделать это — запустить функцию, которая возвращает полный HTML-код, который я вставляю вместо шорткода.
Можно ли вернуть представление из функции и вставить результат в страницу / сообщение?
В зависимости от того, какой «шорткод» вы хотите, здесь есть множество вариантов:
Чтобы быть ясным, я предполагаю, что вы хотите вставить это в блоки содержимого, хранящиеся в БД или что-то, а не в ваших файлах просмотра.
Предполагая, что вы хотите вставить текст в ваше представление для отображения, вы можете разрешить создателям контента использовать шаблонный формат, такой как усы (https://en.wikipedia.org/wiki/Mustache_%28template_system%29) с обратными вызовами / помощниками / частями на стороне сервера (в представлении) для заполнения ваших собственных пользовательских тегов динамическим контентом (в данном случае ссылками на галерею).
Основные моменты
Blade::directive
: https://www.laravel.com/docs/5.3/blade#service-injection.№ 2 не обязателен, но настоятельно рекомендуется, но № 1 следует считать почти религиозным.
ОБНОВЛЕНИЕ: как указано в других ответах, встроенный шаблонный Blade Laravels обладает этой функциональностью, поэтому придерживайтесь его формата и функциональности.
Вот мое предложение (в псевдо-laravel / php):
$content['blade_markedup_content' => 'here is my new gallery: @gallery(1)']
быть переданным на вид.@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)
в оригинальном шаблоне.