首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP将<ul>列表作为函数结果返回

PHP将<ul>列表作为函数结果返回
EN

Stack Overflow用户
提问于 2020-12-22 18:10:12
回答 1查看 49关注 0票数 0

我是一个绝对的PHP初学者。我有一个main.php文件,其中调用了一个php函数:

代码语言:javascript
复制
<div id="navigation">
        <nav>
            <?php echo navigation('exclude'=>array('/about.php')) ?>
        </nav>
    </div>

我有一个在main.php中需要的文件navigation.php,它有一个小的构造函数来构建正确的导航结构,它看起来像这样:

代码语言:javascript
复制
<ul class="navi naviTop">
    <?php foreach($page as $key=>$singlepage){
    
    if(!isset($singlepage['submenu'])){ ?>
    <li class="navIem <?php echo $singlepage['name'];?>">
        <a href="<?php echo $key; ?>">
            <?php echo $singlepage['name'];?>
        </a>
    </li>

    <?php } else { ?>
       <ul class="hasSubs">
           <?php foreach($singlepage['submenu'] as $subkey=>$subpage){ ?>
            <li class="navItem subitem">
                <a href="<?php echo $subkey; ?>">
            <?php echo $subpage['name'];?>
                </a>
            </li>
            <?php } ?>
       </ul>
    <?php } ?>
    <?php } ?>
</ul>

这对我来说很好,但我想有一些选项,这就是为什么我要建立一个函数:

代码语言:javascript
复制
function navigation($arguments=array()){
    $defaults = array(
        'class' => '',
        'exclude'=> array()
    );
    
    $opts = array_merge($defaults, $arguments);

要返回通过调用导航函数生成的HTML结构,正确的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-22 19:23:55

为了保持代码的整洁,您应该将模板(html)与业务逻辑(php)分开。因此,你的方法很棒。这里有一个简短的例子,告诉你如何解决你的问题。

首先,考虑要在函数中使用的所有数据。据我们所知,您需要页面和选项。这两个参数都是数组。

代码语言:javascript
复制
function navigation(array $pages = [], array $options = [])
{
    $defaults = [
        'class' => '',
        'exclude' => [],
    ];

    $options = array_merge($defaults, $options);
    include __DIR__ . '/templates/navigation.phtml';
}

正如您所看到的,正如您已经定义的那样,该函数没有做更多的事情。它接受另一个数组参数,页面存储在其中。在函数的末尾,它包含导航模板。在PHP端就没什么可做的了。

模板navigation.phtml看起来应该与您已有的类似。

代码语言:javascript
复制
<ul class="navigation<?php if (!empty($options['class'])):?><?= $options['class'] ?><?php endif; ?>">
    <?php foreach ($pages as $url => $page): ?>
        <?php if (!in_array($url, $options['excludes']): ?>
            <li><a href="<?= $url ?>"><?= $page['name'] ?></a></li>
        <?pgp endif; ?>
    <?php endforeach ?>
</ul>

我已经缩短了代码示例,为了让你的模板中的逻辑尽可能的小,你可以在你的函数中过滤掉前面的页面,以避免模板中的in_array if条件。

在您的main.php文件中,您可以简单地调用导航函数。

代码语言:javascript
复制
<nav>
    <?php navigation($pages, $options) ?>
</nav>

必须在调用navigation函数之前声明$pages$options变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65406769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档