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


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.