Добавление произвольного html в код laravel
Laravel – очень удобный фреймворк для каких-то изменений сайта. Да совершенно не зная проект, можно относительно быстро внести в него изменения. Давайте покажу один пример.
Обратился ко мне заказчик для доработок сайта на Laravel. Один из пунктов доработок звучал так: в админке добавить функцию вставки яндекс метрики и гугл аналитики.
Сама задача по вставке кода статистик обычная, чаще всего на сайтах с CMS я решаю её так: сую в шаблон, то есть жестко прописываю в коде. Так как код метрик меняется очень редко, то обычно этого хватает. Но тут заказчик просит не один раз вставить, а именно доабвить в админку возможность самому вставлять и менять. Ну чтож надо, значит надо, делаем.
С чего начнем? С самого конца – где происходит вывод тега head сайта. Если вы ничего не меняли в стандартной сборке Laravel, то он где-то вот тут: resources\views\layouts\app.blade.php.
Однако у нас у сайта своя тема и вообще он сильно изменен, так что делаем самое простое: запускаем поиск по сайту с помощью total commander.
Небольшое отступление. Как искать по сайту скажите вы? А очень просто: надо скачать его к себе на компьютер, сделать локальную копию. Поверьте, она вам очень пригодится, даже если у вас есть тестовый сервер. Помимо того, что искать удобно, это еще и возможность иметь дополнительный бэкап, быстро тестировать любые изменения, а также управлять версиями кода с помощью git.
Total commander выдает нам несколько файлов, где имеется закрывающий тег head,но нам интересен только один: themes/Mytravel/Layout/app.blade.php. Пробуем в него сразу подставить что-то и смотрим вывод – да, выводится на сайте.
Теперь нам надо решить следующие две задачи:
- Сохранение где-то в базе данных кода аналитик)
- Вывод его в этом шаблоне (доставка из базы данных)
{!! setting_item('head_scripts') !!}Нетрудно догадаться, что здесь выводятся какие-то скрипты, причем с помощью функции, извлекающей настройки. Заглянем теперь в адмику. В админке ищем страницу глобальных настроек и шаблон, отвечающий за её вывод. Это несколько файлов в папке themes/Mytravel/Core/Views/admin/settings. Много настроек выводятся примерно также – с помощью setting_item(). Берем любую настройку и ищем в базе данных .. и находим некую таблицу core_settings.
Теперь пробуем в один из файлов шаблона настроек в админке добавить новое поле
<div class="form-group"> <label>Код аналитик</label> <div class="form-controls"> <textarea name="header_analitics" class="form-control" cols="30" rows="7">{!! setting_item('header_analitics') !!}</textarea> </div> </div>, а также в таблицу строку. Смотрим:
Отлично, ларавель сам подхватывает и извлекает поле из таблицы. Пробуем изменить через интерфейс адмики и сохранить…. Нет, неудача. Для сохранения, видимо, надо где-то в коде прописать это новое поле, чтобы модель работала с ним.
Ищем опять же через тотал коммандер, где еще есть соседние поля. И находим файл modules/Core/SettingClass.php, где идет инициализация массивов
Добавляем наш ключ header_analitics, пробуем сохранить – и все работает.
Теперь остался последний этап. Возвращаемся к самому первому файлу app.blade.php и вставляем там
{!! setting_item('header_analitics') !!}Вот и все, теперь можно менять код аналитик через админку, как и остальные настройки.
Напоследок замечу, что операции с базой данных правильно осуществлять с помощью миграций, но там мне достался такой проект, что на это можно махнуть рукой. Аналогично и с переводом. Нужна помощь с Laravel? Пишите в телеграм @upreadru (услуги платные).
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.