我想在主站点模板(布局)中放置类别菜单,这些菜单存储在数据库中并在管理面板(后端)中形成,以便它们在每个页面(前端)上都可见。在这种情况下,我存储数据的最佳位置在哪里,我如何在模板中获取它?
是否可以通过Navigation go 另一种解决方案来实现这一点
这是 Helper 函数,这里不可能像 $this->url('') 视图中那样形成类别链接。这种状态下,点击链接后,进入site/catalog/cat1,如果再次点击链接,则进入site/catalog/cat1/catalog/cat1:
public function render()
{
$result = '';
$categories = $this->getCategories();
if (! is_null($categories)) {
$categoryTree = [];
foreach ($categories as $category) {
$parentId = $category->getParent() ? (int)$category->getParent()->getId() : null;
$categoryTree[$parentId][] = $category;
}
foreach ($categoryTree[null] as $rootCategory) {
$result .= '<li class="parent-li">' . $rootCategory->getName();
if (isset($categoryTree[$rootCategory->getId()])) {
$result .= '<ul>';
foreach ($categoryTree[$rootCategory->getId()] as $childCategory) {
$result .= '<li class="child-li"><a href="'.'catalog/' . $childCategory->getUrl() . '">' . $childCategory->getName() . '</a></li>';
}
$result .= '</ul>';
}
$result .= '</li>';
}
}
return $result;
}
Zend Framework 3 MVC - 原则 2
布局是一个视图。这意味着视图助手在那里工作。通常使用视图助手来处理页眉和页脚,然后在布局中调用助手来呈现它们。了解有关添加助手的更多信息。
在 helper中,您可以使用导航 - 通过引用,一种将导航添加到服务管理器然后从控制器或帮助器的任何地方获取它的方法。
或者你不能使用它 - 如果导航没有计划在所有页面上进行分支和相似,那么 zend navigation 会显得有点笨重:在我个人的实践中,Zend Navigation 即使在比平均更大的门户网站上也几乎没用,但它增加了代码的复杂性。
有关如何导航的分步教程:
https://docs.zendframework.com/tutorials/navigation/#setting-up-zend-navigation
在他们有静态数组的地方,更改为来自数据库的查询,如我的示例所示。
PS:从数据库动态生成菜单非常耗费资源!不要忘记缓存菜单。