symfony1.4嵌套集通过标高导航

symfony1.4嵌套集通过标高导航,symfony1,doctrine,nested-sets,Symfony1,Doctrine,Nested Sets,我目前正在学习symfony1.4,并试图绕过条令的嵌套集功能,但成效有限。我有一个类别表,它使用嵌套的集合行为和可变树。我的分类树数据最多可以有六个深度 Categories: columns: category_name: type: string(40) actAs: NestedSet: hasManyRoots: true rootColumnName: parent_id 这些类别是针对产品的,我想要一个页面来过滤类别,以

我目前正在学习symfony1.4,并试图绕过条令的嵌套集功能,但成效有限。我有一个类别表,它使用嵌套的集合行为和可变树。我的分类树数据最多可以有六个深度

Categories:
  columns:
    category_name:
      type: string(40)
  actAs:
    NestedSet:
      hasManyRoots: true
      rootColumnName: parent_id
这些类别是针对产品的,我想要一个页面来过滤类别,以到达叶子,以便显示类别产品,例如,显示根,如果选择根,则显示其子项,如果选择子项,则显示其子项,等等,直到选择叶子节点

我试图构建一个过滤类别的二维数组,以传递给视图。。。没有成功。任何解决方案都会有帮助,因为我的脑袋都快炸了

非常感谢,

rob.

重新措辞 重新表述您的问题:您需要(节点和节点的每个祖先)及其兄弟姐妹

其他改写:您需要节点的每个祖先及其所有子节点(但不是其所有子节点)

不要认为你应该将hasManyRoots设置为true,除非你有几家商店。现在让我们假设您有一个根,您可以将其命名为“shop”

这里有第三个更简单的说法:你所需要的只是你节点的每个祖先的孩子(根据披头士乐队的说法,还有爱)

获取数据 将祖先作为数组获取(请参见最后§)很容易:

$this->ancestors = $currentCategory->getNode()->getAncestors()->getData();
现在,让我们构建一个查询,它将为您提供所需的信息。让我们假设您的模型命名为Category,而不是Categories(它确实应该)

等等。。。最后一个参数是关于什么的?在阅读关于嵌套集的条令文档时,您可能没有听说过它。那是因为它被记录在。这真的很糟糕,因为使用嵌套集时,
hydroge\u RECORD\u层次结构
非常有趣。现在,您在$categoryTree中拥有了作为层次结构所需的一切。无论你的树有多深,只有2个请求!我想一个人可以在一个请求中写出来,但我不知道怎么写

注意:还有一个
Doctrine\u Core::hydration\u ARRAY\u HIERARCHY
,它将hydrarchy化为一个分层数组,速度更快。如果不需要调用提供不属于对象的内容或在运行时计算的内容的方法,则可以使用它。您只需在模板中使用数组而不是对象表示法(例如,
$categoryTree['children']

显示数据 现在,在
\u menu.php
模板中,您可以执行以下操作:

<?php
array_shift($ancestors);
include_partial('level', array(
  'children'  => $categoryTree->get('__children'),
  'ancestors' => $ancestors
  );
我只是在没有测试任何东西的情况下编写了这个,所以它可能从一开始就无法正常工作。把你的问题告诉我就行了。祝你好运

重新措辞 重新表述您的问题:您需要(节点和节点的每个祖先)及其兄弟姐妹

其他改写:您需要节点的每个祖先及其所有子节点(但不是其所有子节点)

不要认为你应该将hasManyRoots设置为true,除非你有几家商店。现在让我们假设您有一个根,您可以将其命名为“shop”

这里有第三个更简单的说法:你所需要的只是你节点的每个祖先的孩子(根据披头士乐队的说法,还有爱)

获取数据 将祖先作为数组获取(请参见最后§)很容易:

$this->ancestors = $currentCategory->getNode()->getAncestors()->getData();
现在,让我们构建一个查询,它将为您提供所需的信息。让我们假设您的模型命名为Category,而不是Categories(它确实应该)

等等。。。最后一个参数是关于什么的?在阅读关于嵌套集的条令文档时,您可能没有听说过它。那是因为它被记录在。这真的很糟糕,因为使用嵌套集时,
hydroge\u RECORD\u层次结构
非常有趣。现在,您在$categoryTree中拥有了作为层次结构所需的一切。无论你的树有多深,只有2个请求!我想一个人可以在一个请求中写出来,但我不知道怎么写

注意:还有一个
Doctrine\u Core::hydration\u ARRAY\u HIERARCHY
,它将hydrarchy化为一个分层数组,速度更快。如果不需要调用提供不属于对象的内容或在运行时计算的内容的方法,则可以使用它。您只需在模板中使用数组而不是对象表示法(例如,
$categoryTree['children']

显示数据 现在,在
\u menu.php
模板中,您可以执行以下操作:

<?php
array_shift($ancestors);
include_partial('level', array(
  'children'  => $categoryTree->get('__children'),
  'ancestors' => $ancestors
  );

我只是在没有测试任何东西的情况下编写了这个,所以它可能从一开始就无法正常工作。把你的问题告诉我就行了。祝你好运

非常感谢格雷格!!感谢您抽出时间给予如此详细的回复。我使用我的facebook帐户创建了我的堆栈溢出帐户,由于某些原因,没有通过电子邮件告诉我您的答复。。。我会试一试,让你知道我进展如何。太好了!如果你的问题被卡住了,你可以用你想出来的代码来更新你的问题!你好?我甚至没有对这个花了我一段时间才写出来的答案投赞成票,我也没有收到你的来信。发生什么事了?我不是OP,但你肯定赢得了我的支持票。从未听说过等级隐藏。花了2分钟读你的答案是很好的!谢谢,我认为这是我在这里写的最好的答案之一,但我在php标签上简单问题的简短回答上获得了大部分声誉。。。太糟糕了!无论如何,再次感谢。非常感谢格雷格!!感谢您抽出时间给予如此详细的回复。我使用我的facebook帐户创建了我的堆栈溢出帐户,由于某些原因,没有通过电子邮件告诉我您的答复。。。我会试一试,让你知道我进展如何。太好了!如果你的问题被卡住了,你可以用你想出来的代码来更新你的问题!你好?我甚至没有对这个花了我一段时间才写出来的答案投赞成票,我也没有收到你的来信。发生什么事了?我不是执行官,但你肯定赢得了
<ul>
<?php $selectedChild = array_shift($ancestors);
foreach ($children as $child): 
  if ($isSelected = ($child->getId() == $selectedChild->getId())):
    $grandChildren = $child->get('__children');
  endif; ?>
  <li<?php if ($isSelected):?> class="selected"<?php endif?>>
     <?php echo $child->getName() ?>
  </li>
<?php endforeach ?>:
</ul>
<?php if (count($ancestors)):
    // RecursiviRecurRecuRecursiRRecursivityecursivityvityrsivitysivityty
    include_partial('level', array(
      'children'  => $grandChildren,
      'ancestors' => $ancestors
      );
endif; ?>