Пишем XML карту сайта для Drupal 6 сами

Поначалу я думал, что сделаю карту с помощью модуля. Для типовых проектов — лучшего не придумаешь. Достал последнюю версию модуля xmlsitemap под 6-ю версию друпала, настроил типы публикаций и запустил rebuild ссылок.

Но, видимо, публикаций оказалось слишком много (около 50к), и модуль начал что то «пережевывать», показывая прогресс по 100-150 публикаций в секунду. Через какое то время он вовсе прекратил свою работу, так и не создав мне карту.

Если ищите решение для 7-й версии Drupal — то здесь я выложил модифицированный код для неё. Но сначала стоит прочитать статью :).

Зачем делать свою карту, если есть готовые модули?

Неудача с xmlsitemap — лишь повод избавиться еще от одного громоздкого модуля из моей сборки Drupal :).

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

Здесь я не буду показывать код, который подходит только для Гения. А сформулирую задачу для типового проекта.

Постановка задачи

Дефиниций всего три:

  1. Карта сайта должна находится в корне сайта под именем sitemap.xml.
  2. В карту должны попасть только заданные типы публикаций, имеющие статус — «опубликовано».
  3. Карта должна разбиваться на несколько файлов, включающих в себя не более 1000 адресов.

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

Начнем с функции, которая выводит HTML код этой админ страницы в Drupal.

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

У класса всего один публичный метод — rebuild() — и несколько свойств, которые можно задать перед генерацией xml карты сайта.

$domain — часть урла, содержащая доменное имя вашего сайта. При инициализации берется значение из $_SERVER[‘HTTP_HOST’].

$recordsPerFile — максимально число ссылок в одном файле (1000)

$outputDir — каталог, куда будут записаны файлы со ссылками. Класс пытается выяснить значение public каталога для хранения файлов в Drupal. В нем будет создан подкаталог ‘sitemaps’. Если значение получить не удаётся, то создаётся папка ‘sitemaps’ в корне сайта.

$types — массив типов публикаций, которые нужно включить в карту сайта. По умолчанию, это только ‘page’ — базовый тип для drupal — разделы сайта.

Код класса:

Результат мне понравился — скорость создания реестра около секунды (для почти 50к ссылок).

Написать комментарий

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

Если simplexml "не парсит" атрибуты...

Август 12, 2017 г.

.. то скорее всего, вы ошибаетесь. Рассмотрим следующий пример XML. В документе example.xml содержится запись о валюте и информация о категории товара. Обе записи содержат аттрибуты. [crayon-673f10d3a1b41666778959/] Выполним чтение и вывод информации ...

Читать

Вариант XML карты сайта для Drupal 7

Ноябрь 8, 2016 г.

Сначала написал вариант для Drupal 6, но в силу актуальности семерки, предлагаю вариант кода для 7й версии. Описание вы найдете в прошлой статье, здесь обновлена только работа с базой данных. Привожу код класса и пример его вызова. Код класса: ...

Читать

 

Комментарии к «Пишем XML карту сайта для Drupal 6 сами»

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



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