在Symfony中包含页脚,页眉和侧边菜单的最佳方法

时间:2010-12-06 14:06:12

标签: symfony1

目前在我的symfony应用程序中,我创建了一个模块标题,然后是一个标题组件来处理模板中的标题部分,同样适用于页脚,

这是最好的方式吗?

另外,我有点不确定如何处理某些部分中包含的侧边菜单,我应该创建一个类别模块的组件侧面菜单并使用插槽来实现这一目标吗?

2 个答案:

答案 0 :(得分:2)

部分可能是最好的方式。

但是如果要放入布局中的内容只出现在某些操作中,而不是全部,则插槽非常有用。

你说你已经为页眉和页脚创建了一个模块。我更喜欢在应用程序模板文件夹中为每个文件创建一个部分。

/apps
  /yourapp
    /templates
      _header.php
      _footer.php
      layout.php

类别侧边栏听起来像一个组件,但是如何实现它取决于您是想要在每个页面上显示相同的组件,还是能够控制在不同页面上显示的侧边栏(如果有的话)。

如果你想在每个页面上使用相同的组件,只需在layout.php文件中包含组件(包含include_component)。如果您想要更多控制,请将组件包含在您需要显示的每个操作的模板中。

如果设置了特定属性,侧边栏的更复杂解决方案将包括在布局中。所以你的actions.class.php:

public function preExecute()
{
  $this->getRequest()->setAttribute('show_categories_sidebar', true);
}

然后在你的layout.php:

<?php if ($sf_request->hasAttribute('show_categories_sidebar')): ?>
  <div id="sidebar">
    <?php include_component('category', 'sidebar') ?>
  </div>
<?php endif; ?>

答案 1 :(得分:1)

我通常将页眉和页脚部分或组件放在默认模块中。然后我通过插槽将它们包含在布局中,使其他操作能够覆盖或禁用它们。所以简化的布局可能如下所示:

<body>
  <?php if (has_slot('header')): ?>
    <?php include_slot('header') ?>
  <?php else: ?>
    <?php include_component('default', 'header') ?>
  <?php endif ?>
  <?php echo $sf_content ?>
  <?php if (has_slot('footer')): ?>
    <?php include_slot('footer') ?>
  <?php else: ?>
    <?php include_partial('default/footer') ?>
  <?php endif ?>
</body>

您现在可以基于每个操作/模板覆盖页眉/页脚,并通过将插槽设置​​为false来完全禁用它们。类似的原则可以用于侧边菜单。