• Аналог компонентов 1C-Bitrix в Symfony?

    @shaqster
    Symfony3 Guru
    Получается что, в каком-то смысле, можно было использовать несколько контроллеров на одной странице одновременно.

    https://symfony.com/doc/current/templating/embeddi...
    Если очень хочется, то можно вот так:
    {{ render(controller('AppBundle:Article:recentArticles' )) }}
    Ответ написан
    Комментировать
  • Аналог компонентов 1C-Bitrix в Symfony?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    В Symfony обычно основной код работает в сервисах, а контроллер вызывает нужный сервис. Большой плюс - один раз создал код работы с сущностью, и можно использовать его в любом месте - в любом контроллере, в другом сервисе, в шаблоне. Весь год работы с сущностью - в одном месте (в одном сервисе).
    1) Сделать сервис, который строит список последних новостей (этот же сервис использует кэш).
    2) Создать Twig расширение, которое добавляет функцию получения списка последних новостей (получение из созданного сервиса). Например, создать функцию "lastNews". Ссылку на сервис новостей настроить через контейнер (в services.yml, или где там делаете сервисы). (ссылки для создания функций: 1, 2)
    3) В основном шаблоне (app/Resources/views/layout.html.twig) вызвать созданную функцию. Упрощённо примерно вот так:
    {# app/Resources/views/base.html.twig #}
    <!DOCTYPE html>
    <html lang="ru">
        <head>
        </head>
        <body>
            {% block body%}{% endblock %}
            {% block javascripts %}{% endblock %}
        </body>
    </html>


    {# app/Resources/views/layout.html.twig #}
    {% extends 'base.html.twig' %}
    
    {% block body %}
    <div class="container">
        <div class="sidebar">
            {% block sidebar %}
                <ul class="sidebar-menu">
                {% for item in lastNews() %}
                  <li><a href="{{ item.href }}">{{ item.title }}</a></li>
                {% endfor %}
                </ul>
            {% endblock %}
        </div>
        <div class="content">
            {% block content %}
            {% endblock %}
        </div>
    </div>
    {% endblock %}
    Ответ написан
    5 комментариев
  • Структура универсального каталога данных?

    @MadridianFox
    Web-программист, многостаночник
    Вангую - щас понабегут люди с советами типа "юзай mongodb"...
    Вообще можно использовать EAV. Это когда атрибуты сущности хранятся не горизонтально (столбцы в таблице), а вертикально (один атрибут - одна строка). Дополнительно нужны таблицы, которые будут хранить список типов сущностей, список типов атрибутов и связи типов сущностей и типов атрибутов.

    Но предупреждаю - есть ощутимое проседание по быстродействию, да и работать с этим может быть не так удобно.
    В случае, когда необходимо соорудить хранилище для однотипных сущностей с опциональными атрибутами, например каталог товаров, где всё есть товар, но у холодильника есть мощность, а у смартфона - количество мегапикселей это в самый раз.
    Так вот, в таком случае быстродействие по фильтрации достигается через создание отдельного индекса, может даже с использованием отдельного ПО, такого как Sphinx.
    Ответ написан
    7 комментариев