контроллер вида модели — два вида меню в рамках MVC

Я использую PHP Phalcon, и я хотел бы реализовать два разных меню. Первый для обычного пользователя, а второй для администратора. Я хочу иметь два шаблона меню для легкого расширения меню.

Теперь у меня есть что-то вроде этого:

//Main template:

[...]

if (session->role == 'admin')
include 'adminmenu.volt'
elseif (session->role == 'user')
include 'usermenu.volt'

{{ get_content() }} //from upper templates

[...]

(У незарегистрированного пользователя нет меню.)

Я думаю, что это не совсем правильно. Прежде всего, я не знаю, как выделить активную позицию. Во-вторых, я хотел бы управлять меню из контроллера, например, добавить специальную опцию, изменив что-то в базе данных.
Есть ли правильный способ сделать это? Я хотел бы получить простое решение без использования JavaScript, модулей или микросервисов

0

Решение

Вы, вероятно, ищете частичные. В вашем базовом шаблоне вы захотите что-то вроде:

{% if this.session->get('role') == 'admin' %}
{{ partial('adminmenu') }}
{% else %}
{{ partial('usermenu') }}
{% endif %}

Вам нужно настроить каталог partials на ваш взгляд:

//This is a path relative to your views directory.
//The following is accurate if your partials directory is a child of your views directory.
$this->view->setPartialsDir('partials');

Как только вы это сделаете, выполнение {{частичное (‘имя’)}} будет ссылаться на файл name.volt в вашем каталоге partials.

Что касается выделения вашей позиции. Ваш частичный может позвонить диспетчеру и спросить, что контроллер и действия:

{{ this.dispatcher.getControllerName() }} and {{ this.dispatcher.getControllerName() }}

Вы можете проверить их значение в атрибуте href и установить активный флаг, если он равен true.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]