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

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

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

Ошибка поля Autocomplete - found no valid option

Октябрь 28, 2014 г.

У меня эта ошибка всплыла для поля с автозаполнением, когда список значений генерировался из PHP кода. Занималась генерацией списка значений вот такая функция: [crayon-5952c53ee3593426383933/] Грабли обнаружились в случаях, когда поле title содержал ...

Читать

Что использовать вместо mysql_escape_string() в Drupal 7?

Сентябрь 6, 2016 г.

Начиная с версии PHP 4.3.0, функция mysql_escape_string() считается устаревшей. PHP будет выдавать соответствующее предупреждение. Deprecated function: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. Т.е. ...

Читать

 

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

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



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