Поиск всех узлов, на которые нет ссылок в меню или другом узле


8

В процессе создания контента для сайта мы получили осиротевшие узлы контента, которые нигде не связаны. Я хотел бы найти и изучить их. Удивительно, но я не могу найти модуль для этого.

Крошечный гипотетический пример: я создаю сайт для брошюр. Кто-то написал страницу «Контакты», кто-то написал «О нас», а кто-то написал «Направления». Человек, пишущий «Указания», забыл поместить его в ссылку меню или добавить ссылку «О нас» в «Указания». Так что «Направления» осиротели: ссылок на это нет. Я хотел бы найти все такие узлы, чтобы понять, что с ними делать.


Вы видите эти узлы, когда перечисляете все узлы?
BetaRide

Да. В них нет ничего особенного. Они просто осиротели с точки зрения меню и ссылок.
Дэн Халберт

Есть ли причина, по которой вы не можете удалить их со страницы общего содержания?
BetaRide

Нет, но это не проблема. Из, скажем, всех основных страниц на странице контента, я хочу знать, какие из них являются сиротами, а какие нет. Я собираюсь посмотреть на сирот и посмотреть, есть ли внутри какой-то контент, который я хочу. Если нет, я их удалю. Проблема в том, что я не могу сказать, кто из них является сиротой, просто посмотрев на список. Например, один из моих редакторов, возможно, написал, скажем, страницу «Контакты», но мы забыли поместить ее в меню, и в настоящее время она недоступна, если вы не знаете URL.
Дэн Халберт

Вы просто интересуетесь существующими модулями или хотели бы написать собственный модуль, если ни один модуль не выполняет то, что вы ищете?
kiamlaluno

Ответы:


3

Для ссылок из системы меню:

Представления узлов меню очень близки к тому, что вы запрашиваете, но требуют некоторого кодирования .

Для ссылок из тела (полей) узлов:

Модуль поиска сохраняет ссылки между узлами. Это может использоваться представлениями для создания представления «обратных ссылок». Для Drupal 5 для этого был отдельный модуль с некоторым дополнительным расширением, так как D6 (Views 2/3) эта функциональность встроена в модуль Views.

Резюме

просмотры + ВБО + Меню Node API + меню Node Просмотры (+ Пользовательский фильтр / патч или View с пользовательским запросом )


Это полезно, хотя и не обрабатывает ссылки на узлы из тела (или чего-либо еще) других узлов. Я думаю, что это так хорошо, как я собираюсь получить - спасибо.
Дэн Халберт

Упс, пропустил ту часть. Добавлена ​​недостающая информация сейчас.
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

2

Вы пробовали Просмотров ? Вам нужно будет создать представление для потерянных узлов, которое будет зависеть от вашей таксономии и полей.


Я ищу, скажем, узлы базовой страницы, которые не имеют пункта меню или не связаны с каким-либо другим узлом. У них нет таксономии. Нет запроса View, который найдет их.
Дэн Халберт

У меня сложилось впечатление, что вы можете использовать (не) логику в представлениях. Таким образом, вы можете сказать что-то вроде Узлов, где поле таксономии XYZ пусто.
Дэвид Барратт

Эти узлы не имеют полей таксономии. Я просто хочу знать, доступны ли они в меню или связаны ли они с содержимым какого-либо другого (доступного) узла.
Дэн Халберт

2

Вы можете легко выполнить часть меню с помощью пользовательского запроса.

SELECT * 
FROM node
WHERE node.type = 'page'
AND node.nid NOT IN (
 SELECT nid
 FROM menu_node
)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.