Как создать и настроить меню приложения для OroCRM (Oro Platform)?

В OroCRM (Oro Platform) вы можете создать свое совершенно особое меню или использовать простую технику для добавления и переопределения любого пункта или секции. В данном руководстве подробно описывается данный процесс.

Давайте предположим, что у вас уже есть бандл с пространством имен «Acme\Bundle\NewBundle» в директории /src с сгенерированным или созданным вручную форматом конфигурации через аннотации.

Определение пути в аннотации

Для начала перейдем к нашему контроллеру по умолчанию, создадим экшн и укажем маршрут в аннотациях (относительно пути src/Acme/Bundle/NewBundle/Controller/DefaultController.php):

<?php

namespace Acme\Bundle\NewBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;  
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;  
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class DefaultController extends Controller  
{
    /**
     * @Route("/hello", name="acme_link")
     * @Template()
     */
    public function indexAction()
    {
        return array('name' => "hello link");
    }
}

Затем вы должны создать и указать шаблон для нашего экшена (путь к файлу src/Acme/Bundle/NewBundle/Resources/views/Default/index.html.twig) следующего содержания:

{% extends "OroUIBundle:Default:index.html.twig" %}
{% block content %}
{{ name }}!
{% endblock content %}

И последнее — вы должны зарегистрировать пути до вашего бандла. Для этого создайте файл routing.yml в src/Acme/Bundle/NewBundle/Resources/config/oro/routing.yml со следующим содержанием:

acme_new_bundle:  
    resource:     "@AcmeNewBundle/Controller"
    type:         annotation
    prefix:       /user

Теперь нам нужно создать navigation.yml файл в src/Acme/Bundle/NewBundle/Resources/config/navigation.yml со следующим содержанием:

oro_menu_config:  
    items:
        acme_tab:
            label: Acme label
            uri:   '#'
            extras:
                position: 300
        acme_tab_link:
            label: Acme link label
            route: acme_link
            extras:
                routes: ['/^acme_link/']
                description: My description
    tree:
        application_menu:
            children:
                acme_tab:
                    children:
                        acme_tab_link: ~

oro_titles:  
    acme_link: My link page title

Теперь мы должны перезагрузить навигационные данные и очистить кэш:

user@host:/var/www/vhosts/platform-application$ php app/console oro:navigation:init  
Load "Title Templates" from annotations and config files to db  
Completed

user@host:/var/www/vhosts/platform-application$ php app/console cache:clear  
Clearing the cache for the dev environment with debug true  

Если вы работаете в production используйте параметр –env=prod.

Теперь наша секция и пункт меню добавлены в стандартное меню Oro Platform:

И вот в результате после клика:

Переопределить пункт меню

Чтобы изменить какую-нибудь часть меню, вы должны будете создать файл navigation.yml в src/Acme/Bundle/NewBundle/Resources/config/navigation.yml со следующим содержанием (будет добавлена ссылка с именем «Acme link1 label» в секцию Sales):

oro_menu_config:  
    items:
        sales_tab:
            label: Sales
            uri:   '#'
            extras:
                position: 100
        acme_tab_link1:
            label: Acme link label
            route: acme_link
            extras:
                routes: ['/^acme_link/']
                description: My description
    tree:
        application_menu:
            children:
                sales_tab:
                    merge_strategy: append
                    children:
                        acme_tab_link: ~

oro_titles:  
    acme_link: oro dev

Теперь перезагрузим навигационные данные и очистим кэш:

user@host:/var/www/vhosts/platform-application$ php app/console oro:navigation:init  
Load "Title Templates" from annotations and config files to db  
Completed

user@host:/var/www/vhosts/platform-application$ php app/console cache:clear  
Clearing the cache for the dev environment with debug true  

Теперь вы можете найти пункт меню Acme link1 label в секции Sales: