我是一个绝对的PHP初学者。我有一个main.php文件,其中调用了一个php函数:
<div id="navigation">
<nav>
<?php echo navigation('exclude'=>array('/about.php')) ?>
</nav>
</div>我有一个在main.php中需要的文件navigation.php,它有一个小的构造函数来构建正确的导航结构,它看起来像这样:
<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>这对我来说很好,但我想有一些选项,这就是为什么我要建立一个函数:
function navigation($arguments=array()){
$defaults = array(
'class' => '',
'exclude'=> array()
);
$opts = array_merge($defaults, $arguments);要返回通过调用导航函数生成的HTML结构,正确的方法是什么?
发布于 2020-12-22 19:23:55
为了保持代码的整洁,您应该将模板(html)与业务逻辑(php)分开。因此,你的方法很棒。这里有一个简短的例子,告诉你如何解决你的问题。
首先,考虑要在函数中使用的所有数据。据我们所知,您需要页面和选项。这两个参数都是数组。
function navigation(array $pages = [], array $options = [])
{
$defaults = [
'class' => '',
'exclude' => [],
];
$options = array_merge($defaults, $options);
include __DIR__ . '/templates/navigation.phtml';
}正如您所看到的,正如您已经定义的那样,该函数没有做更多的事情。它接受另一个数组参数,页面存储在其中。在函数的末尾,它包含导航模板。在PHP端就没什么可做的了。
模板navigation.phtml看起来应该与您已有的类似。
<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文件中,您可以简单地调用导航函数。
<nav>
<?php navigation($pages, $options) ?>
</nav>必须在调用navigation函数之前声明$pages和$options变量。
https://stackoverflow.com/questions/65406769
复制相似问题