Бандл IphpCoreBundle предназначен для создания древовидной структуры рубрик на сайте, построенном на Symfony 2.
Структура рубрик позволяет создать иерархическую навигацию по сайту, организовать разделы сайта в древовидную структуру. В рубрике сайта размещается «модуль» — набор из маршрутов системы роутинга Symfony2 + в дальнейшем будет добавлена возможность создавать настройки модуля в определенной рубрике.
Инсталляция
Загрузка бандла
Для загрузки бандла нужно добавить в composer.json
// composer.json
{
"require": {
"iphp/core-bundle": "@stable"
}
}Затем выполнить команду
$ php composer.phar update iphp/core-bundleComposer загрузит код бандла в директорию vendor/iphp
Инициализация
Добавьте бандл в kernel
// app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Iphp\CoreBundle\IphpCoreBundle(), ); )
Конфигурация
Роутинг
Для дополнения стандартной системы роутинга маршрутами на основе дерева рубрик, в файл routing.yml нужно добавить
_iphp_rubrics:
resource: .
type: iphp_rubricДанный маршрут обрабатывается классом RubricRouteLoader, который считывает дерево рубрик из БД и заносит в общую систему роутинга маршруты, которые определены в модулях, размещенных в рубриках сайта.
Начало работы
Рубрики
После установки бандла в административном интерфейсе SonataAdminBundle появляются 2 раздела — «Рубрики» и «Блоки». В разделе «Рубрики» редактируется структура сайта:
Положение рубрик в дереве можно менять, для этого нужно только перетащить соответствующую рубрику или ветку.
На странице редактирования рубрики вводится название рубрики, директория рубрики, выбирается родительская рубрика и модуль, размещенный в рубрике.
Значения поля «директория» используется для адресации рубрик на сайте. При занесении рубрики по умолчанию отмечен чекбокс «Использовать название рубрики» — значение поля «директория» автоматически формируется как транслитерация поля «Название»
Модули
Список модулей, доступных для выбора при редактировании рубрики, формируется на основе классов, созданных на основе базового класса Iphp\CoreBundle\Module. Модули бандла должны быть размещены в поддиректории Module директории бандла.
Модули подразделяются на те, которые могут быть размещены несколько раз в структуре сайта — например, модуль «Рубрика — список подрубрик» (RubricIndexModule) и И модули, которые могут быть размещены только один раз в структуре рубрик сайта — например модуль «Индекс сайта» (SiteIndexModule). Обязательным для модуля является указание названия модуля и регистрации маршрутов роутинга в модуле с помощью метода registerRoutes().
Создание модуля с созданием маршрутов посредством метода registerRoutes
<?php // Iphp/CoreBundle/Module/SiteIndexModule.php namespace Iphp\CoreBundle\Module; use Iphp\CoreBundle\Module\Module; /** * Модуль индекс сайта */ class SiteIndexModule extends Module { function __construct() { $this->setName('Индекс сайта'); $this->allowMultiple = false; } protected function registerRoutes() { $this->addRoute('site_index', '/', array('_controller' => 'IphpCoreBundle:Rubric:indexSite')); } }
<?php // Iphp/CoreBundle/Module/RubricIndexModule.php namespace Iphp\CoreBundle\Module; use Iphp\CoreBundle\Module\Module; /** * Модуль - список подрубрик текущей рубрики */ class RubricIndexModule extends Module { function __construct() { $this->setName('Рубрика - список подрубрик'); $this->allowMultiple = true; } protected function registerRoutes() { $this->addRoute('index', '/', array('_controller' => 'IphpCoreBundle:Rubric:indexSubrubrics')); } }
Маршруты модуля, который может быть размещен только в одной рубрике, регистрируются бандлом IphpCoreBundle в общей системе маршрутизации под тем же именем, под которым они указаны в методе registerRoutes (например, «site_index»), только к пути префиксом добавляется url рубрики, в которой размещен модуль (в случае модуля «Индекс сайта», размещаемого в корне дерева рубрик, префикс пустой). Названия маршрутов модуля, который может размещаться в нескольких рубриках, дополняются url рубрики, в которой размещен модуль. Например для модуля «Рубрика — список подрубрик», рамещенного в разделе «Новости» (‘/news/’) маршрут будет зарегистрирован под именем «news_index», если бы был размещен в рубрики «Новости»/»События» — имя было бы «news_events_index». Т.е. название формируется по правилу {url_рубрики, в котором / заменен _}_{название маршрута}.
Импорт маршрутов модуля из yml файла
В случае если для определенного функционала создан yml или xml файл с описанием роутинга, эти данных можно импортировать в модуль.
<?php namespace Some\ExistsBundle\Module; use Iphp\CoreBundle\Module\Module; class SomeExistModule extends Module { function __construct() { $this->setName ('Модуль с импортом маршрутов'); } protected function registerRoutes() { $this->importRoutes ('@SomeExistBundle/Resources/config/routing.yml'); } }
При этим к названию маршрутов, определенных в @SomeExistBundle/Resources/config/routing.yml добавляется название бандла. Т.е. если определен маршрут с именем «index» его имя будет «SomeExistBundle_index»

