使用串联在HTML标记内部使用条件回显PHP函数

时间:2015-04-20 17:20:34

标签: php html css function 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,因此以下代码将每个<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天。

    我期望更好地学习如何以及何时使用连接和字符串运算符。

  • 1 个答案:

    答案 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>";
    }