这是我的第一个问题。
<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
菜单在每个 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 天。
我期待更好地学习如何以及何时使用连接和字符串运算符。
最佳答案
问题是 Kirby 的 e() 函数在例程中已经有了回显,而不是简单地返回值。
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>";
}
关于php - 使用连接在 HTML 标记内回显带有条件的 PHP 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29754324/