Zend Framework - лучшие практики компоновки для «включений» - PullRequest
4 голосов
/ 19 ноября 2009

Я довольно новичок в Zend .. Мне просто интересно, как смоделировать макет / структуру моего сайта. Мой сайт будет иметь раздел профиля пользователя, раздел администратора и общий вид сайта по умолчанию.

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

Я хочу иметь возможность иметь полностью собственный скин, отдельный от представления по умолчанию, как мне структурировать вещи?

До сих пор я создал каталог в application/ с именем layouts. Я изменил файл application.ini, чтобы он учитывал это:

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"

Таким образом, мое представление макета по умолчанию теперь существует в application/layouts/scripts/layout.phtml, у меня есть заголовок и нижний колонтитул, встроенные в этот файл layout.phtml, но я хотел бы удалить их и поместить в отдельные файлы.

Может ли кто-нибудь помочь мне придумать структуру для этого? Поэтому, чтобы повторить, я хочу, чтобы пользовательский макет по умолчанию, пользовательский макет администратора, пользовательский макет профиля пользователя, и для всех 3 макетов я хочу, чтобы настраиваемый заголовок / нижний колонтитул включал, но я не уверен, как это правильно сделать в Zend, поскольку я Я привык включать файлы.

Ответы [ 4 ]

9 голосов
/ 20 ноября 2009

Структура каталогов:

/application
  /layouts
    /scripts
      /layout.phtml
      /profile.phtml
      /admin.phtml
      /_header.phtml
      /_footer.phtml

layout.phtml:

<?php echo $this->doctype('HTML4_STRICT') ?>
<html> 
<head>  
  <title>Bah</title>
</head> 
<body>
  <?php echo $this->render('_header.phtml') ?>
  <?php echo $this->layout()->content ?>
  <?php echo $this->render('_footer.phtml') ?>
</body>
</html>

profile.phtml:

<?php echo $this->doctype('HTML4_STRICT') ?>
<html> 
<head>  
  <title>Profile</title>
</head> 
<body>
  <!-- profile header -->
  <?php echo $this->layout()->content ?>
  <!-- profile footer-->
</body>
</html>

FooController.php:

profileAction()
{
    // do stuff
    $this->_helper->layout->setLayout('profile');
}

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

Если это не важно для вас, также будет работать помощник вида (запросите Front Controller, чтобы узнать, пришел ли запрос от действий администратора или профиля, переключитесь). Однако, на мой вкус, этот тип логики слишком сложен, чтобы принадлежать представлению.

1 голос
/ 20 ноября 2009

Если помощники вида сложны, используйте конкретный помощник вида. Если они просты, как <h1>my title</h1>, используйте частичный помощник вида для рендеринга шаблона.

1 голос
/ 19 ноября 2009

Чтобы иметь разный макет / конфигурацию для разных разделов сайта, я использую Модули со следующей настройкой модуля. Модуль Config

[Изменить]

Структура каталогов:

/application
    /forms
    /models
    /modules
        /admin
            /config
            /contollers
            /layout
            /views
        /default
            /config
            /contollers
            /layout
            /views
0 голосов
/ 20 ноября 2009

Реализация, которую я использую, выглядит следующим образом:

В каждом из файлов phtml макета (по умолчанию, admin и т. Д.)

Я использую:

<?= $this->action('header', 'page', 'default') ?>
<?= $this->layout()->content ?>
<?= $this->action('footer', 'page', 'default') ?>

поэтому в контроллере моей страницы может быть действие с именем headerAction или adminHeaderAction, которое ничего не делает (или фактически может выполнять конкретные задачи), но возвращает header.phtml (где я могу настроить информацию заголовка для этого макета) , Затем я могу настроить свой верхний и нижний колонтитулы отдельно от содержимого.

В моем контроллере мне просто нужно установить соответствующий макет:

$this->_helper->layout->setLayout('adminLayout');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...