php - 使用连接在 HTML 标记内回显带有条件的 PHP 函数

标签 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菜单在每个 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/

    相关文章:

    javascript - php 行,每行都有一个我想重定向到外部页面的按钮

    php - 面对多级类别层次结构中的一些问题

    html - 如何在 Google Chrome 中初始化全屏 Flash 对象?

    html - 我们如何将 div 居中到整个页面

    javascript - Image src 在 Firefox 中无法使用 .replace()

    css - 仅使用 CSS3 创建类似 Javascript 的 ScrollTo 效果?

    php/ajax REMOTE_ADDR 设置为伪造网络适配器的 IP

    javascript - Bootstrap - 单击时添加类

    html - 尽管最小高度为 0,但 Div 在空时仍具有高度

    html - 使用 html 的最内部内容