全局layout.php文件包含每个页面的标记:
<body>
<?php echo $sf_content ?>
</body>
但是对于我网站的所有内部HTML页面,都会将一个类应用于body标签:
<body class="inner-page">
<?php echo $sf_content ?>
</body>
如何将类传递给不同模板的布局?
答案 0 :(得分:4)
<body <?php if (!include_slot('body_id')): ?>id="default"<?php endif; ?>>
模板中的:
<?php slot('body_id') ?>id="bla"<?php end_slot(); ?>
或
<?php slot(
'body_id',
sprintf('id="%s"', $sf_params->get('module')))
?>
答案 1 :(得分:4)
以下是我与Symfony 1.2 +
一起使用的解决方案在操作中使用setSlot():
$this->getResponse()->setSlot('home_page', 'yes');
然后在布局中使用get_slot():
<body class="<?php echo has_slot('home_page') ? 'home-page' : 'inner-page' ?>">
答案 2 :(得分:0)
在大多数MVC框架中,您可以像在视图文件中访问变量一样访问布局中的变量。
所以,如果你做了类似$ this-&gt; view-&gt; my_data = 10;在控制中。您可以通过以下方式在布局中访问它: echo $ this-&gt; my_data。
这是伪代码,将其调整为交响乐方式。
答案 3 :(得分:0)
我90%肯定你这样做的方式与普通视图文件中的方式相同。因此,只要您在操作中设置变量,就应该可以从layout.php文件中访问它。
在你的行动中:
$this->body_class = "xxx";
在layout.php中
<body class="<?php echo $body_class?>">
请务必执行一些检查以确保设置$ body_class。
答案 4 :(得分:0)
sfConfig :: set('name_here',$ variableHere);
$ variable = sfConfig :: get('name_here');
我经常使用它。在代码的任何地方使用它。