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).