За последние 24 часа нас посетили 22978 программистов и 1231 робот. Сейчас ищут 725 программистов ...

ZF3, как включить .phtml из модуля в layout'е?

Тема в разделе "Прочие вопросы по PHP", создана пользователем dronord, 17 авг 2018.

Метки:
  1. dronord

    dronord Новичок

    С нами с:
    17 авг 2018
    Сообщения:
    2
    Симпатии:
    0
    Задумка такая: свой sidebar у каждого модуля.
    PHP:
    1. // layout.phtml
    2. <?php
    3. ...
    4. <body>
    5. <?= $this->partial('sidebar') ?>
    6. <?= $this->content ?>
    7. </body>
    8. ?>
    Проблема: partial() не работает.
    Как сделать include статичного .phtml файла из папки текущего модуля?
    Zend Framework 3.
     
  2. ded100let

    ded100let Новичок

    С нами с:
    11 сен 2018
    Сообщения:
    8
    Симпатии:
    0
    в конфигурационное файле модуля прописан путь к вьюхам?

    PHP:
    1. 'view_manager' => [
    2.     'template_path_stack' => [
    3.         __DIR__ . '/../view'
    4.     ]
    5. ]
     
  3. dronord

    dronord Новичок

    С нами с:
    17 авг 2018
    Сообщения:
    2
    Симпатии:
    0
    Эти настройки переписываются следующим модулем при загрузке.
    Будет использоваться настройка из последнего модуля.
    Надеюсь объяснил)
     
  4. ded100let

    ded100let Новичок

    С нами с:
    11 сен 2018
    Сообщения:
    8
    Симпатии:
    0
    если модули грузятся один за другим, то нужно знать какой модуль обрабатывал путь.

    первый вариант:

    в конструкторе каждого контроллера модуля пишем:

    define('CURRENT_MODULE', 'module');

    в конфигурационном файле модуля:

    'template_path_stack' => array(
    'module' => __DIR__ . '/../view'
    )

    в layout:
    PHP:
    1. partial(CURRENT_MODULE .'/sidebar')
    не тестировал, но мысль должна быть понятна.

    либо другой вариант. В роутере пишем значение модуля, переписываем partial viewHelper, который проверяет в Request значение модуля и подставляет нужный .phtml файл.

    путь
    PHP:
    1. 'admin' => array(
    2.     'type' => 'segment',
    3.     'options' => array(
    4.         'route' => '/admin',
    5.         'defaults' => array(
    6.             'module' => 'admin'
    7.             '__NAMESPACE__' => 'App\Controller\Admin',
    8.             'controller' => 'Index',
    9.             'action' => 'index',
    10.         ),
    11.     ),
    12. ),
    в переписанном View helper:
    PHP:
    1. $module = $this->getEvent()->getRouteMatch()->getParam('module', 'application');
    как уже писал выше, не тестировал, но идея должна быть понятна.