Устройство схемы меню в бекэнде

Секции, элементы и подэлементы

return array(
    'orders' => array(
        'items' => array(
            'view_orders' => array(
                'href' => 'orders.manage',
                'alt' => 'order_management',
                'position' => '100',
            ),
            'sales_reports' => array(
                'href' => 'sales_reports.view',
                'position' => '200',
                'subitems' => array(
                    'subitem_1' => array(
                        'href' => 'smth.todo'
                    )
                )
            )
        )
    )
);
/*
 * orders - название секции, значение передается в функцию для получения описания
 * items - коллекция элементов
 *  view_order - название элемента, значение передается в функцию для получения описания. Так же к
 *               этому значению пристыковывается суффикс "_menu_description" для получения расширенного описания
 *      href - урл элемента, описывается в формате controller.mode?param1=val1
 *      alt - дополнительные урлы, при совпадении которых с текущим урлом данный элемент считается выбранным
 *      active_option - название опции в виде "settings.General.option_name" - если опция выключена, элемент
 *                      не отображается.
 *      position - позиция элемента
 *      subitems - подэлементы текущего элемента (поддерживается один уровень вложенности), структура та же,
 *                 что и для коллекции items (см. выше)
 */

Динамические элементы (actions)

return array(
    'orders' => array(
        'side' => array(
            'sales_reports.view' => array(
                'manage_reports' => array(
                    'href' => 'sales_reports.manage',
                ),
            )
        )
    )
)
/*
 * orders - название секции, значение передается в функцию для получения описания
 * side - коллекция динамических элементов
 *   sales_reports.view - группа. Может быть как урлом, так и просто контроллером. Сравнивается с текущим урлом
 *                        для отображения только нужных элементов
 *       manage_reports - название элемента, значение передается в функцию для получения описания
 *          href - урл элемента, описывается в формате controller.mode?param1=val1
 */

Формирование URL

В URL можно добавлять плейсхолдеры в виде company_id=%COMPANY_ID. В этом случае плейсхолдер заменится на значение из $_REQUEST['company_id'].