Symfony Blog Bundle
HarentiusBlogBundle - бандл для блога/простого портала (Или сложного, если с наследованием бандлов и расширением). Движок этого сайта.
В качестве бэкенда используется SonataAdminBundle. Реализовано:
1. Админка (WYSIWYG, ckeditor), загрузка картинок, аудио, плеер.
2. Теги, категории, архивы, облако тегов
3. Статистика
4. RSS-feed (требует доработки)
5. "Умное" кэширование всего и вся, контент отдается очень быстро
Для "успокоения души" осталось:
1. Тесты
Установка
1) Во время написания актуальной была версия Symfony 2.7, так что для гарантировано будет работать именно с этой версией. Тестировал установку HarentiusBlogBundle на "голую" Symfony, но, теоретически, может использоваться и в существующем проекте.
Для stand-alone установки сначала установим Symfony 2.7:
composer.phar create-project symfony/framework-standard-edition test "2.7.*"
(Для использования в существующем проекте пропустите этот шаг).
Из-за использования bower-asset/ckeditor-more-plugin:dev-master в админке, для установки HarentiusBlogBundle в composer.json нужно прописать:
"minimum-stability": "dev",
"prefer-stable": true,
(В будущем планирую избавиться от этого шага). Так же нужно указать путь установки ассетов:
"extra": {
...
"asset-installer-paths": {
"npm-asset-library": "web/assets/vendor",
"bower-asset-library": "web/assets/vendor"
}
}
Переходим, собственно, к установке бандла:
$ composer.phar require harentius/blog-bundle
Для того, чтобы заставить его работать, необходимо подключить множество бандлов:
<?php
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
new Knp\Bundle\PaginatorBundle\KnpPaginatorBundle(),
new Knp\Bundle\MenuBundle\KnpMenuBundle(),
new WhiteOctober\BreadcrumbsBundle\WhiteOctoberBreadcrumbsBundle(),
new Sonata\CoreBundle\SonataCoreBundle(),
new Sonata\BlockBundle\SonataBlockBundle(),
new Sonata\DoctrineORMAdminBundle\SonataDoctrineORMAdminBundle(),
new Sonata\AdminBundle\SonataAdminBundle(),
new Sonata\TranslationBundle\SonataTranslationBundle(),
new FOS\JsRoutingBundle\FOSJsRoutingBundle(),
new Presta\SitemapBundle\PrestaSitemapBundle(),
new Symfony\Cmf\Bundle\RoutingBundle\CmfRoutingBundle(),
new Eko\FeedBundle\EkoFeedBundle(),
new Harentius\BlogBundle\HarentiusBlogBundle(),
);
// ...
}
3) Дальше подключаем конфигурацию и роутинг. В HarentiusBlogBundle уже есть примеры конфигурации. Вы можете просто их подключить с помощью imports, или, если вам так удобней, скопировать содержимое в свое приложение и сконфигурировать нужным образом самим.
Конфигурация
app/config/config.yml:
imports:
...
- { resource: "@HarentiusBlogBundle/Resources/config/config.yml" }
- { resource: "@HarentiusBlogBundle/Resources/config/security.yml" }
В случае использования конфигурации с HarentiusBlogBundle, удалите
imports:
...
- { resource: security.yml }
(Symfony не разрешает хранить конфигурацию security в нескольких файлах).
Роуты:
blog:
resource: "@HarentiusBlogBundle/Resources/config/routing.yml"
prefix: /
admin:
resource: "@HarentiusBlogBundle/Resources/config/routing-admin.yml"
prefix: /admin
Конфигурация бандла:
harentius_blog:
sidebar:
# ~ - no cache, 0 - unlimited cache
cache_lifetime: 3600
# Max tags number (ordered by max popularity)
tags_limit: 10
# Percent tags size, unlimited variants number (valid values: [50, 100], [25, 50, 75, 100], etc)
tag_sizes: [65, 80, 100]
homepage:
# ~ - no page, feed only or page slug
page_slug: index
# ~ - no feed
feed:
# ~ - all
category: ~
# Last articles number
number: 6
list:
posts_per_page: 20
# For avoiding internal apc cache conflicts if run multiple sites on one server.
cache:
apc_global_prefix: blog
statistics_cache_lifetime: 3600
Конфигурируем assetic:
assetic:
debug: "%kernel.debug%"
use_controller: false
filters:
cssrewrite:
apply_to: "\.css$"
less:
node: %nodejs.path%
node_paths: [%nodejs.modules_path%]
apply_to: "\.less$"
coffee:
bin: %bin_coffee%
apply_to: "\.coffee$"
5) Устанавливаем/обновляем БД в зависимости от выбранного типа установки:
app/console doctrine:schema:create
или
app/console doctrine:schema:update
6) Загружаем начальные значения: креденшелы админа, по умолчанию admin/admin, настройки и т.д.:
app/console blog:database:populate
На этом все, бандл установлен. К сожалению, получилось очень непросто, надеюсь со временим упростить. Любые комментарии/пожеланию только приветствуются (тут или на github).