使用连接在 HTML 标记内回显 PHP 函数和条件
Echo a PHP function with condition inside HTML tag using concatenation
这是我的第一个问题。
我正在使用 <li>
构建一个简单的动态菜单
我正在开发基于 PHP 的 CMS (Kirby)
Kirby 预定义了 PHP 个函数(助手)
我正在尝试为网站上的每个页面输出一个 <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
,菜单在每个块之间有 spaces,因为以下代码将每个 <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
元素之间的白色 space。
我未能以函数工作的方式连接字符串并将其结果打印在 <li>
标记内。
我在这里搜索过,并且在 php.net 中阅读了很多文档,但对我没有任何帮助,我为此苦苦挣扎了 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>";
}
这是我的第一个问题。
<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
,菜单在每个块之间有 spaces,因为以下代码将每个 <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
元素之间的白色 space。
我未能以函数工作的方式连接字符串并将其结果打印在 <li>
标记内。
我在这里搜索过,并且在 php.net 中阅读了很多文档,但对我没有任何帮助,我为此苦苦挣扎了 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>";
}