Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте!
Продумываю структуру нового проекта, и столкнулся с такой задачей.
Вводные данные:
Есть на сайте страницы. Редактируются они через админку. В админке, как я сейчас себе вижу, будет просто визуальный редактор, в котором можно будет редактировать содержимое страницы. Появилась задумка, но пока не знаю как ее осуществить.
Задумка:
Есть определенные методы контроллеров, которые пишутся вручную кодом. Для удобства я буду называть их сниппетами. Что они делают: обращается к таблице в базе, выводит оттуда определенным образом отсортированные записи, и возвращает заранее созданный вид, передавая в него массив с записями. Все как обычно. В чем суть: я хочу, чтобы я мог в визуальном редакторе каким-то образом вызвать этот самый сниппет и вставить его в текст страницы.
Теперь технически:
Контроллер страницы берет из таблицы записи с полями, например, 'title' и 'text'. В поле текст хранится html код с нужным контентом, и в каком-то месте этого html кода какие-то образом вставлен сниппет по типу шорткодов в вордпрессе (например [documents.index]). Вид отрабатывает, и как только натыкается на [documents.index], вызывает контроллер documents и метод index. Данный метод возвращает какой-то вид, который вместе с данными и вставляется в представление страниц вместо [documents.index].
Что хотел бы получить здесь:
Собственно, пока я вижу один вариант решения, и это AJAX: парсинг на javascript этого шорткода ([documents.index]) и замена его на вызов метода ajax с нужным location из шорткода. Но вдруг кто подскажет более элегантное решение? Или вообще не стоит так делать? В программировании не так давно, а с laravel знаком еще меньше, но учиться никогда не поздно. Спасибо заранее за Ваши мнения по этому вопросу, всем добра
Не в сети
Неужели вопрос настолько глуп, что на него никто не хочет отвечать?)
За сегодня придумал ещё один вариант на основе трейтов. Каждый сниппет - это метод трейта. Я подключаю этот трейт в контроллеры, в которых, как я думаю, теоретически могут использоваться сниппеты. В тело страницы в визуальном редакторе вставляю конструкцию вида [=snippets.teachers=], где teachers - метод трейта snippets. Далее при получении экземпляра модели страницы я беру атрибут text и произвожу поиск в нем [=*=], и совпадения кладу в массив. Далее в цикле прохожу по массиву и вызываю необходимые методы трейта, и заменяю результатом их выполнения сами конструкции [= =] в атрибуте текст. Ну и передаю в вид, где все это дело рендерится.
Насколько такая идея жизнеспособна?
Не в сети
Не уверен, что то, что ты хочешь сделать - это хорошее решение.
Контроллер можно вызвать так
app()->call([PostController::class, 'methodName']);
Ты делаешь CMS?
Изменено covobo (05.02.2018 18:30:16)
Не в сети
Контроллер можно вызвать так
Видел это, да. Но, насколько я читал, практика вызова контроллера из контроллера не очень хорошая.
Ты делаешь CMS?
Нет. У меня есть страницы, которые нужно делать с помощью wysiwyg редактора. И есть данные, которые из 1С кладутся в базу данных. Например, список работников. Он лежит в СУБД в готовом виде. И может возникнуть ситуация, когда мне нужно будет вставить в страницу (или даже не в одну) этот список работников.
Не в сети
Страницы 1