这是我的第一个问题。
<li>
构建一个简单的动态菜单
我正在尝试为网站上的每个页面输出<li>
:
<li class='active'><a href='page1'></a></li>
<li><a href='page2'></a></li>
<li><a href='page3'></a></li>
...
我使用PHP函数e($condition, $value)
仅在该页面isOpen()
// I need help here
<?php
foreach ($pages->visible() as $p):
echo "<li" . e($p->isOpen(), ' class="active"') . "><a href='" . $p->url() . "'></a></li>";
endforeach;
?>
该功能正常,但css部分class="active"
正在最终代码的<li>
外打印
class="active"
<li>...</li>
<li>...</li>
<li>...</li>
我之前的代码运行良好,但由于我使用的是display: inline-block
,因此以下代码将每个<li>
放在一个新行中,因此菜单在每个块之间都有空格。
// This code works
<?php foreach($pages->visible() as $p): ?>
<li <?php e($p->isOpen(), ' class="active"') ?> ><a href="<?php echo $p->url() ?>"></a></li>
<?php endforeach ?>
我重新编写代码的原因是删除inline: block
元素之间的空白区域。
我无法以函数的方式连接字符串,并在<li>
标记内打印结果。
我在这里搜索过,也在php.net上阅读过很多文档,但没有任何对我有用的东西,我正在为此困难2天。
我期望更好地学习如何以及何时使用连接和字符串运算符。
答案 0 :(得分:2)
问题是Kirby的e()函数已经在例程中有了echo,而不仅仅是返回值。
http://getkirby.com/docs/cheatsheet/helpers/e
如果您要将输出循环更改为更像这样的内容,单独回显,您将按所需顺序获得结果:
foreach($pages->visible() as $p)
{
echo "<li";
e($p->isOpen(), ' class="active"');
echo "> and the rest of your line </li>";
}
也就是说,在这种情况下,使用e()并不是最优雅的。也许尝试使用r()函数:
http://getkirby.com/docs/cheatsheet/helpers/r
foreach($pages->visible() as $p)
{
echo "<li ".r($p->isOpen(), ' class="active"').">more text</li>";
}