2014-02-20 2 views
0

У меня есть два модуля. один - это приложение, а другое - admin. На обоих модулях у меня есть footer.phtml в следующей структуре.Частицы для нескольких модулей на Zend Framework 2

Application> вид> приложение> частичный Администратора> вид> админ> частичная

Я также настройка по пути к частичной папке follwing в module.config.php

Для модуля приложения

'template_path_stack' => array(
    'app' => __DIR__ . '/../view', 
    'appPartial' => __DIR__ . '/../view/application/partial', 
    ), 

и для модуля администратора

'template_path_stack' => array(
    'admin' => __DIR__ . '/../view', 
    'partial' => __DIR__ . '/../view/admin/partial', 
    ), 

Но всякий раз, когда я использую частичный ('footer.phtml')?> В любом макете, он всегда загружает нижний колонтитул из модуля администратора. Я знаю, что могу использовать частичный ('application/partial/footer.phtml')?>, Но я хочу знать, есть ли способ, только с помощью template_path_stack.

Спасибо за помощь. :)

ответ

0

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

Вы также можете использовать карту шаблонов, по крайней мере, для конкретных представлений, таких как нижний колонтитул. Другой бонус - это то, что карта шаблонов более эффективна.

+0

привет jmleroux, да, мы можем сопоставить различные парциальные с помощью template_map на module.config.php. , например. \t \t 'template_map' => массив ( 'apppartial' => __DIR__. '/../view/application/partial/footer.phtml', ), и мы можем использовать частичное ('apppartial') ?>, чтобы сделать частичный. Фокус в том, чтобы использовать разные ключи для частичного, как вы сказали. Но затем мы скоро заполним template_map частичными путями. Это звучит не очень хорошо. – Laxman

+0

Это не трюк, но хорошая практика, чтобы назвать ваши взгляды с ясными именами. Название типа «mymodule/footer» лучше, чем «нижний колонтитул», потому что вы можете быстро определить первое. Я действительно не понимаю, почему заполнение карты шаблонов частичными звуками плохо (это более эффективный путь, чем path_stack), но вы можете просто использовать template_map для представлений специфики, таких как нижние колонтитулы, и сохранить path_stack для остальных. – jmleroux

+0

мы также не можем использовать template_map все время. Это не кажется разумным, если нам нужно заполнить template_map каждый раз, когда мы создаем новый частичный. Проблема заключается не только в одном footer.phtml. Что бы вы сделали, если бы у нас было, скажем, 25 партикулов по каждому модулю. Я согласен с вами в том, что template_map будет более эффективным, но поверьте мне, что это не всегда лучшая идея. – Laxman

1

Вы можете определить частичные элементы в стеке шаблонов в обоих модулях. Помните, что ключи должны быть разными. И затем используйте ключ вместо имени файла. Как и в вашем случае, у вас есть appPartial и partial.

Вы можете скачать частично эти клавиши.

<?php echo $this->partial('partial'); ?> 

Или

<?php echo $this->partial('appPartial'); ?> 

Upadte:

Вы можете категории ваши макеты в подкаталоги.

layout/ 
    admin/ 
     layout.phtml 
    login/ 
    partials/ 
    layout.phtml 

Если у вас есть общий частичный, вы можете включить его во все макеты, не определяя его снова. Вы можете использовать заданный ключ в вашем Update layout.phtml

:

Вот мой код для реализации различных раскладок на различных контроллеров в одном модуле. Может быть, вы найдете что-то полезное.

if ($controllerName == "Application\Controller\Index") { 
    if (is_readable(__DIR__ . '/view/layout/layout.phtml')) { 
      $controller->layout('layout/layout'); 
    } 
} else if ($controllerName == "Application\Controller\Admin" && $statusCode != "404") { 
    if (is_readable(__DIR__ . '/view/layout/admin/layout.phtml')) { 
      $controller->layout('admin/layout'); 
    } 
} else { 
    if (is_readable(__DIR__ . '/view/layout/layout.phtml')) { 
      $controller->layout('layout/layout'); 
    } 
} 

admin/layout и layout/layout определяются как

'view_manager' => array(
     'display_not_found_reason' => true, 
     'display_exceptions'  => true, 
     'doctype'     => 'HTML5', 
     'not_found_template'  => 'error/404', 
     'exception_template'  => 'error/index', 
     'template_map' => array(
      'layout/layout'   => __DIR__ . '/../view/layout/layout.phtml', 
      'layout/_top'   => __DIR__ . '/../view/layout/_top.phtml', 
      'layout/_header_navigation'   => __DIR__ . /../view/layout/_header_navigation.phtml', 
      'layout/_footer_navigation'   => __DIR__ . '/../view/layout/_footer_navigation.phtml', 
      'layout/_footer'   => __DIR__ . '/../view/layout/_footer.phtml', 
      'application/index/index' => __DIR__ . '/../view/application/index/index.phtml', 
      'error/404'    => __DIR__ . '/../view/error/404.phtml', 
      'error/index'    => __DIR__ . '/../view/error/index.phtml', 
      'admin/layout'    => __DIR__ . '/../view/layout/admin/layout.phtml', 
      'admin/layout/login'    => __DIR__ . '/../view/layout/admin/login.phtml', 
      'admin/layout/leftpanel' => __DIR__ . '/../view/layout/admin/_leftpanel.phtml', 
      'admin/layout/headerpanel' => __DIR__ . '/../view/layout/admin/_headerpanel.phtml', 
      'jstranslations' => __DIR__ . '/../view/layout/_jstranslations.phtml', 
      'partial/_regional_searh_lists' => __DIR__ . '/../view/partials/_regional_search_lists.phtml', 
      'partial/_paginator' => __DIR__ . '/../view/partials/_paginator.phtml', 
      'email/deleted_user' => __DIR__ . '/../view/partials/_deleted_user_message_template.phtml', 
      'email/deleting_user' => __DIR__ . '/../view/partials/_deleting_user_message_template.phtml', 
      'email/delete_account' => __DIR__ . '/../view/partials/_delete_account.phtml', 
     ), 
     'template_path_stack' => array(
      __DIR__ . '/../view', 
     ), 
    ), 

module.config.php В

+0

Да, это может быть вариант. но у меня есть 4 разных модуля, каждый из которых имеет 4 разных формата. И кажется очевидным назвать нижнюю часть всех макетов как footer.phtml, нет? – Laxman

+0

Как нижний колонтитул и файлы заголовков обычно являются общими. Лучше всего, если вам нужно использовать разные макеты, такие как admin, login, frontend screens, тогда лучший подход - определить отдельные макеты в папке layotus в любом модуле. Очевидно, что эти новые макеты будут иметь разные нижние колонтитулы, частичные части заголовка. И просто примените этот макет в своем модульном классе 'Module.php'. Вы можете разделить макеты на уровне каталога, поскольку вы будете использовать ключи из стека пути шаблона. См. Мой обновленный ответ. – Bilal

+0

Привет Билал, сначала спасибо за быстрые ответы. :) Частичные не являются общими, за исключением того, что у них одинаковое имя файла. Я согласен с вами в том, что я могу использовать другую структуру папок для дифференциации частичных ключей. Но это будет то же самое, что использовать полностью квалифицированный частичный путь как $ this-> partial ('application/partial/footer.phtml') $ this-> partial ('admin/partial/footer.phtml') Это было бы громоздко, :) – Laxman

Смежные вопросы