Пишем карту сайта под Drupal 7

Нужна ли HTML карта сайта или нет — это науке не известно. Как минимум она нужна SEO — специалистам. :)

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

А я расскажу как написать свой модуль карты сайта.

Бывают частные случаи, которые готовыми модулями не могут быть решены. Типична задача с каталогом товарных позиций. Если товаров много, то их не добавляют в меню. Но по логике товары требуется монтировать в определенный раздел сайта, так чтобы это выглядело как будто товар находится вот здесь:

[главная] — [каталог товаров] — [рубрика] — [товарная позиция]

Возможно, что вместо рубрики у вас целое дерево из рубрик и подрубрик.

Встречается и более простые примеры, например, лента новостей, блог. Здесь для публикаций также не создают пункта в меню, но есть какой то раздел, в который по логике они должны быть смонтированы.

[главная] — [все новости] — [новостная публикация]

Концепция карты сайта

Кроме публикаций, у вас наверняка на сайте могут быть разделы, созданные программно. Нам нужно объединить на карте оба множества — публикации и программные разделы.

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

Раздел sitemap.html

Нам понадобится какой то раздел для карты сайта. Я назвал модуль SM (sitemap).

Отсечь все лишнее

Карту придется создавать в несколько этапов.

Сначала мы получим необходимые данные о публикациях сайта — это название, url, синоним адреса и тип публикации. Весь этот список мы будет монтировать в заготовку карты, которой будет служить main-menu.

Не все типы публикаций, возможно, попадут на карту, так что составьте свой список типов для запроса node.type in (‘page’, ….) .

Определим, куда будем монтировать публикации. Я объявляю перечень точек монтирования,  к примеру публикации article я монтирую по адресу /blog. Далее следует три этапа монтирования и рендеринг карты.

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

Проход 1. Предварительные ласки

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

Функция рекурсивно обходит все дерево.

Проход 2

Здесь мы смонтируем все публикации в соответствующие точки монтирования. Здесь обходимся без рекурсии, но нам приходится пробежаться по всему списку публикации (за вычетом тех, что уже смонтировали).

Проход 3

Самый простой из всех. Если у нас остались какие то публикации в списке, которые мы не учли в меню или в перечне точке монтирования, то их надо смонтировать в корень.

Рендеринг дерева карты сайта

Для оснастки я воспользовался неупорядоченным списком (<ul></ul>).  Поправить на <div> или какой то другой тег, думаю, вам не составит труда.

Не рассчитываю, что данный обзор окажется полезен для широкой аудитории. Я преследую цель законспектировать технику до следующего использования в очередном проекте. Но если у вас есть вопросы, я охотно на них отвечу :).

Мало букафф? Читайте есчо !

Вывод всех локальных переменных в twig

Июнь 3, 2024 г.

Все видимые переменные шаблона можно посмотреть в переменной _context. Вывести их имена, используя перебор циклом for: [crayon-6902d4a33d1ed875286348/] В Drupal, если вы используете модуль devel, в twig будет доступна функция dpm: [crayon-6902d4a33d1fd719793708/]

Читать

Conditional Form Fields в Drupal

Сентябрь 27, 2021 г.

Логика полей или условные поля - это удобная фича в Form API друпал. Она позволяет формализовать кучу мелкой логики на фронт-енд, связанной с взаимодействием пользователя с вашей формой. Здесь я приведу пару примеров использования, а углубиться ...

Читать

Получение и рендеринг списка дочерних терминов в Drupal

Апрель 27, 2023 г.

Небольшой примера кода для работы с таксономией в Drupal 10. Мы запросим дерево дочерних терминов и произведем их рендеринг. Для начала загрузим какой-либо термин [crayon-6902d4a33d6d5304797300/] Следующий шаг - получение дочерних элементов ...

Читать

XML карта сайта для многоязычных проектов на Drupal

Апрель 16, 2024 г.

Для начала разберемся: что мы пытаемся построить. Ожидается, что у нас есть корневой файл sitemap.xml, который содержит список языковых xml карт. ...

Читать
 

Комментарии к «Пишем карту сайта под Drupal 7»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: