Пишем 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к ссылок).

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

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

Типовая конфигурация настроек в .htaccess для соответствия тестам Google PageSpeed Insights

Декабрь 5, 2016 г.

Google позволяет протестировать страницы вашего сайта на скорость загрузки. В результате теста вы получаете два рейтинга с оценкой до 100 баллов - один ...

Читать

Главная страница в Drupal

Ноябрь 20, 2015 г.

Главная страница является лицом всего сайта. Обычно она имеет собственное оформление, особенные графические и динамические элементы. Посмотрим как устроена главная страница в Drupal. После установки drupal предлагает в качестве главной страницы ...

Читать

 

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

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



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