【问题标题】:Different layouts for different views in the same symfony application同一个 symfony 应用程序中不同视图的不同布局
【发布时间】:2011-05-17 19:58:26
【问题描述】:

我有一个带有单个应用程序 frontend 的 symfony 1.4 项目。此应用程序具有单个模块 book 和单个操作 index

我有 两个 用于索引操作的模板:indexSuccess.mobile.phpindexSuccess.html.php。该操作将设置格式以调用这些模板中的一个或另一个。

我想为这两个模板分别使用不同的布局:layout.mobile.phplayout.html.phpapps/frontend/modules/book/config/view.yml 文件用于指定要使用的布局以及布局中包含哪些 CSS 和 JavaScript 文件。

由于每个模块只能有一个view.yml 文件,我如何配置view.yml 以便indexSuccess.mobile.php 使用layout.mobile.php 并加载适当的CSS 和JS 文件,而indexSuccess.html.php 使用layout.html.php 和加载适当的 CSS 和 JS 文件?

我想使用布局,因为我最终会在这个模块中添加更多的动作/模板。

【问题讨论】:

    标签: templates layout symfony1


    【解决方案1】:

    您可以使用您的操作的setLayout() 方法来实现此目的。 UPDATE 对于 css 和 js 文件,您也可以使用操作(调用 sfWebResponse::addStylesheet()sfWebResponse::addJavascript())。 如果您绝对想从view.yml 执行所有这些操作,最好更改模板名称(在您的操作中返回不同的后缀)

    【讨论】:

    • 这解释了如何为特定操作定义布局,但它没有回答我关于如何使用单个文件 view.yml 配置多个布局的问题。请记住,view.yml 包含布局的配置信息,例如要包含的样式表、要包含的 JavaScript 文件等。
    • @rlandster:我认为不可能在sf_format 的基础上从view.yml 配置布局,因此我的解决方案是
    【解决方案2】:

    我没有测试,但似乎可以解决问题:

    <?php
        // in indexSuccess.mobile.php
        decorate_with('layout.mobile');
    

    【讨论】:

      【解决方案3】:

      我可能很晚才回答这个问题,但我认为这可能会对某人有所帮助,因为如果他们像我一样被要求在这些旧版本(例如 symfony 1.4)上工作,那么他们的运气不好。

      您可以指定每个操作的布局文件。所以解决办法就是把layout和my_layout放在apps/frontend/templates目录下,在apps/frontend/modules/book/config/view.yml里面定义layout配置,如下:

      indexSuccess:
       layout: my_layout
      
      mobileSuccess:
       layout: layout
      

      更多信息,请查看this链接中的“布局配置”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-31
        • 2016-12-07
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2011-06-30
        • 1970-01-01
        • 2010-09-13
        相关资源
        最近更新 更多