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

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

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

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

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

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

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

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

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

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

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

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

Раздел sitemap.html

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

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

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

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

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

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

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

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

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

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

Проход 2

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

Проход 3

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

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

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

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

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

Программно устанавливаем значения настроек на страницах, созданных Config Pages

Ноябрь 22, 2018 г.

Модуль Config Pages позволяет создавать страницы конфигурации для вашего модуля, всего сайта, или может быть просто одного из разделов сайта. Потом эти значения можно читать из программы и использовать так, как вам требуется. Но API Config Pages не содержит ...

Читать

Войти под учеткой другого пользователя в Drupal

Февраль 8, 2015 г.

Рассмотрим такую несложную задачу администрирования как вход под именем другого пользователя в drupal. Иногда требуется взглянуть на сайт "глазами" ...

Читать

Цепляем js-скрипт после ajax-вызова в Drupal 7

Май 5, 2017 г.

После выполнения загрузки данных по ajax, может потребоваться инициализация скриптов для только что полученного куска HTML. Как данный механизм реализован в Drupal 7? По большому счету, требуется добавить js код в секцию success после вызова ...

Читать

VK Video: интегрируем как oembed provider source в Drupal

Апрель 12, 2025 г.

Еще один oembed провайдер, который мне понадобился не давно - VK VIDEO. Нужно было интегрировать видео с ВКонтакте в медиа библиотеку Drupal. Если ...

Читать
 

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

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



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