如何在 cakephp 3 中操作树形菜单的子项?
How to manipulate the child items of the tree menu in cakephp 3?
我对操纵子菜单项以改进显示样式存疑。
我目前正在根据文档生成:
function index()
{
$list = $this->Categorias->find('threaded')->toArray();
$this->set('list', $list);
}
$renderItems = function($items) use (&$renderItems)
{
echo '<ul>';
foreach ($items as $item) {
echo '<li>';
echo h($item->name);
if ($item->children) {
$renderItems($item->children); // < recursion
}
echo '</li>';
}
echo '</ul>';
};
$renderItems($list);
但是显示有误..显示格式是这样的:
感谢任何评论!
如树行为文档中所述,如果您想使用线程化结果,那么您需要某种递归功能来迭代顶级项目(您的示例正在执行),而且还嵌套的子项。
另请注意,在您的示例中使用 children
查找器只会检索具有指定主键的节点的子节点,即它不会检索其父节点,如果 table 包含多个根节点,它们也不会被检索。因此,根据您的数据,您可能只需要使用 threaded
查找器。
话虽如此,一个项目的子项嵌套在 children
property/key 下,因此基本示例如下所示:
$renderItems = function($items) use (&$renderItems)
{
echo '<ul>';
foreach ($items as $item) {
echo '<li>';
echo h($item->name);
if ($item->children) {
$renderItems($item->children); // < recursion
}
echo '</li>';
}
echo '</ul>';
};
$renderItems($list);
这将创建一个像这样的嵌套列表(当然没有 formatting/indenting):
<ul>
<li>
Fun
<ul>
<li>
Sport
<ul>
<li>Surfing</li>
<li>Skating</li>
</ul>
</li>
</ul>
</li>
<li>
Trips
<ul>
<li>National</li>
<li>International</li>
</ul>
</li>
</ul>
另见
我对操纵子菜单项以改进显示样式存疑。
我目前正在根据文档生成:
function index()
{
$list = $this->Categorias->find('threaded')->toArray();
$this->set('list', $list);
}
$renderItems = function($items) use (&$renderItems)
{
echo '<ul>';
foreach ($items as $item) {
echo '<li>';
echo h($item->name);
if ($item->children) {
$renderItems($item->children); // < recursion
}
echo '</li>';
}
echo '</ul>';
};
$renderItems($list);
但是显示有误..显示格式是这样的:
感谢任何评论!
如树行为文档中所述,如果您想使用线程化结果,那么您需要某种递归功能来迭代顶级项目(您的示例正在执行),而且还嵌套的子项。
另请注意,在您的示例中使用 children
查找器只会检索具有指定主键的节点的子节点,即它不会检索其父节点,如果 table 包含多个根节点,它们也不会被检索。因此,根据您的数据,您可能只需要使用 threaded
查找器。
话虽如此,一个项目的子项嵌套在 children
property/key 下,因此基本示例如下所示:
$renderItems = function($items) use (&$renderItems)
{
echo '<ul>';
foreach ($items as $item) {
echo '<li>';
echo h($item->name);
if ($item->children) {
$renderItems($item->children); // < recursion
}
echo '</li>';
}
echo '</ul>';
};
$renderItems($list);
这将创建一个像这样的嵌套列表(当然没有 formatting/indenting):
<ul>
<li>
Fun
<ul>
<li>
Sport
<ul>
<li>Surfing</li>
<li>Skating</li>
</ul>
</li>
</ul>
</li>
<li>
Trips
<ul>
<li>National</li>
<li>International</li>
</ul>
</li>
</ul>
另见