Zend вопрос организации - PullRequest
2 голосов
/ 17 июня 2009

Итак, у меня возник вопрос об общей организации кода для платформы Zend в отношении компоновки.

Мой макет в основном такой:

(LAYOUT.PHTML)

<div id='header'>
<?= $this->Layout()->header ?>
</div>

<div id='main'>
<?= $this->Layout()->main ?>
</div>

<div id='footer'>
<?= $this->Layout()->footer ?>
</div>

и так далее и тому подобное. Теперь, чтобы сохранить мой код в моем заголовке отдельно от кода моего основного и кода моего нижнего колонтитула, я создал папку для моего представления, которая содержит header.phtml, main.phtml, footer.phtml. Затем я использую этот код для назначения содержимого header.phtml в $ this-> layout () -> header:

(INDEX.PHTML)

$this->Layout()->header = file_get_contents('index/header.phtml');
$this->Layout()->main = file_get_contents('index/main.phtml');
$this->Layout()->footer = file_get_contents('index/footer.phtml');

Это прекрасно работало, но я столкнулся с тем, что больше не хочу, чтобы main был статичным HTML. Я хотел бы иметь возможность вставить некоторые значения с помощью PHP. Поэтому в моем контроллере в indexAction я хочу иметь возможность загружать из моей базы данных и помещать значения в index / main.phtml. Есть ли способ сделать это без реструктуризации моего сайта?

Если нет, то есть способ сделать это, чтобы я мог иметь:

  1. Возможность помещать код в различные разделы моего макета, такие как Layout () -> header, Layout-> footer.

  2. Разделите эти части на разные файлы, чтобы их было легко найти и упорядочить, например, мой index / footer.phtml, index / main.phtml и т. Д.

  3. Не нужно помещать этот код в кавычки без необходимости, чтобы превратить его в строку для передачи в Layout () -> заголовок и т. Д.

Спасибо вам, ребята, за помощь.

этан

Ответы [ 5 ]

1 голос
/ 12 августа 2009

Если вы используете

$this->layout()->header = $this->render('index/header.phtml');

Он даже будет использовать представление, поэтому сохранит все ваши переменные, определенные при рендеринге заголовка.

Я бы предложил использовать что-то вроде

<?php echo ($header = $this->layout()->header)? 
      $header : $this->render('headerDefault.phtml'); ?>

в файле макета - он будет отображать заголовок по умолчанию из папки макета, если скрипт вида не переопределяет его.

1 голос
/ 18 июня 2009

->header in $this->layout()->header - это сегмент ответа . Вы можете отобразить части ответа, используя $this->_helper->viewRenderer->setResponseSegment('header'); в действии.

1 голос
/ 17 июня 2009

Вот идея:

  • Назначить layout () -> заголовок имя файла вместо содержимого.
  • Поместите свой код в этот файл
  • В вашем файле макета включите () или require () макет-> заголовок ().

Так как ваши верхние / нижние колонтитулы теперь анализируются, вы можете использовать их как представление.

0 голосов
/ 18 июня 2009

помощники хороши. Другой вариант, как и выше, помещает имена файлов в верхний / нижний колонтитулы - помещайте имена шаблонов и используйте $this->render($this->layout()->header)), и т. Д. И т. Д. Это так же, как указано выше, включить / требовать, но более согласованно.

0 голосов
/ 18 июня 2009

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

$this->Layout()->header = $this->header();
$this->Layout()->main = $this->main();
$this->Layout()->footer = $this->footer();

Преимущество использования помощников вида перед операторами include и require заключается в том, что вся обработка файлов и разрешение имен обрабатываются платформой. руководство содержит больше информации о том, как настроить пути и примеры использования и т. Д.

...