Добавление произвольного 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. Пробуем в него сразу подставить что-то и смотрим вывод – да, выводится на сайте.

Теперь нам надо решить следующие две задачи:

  1. Сохранение где-то в базе данных кода аналитик)
  2. Вывод его в этом шаблоне (доставка из базы данных)
Начнем со второго пункта. Посмотрев внимательнее на тот же файл 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, laravel, сайтостроение, php




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Дело о пропавших гигабайтах
Печать dataGridView из C++/CLI в Visual Studio
Инъекции SQL: основы защиты