查找菜单条目或其他节点未引用的所有节点


8

在为网站创建内容的过程中,我们最终得到了孤立的内容节点,这些节点没有从任何地方链接到该节点。我想找到并检查这些。令人惊讶的是,我找不到用于此的模块。

微小的假设示例:我正在建立一个宣传册站点。有人写了“联系”页面,有人写了“关于我们”,有人写了“路线”。撰写“路线”的人忘记将其放在菜单链接中,或从“关于我们”到“路线”的链接添加。因此,“方向”是孤立的:没有链接。我想找到所有这样的节点,以便弄清楚如何处理它们。


列出所有节点时,您是否看到此节点?
BetaRide 2012年

是。他们没有什么特别的。它们只是在菜单和链接方面处于孤立状态。
丹·哈尔伯特

为什么不能从常规内容页面中将其删除?
BetaRide 2012年

不,但这不是问题。例如,在内容页面上的所有基本页面中,我想知道哪些是孤儿,哪些不是孤儿。我要看这些孤儿,看看里面是否有我想要的东西。如果没有,我将其删除。问题是,仅通过查看列表我就无法分辨出哪些是孤儿。例如,我的一位编辑可能写了一个“联系人”页面,但我们忘记将其放在菜单中,因此除非您知道URL,否则它目前无法访问。
丹·哈尔伯特

您只是对现有模块感兴趣,还是愿意在没有模块的情况下编写自定义模块?
kiamlaluno

Answers:


3

对于菜单系统中的链接:

菜单节点视图非常接近您的要求,但需要一些编码

对于来自节点主体(字段)的链接:

搜索模块保存节点之间的引用。视图可以使用它来创建“反向链接”视图。对于Drupal 5,有一个单独的模块,带有一些额外的功能,因为D6(视图2/3)将此功能烘焙到了视图模块中。

摘要

视图 + vbo + 菜单节点API + 菜单节点视图(+自定义过滤器/补丁或带有自定义查询的视图


这很有用,尽管它不处理从其他节点主体(或其他任何节点)到节点的链接。我认为这和我要得到的一样好-谢谢。
丹·哈尔伯特

糟糕,错过了这一部分。现在添加了缺少的信息。
s.Daniel

4

我需要此来满足客户的请求,因此我决定尝试不使用任何其他模块就可以做到这一点,并稍微推挤我的MySQL。这就是我最终得到的。

为了清楚起见,这只会提供没有关联菜单项的NID列表。

我还添加了WHERE子句以限制内容类型,因为某些内容类型由于其构造方式而自然会被排除。

SELECT n.nid, n.type, n.title, n.status
FROM node AS n
WHERE (n.type = 'article' OR n.type = 'page')
AND n.nid NOT IN (
  SELECT REPLACE(link_path, "node/", "") AS nid
  FROM menu_links
  WHERE SUBSTRING(link_path, 6, LENGTH(link_path)) REGEXP "^[0-9]+$" 
);

不错的解决方案!+1(无新模块)。
Sam152'9

2

您是否尝试过Views?您需要为孤立节点创建一个视图,这将取决于您的分类法和字段。


我正在寻找没有菜单项或未从任何其他节点链接到的“基本页面”节点。他们没有分类法。没有要查询的View查询。
丹·哈尔伯特

我的印象是您可以在视图上使用(不)逻辑。因此,您可以说“节点”,其中“ xyz分类法”字段为空。
大卫·巴拉特

这些节点没有分类字段。我只想知道它们是否可以在菜单中访问,或者是否从其他(可访问)节点的内容链接到它们。
Dan Halbert

2

您可以使用自定义查询轻松完成菜单部分。

SELECT * 
FROM node
WHERE node.type = 'page'
AND node.nid NOT IN (
 SELECT nid
 FROM menu_node
)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.