ru en

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') }}

(Аргумент функции - сконфигурированный блок).

Критика/Пожелания/Пулл реквесты поощряются).