Как правильно реализовать вывод статических данных в yii2?
Здравствуйте ;)
В продолжении обучения yii2 наткнулся на такую задачу.
В самом простом случае: есть страница "Контакты", на ней есть блок с формой обратной связи(справа), внизу карта, и с лева от формы обратной связи есть блок с текстом (номер телефона, имейл и т.п.).
Данный текст должен правиться в админке, соответственно, необходимо сделать таблицу `page` (утрированно):
id | page_content
И возникает вопрос, каким образом выводить такие данные? Правильно я думаю - делать для них виджет, и в месте где должены выводиться данные его инициализировать? Т.к. есть и другие страницы, к примеру главная.
И как поступить, если допустим на одноименной странице должно быть 2-3 блока с такими данными?
Добрый день.
Можно эти данные прописать в файле params.php. 'adminEmail' => 'test@gmail.com',
Выводить так: echo Yii::$app->params['admin_email'];
Можно сделать модуль настроек.
Можно сделать так, как Вы говорите, таблица page и выводить на странице "контакты" нужную Вам информацию.
Вариантов много.
Вариант с файлом params.php не подходит, т.к. я же говорю, там нужно указывать и другую информацию, заранее не известную. Плюс ко всему будут и другие страницы, с неизвестными данными. (Которые проще всего добавлять через wysiwig)
Как Вы думаете с вариант виджета, как я описал, хороший? И как поступить в случае если нужно выводить для одной страницы несколько таких блоков?
Пока что я вижу такое решение:
таблица `page`:
id | page_alias | block_id | content
В админке при редактировании страницы будут выводиться сразу все блоки привязанные к странице. А во вьюхе в каждом блоке выводить свой контент, привязанный к block_id и page_alias. Верно я размышляю?
dkrylov: Делаете виджет, который будет принимать параметр. Этот параметр будет указывать, на какой странице и какие данные выводить. В таблице добавляете поле что-то вроде "locate", где будете указывать расположение.
Тут стоит разбить проблему на несколько.
1. Как хранить - в БД
2. Как получать и править - я бы для таких вещей сделал компонент, условно "настройки сайта", под него 1 или несколько страниц, получал бы данные и кешировал на неопределенный срок, чистил бы кеш при действии в CRUD в админке. Удобно получать, как-то так: Yii::$app->settings->get('contacts')
3. Как выводить - тут или свой виджет или блок ( www.yiiframework.com/doc-2.0/yii-widgets-block.html ) или просто отдельная view.
Yii::$app->settings->get('contacts')
Это относиться к конкретно настройкам самого сайта. Типа SITE_TITLE, SITE_DELIMITER (разделитель в ), SITE_URL и т.п. Собственно так у меня и сделано.
А я говорю про страницы, которые можно редактировать в админке.
Приведу еще один пример:
Есть страница FAQ, на ней 2 блока, 1 сверху - это сами вопросы и ответы, а 2й снизу, там форма обратной связи.
Форму обратной связи, понятно, пишем сразу во view файле с помощью ActiveForm. А вот блок с вопросами и ответами должен редактироваться, и соответственно нужно делать работу с БД.
И таких страниц может быть много. На каждой такой странице может быть не определенное количество блоков с контентом, который должен редактироваться через админку. В итоге немного повторюсь (в комментариях к посту выше):
Пока что я вижу такое решение:
таблица `page`:
id | page_alias | block_id | content
В админке при редактировании страницы будут выводиться сразу все блоки привязанные к странице. А во вьюхе в каждом блоке выводить свой контент, привязанный к block_id и page_alias.
На примере:
Есть страница /test, у нее 3 блока:
1 - контент из `page` (выводим через виджет, указывая page_alias=test и block_id=1)
2 - допустим та же обратная связь
3 - контент из `page` (выводим через виджет, указывая page_alias=test и block_id=2)