Symfony Widgets Bundle
Widgets Bundle - бандл для легкого управления виджетами, для отображения которых нужна только клиентская часть. Включает в себя функционал как клиентской, так и админ части (добавляет админ классы для SonataAdminBundle и зависим от нее). Можно использовать (к примеру) для добавления счетчиков, баннеров, кодов различных рекламных сетей (adsense и т.д.), при этом управляем всем в одном месте (админ панель).
Был написан во время разработки этого блога.
1. Установка
1) Устанавливаем с помощью Composer:
$ composer.phar require harentius/widgets-bundle
2) Подключаем в ядре:
<?php
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Harentius\WidgetsBundle\HarentiusWidgetsBundle(),
);
// ...
}
3) Подключаем конфигурацию:
imports:
....
- { resource: "@HarentiusWidgetsBundle/Resources/config/config.yml" }
(Это необходимо, чтобы сделать доступной ф-цию FIND_IN_SET в mysql (что, к сожалению, ограничивает область использования бандла только с этой БД))
4) Конфигурация:
harentius_widgets:
# List of routes, where widgets can be placed
routes:
acme_homepage:
# User-friendly name for displaying in admin section (sonata)
name: Homepage
acme_blog_show:
name: Article
# Parameters, present in route
parameters:
slug:
# Source (Now only entity supported)
source:
class: HarentiusBlogBundle:Article
# Value to be passed to the route
field: slug
# Value to be shown in admin section
identity: title
# Registering widgets: key used in templates (look behind), value - shown in admin section
widgets:
widgets_block_sidebar: Sidebar
widgets_block_bottom_left: Bottom left
widgets_block_bottom_right: Bottom right
5) Дальше просто разместите в темплейте в необходимых местах:
{{ harentius_widget('widgets_block_sidebar') }}
....
{{ harentius_widget('widgets_block_bottom_left') }}
....
{{ harentius_widget('widgets_block_bottom_right') }}
Бандл готов к работе. Некоторые объяснения:
Ключ routes позволяет задать список роутов, на страницах им соответствующих можно выводить виджеты. Ключ - имя роута (как в routing.yml), значение name - то, что отображается в админке. (Да, бандл зависим от SonataAdminBundle). Если роуты содержат параметры, для их описания есть соответствующий ключ (parameters). Ключ - имя параметра, в
source пока что можно описать только ентити (в будущем планируется поддержка запросов)
field - значение этого параметра будет подставлено в роут
identity - человеко-удобное представление ентити (используется для отображения в админке).
Например, у меня field - это slug, а identity - title записи.
Дальше идет список доступных виджетов (ключ widgets)
Ключ - любой идентификатор виджета, он должен будет рендерится в темплейте, значение - человеко-понятное имя, которое отображается в админке.
Дальше, как уже писал, у темплейтах просто вызываете в нужных местах:
{{ harentius_widget('widgets_block_bottom_right') }}
(Аргумент функции - сконфигурированный блок).
Критика/Пожелания/Пулл реквесты поощряются).