Содержание


Sitemap Helper


Sitemap Helper, навигация, ZF2, Zend Framework 2, карта сайта



Помощник Sitemap используется для создания карты сайта в формате XML, потому что это стандартный формат для создания карт.

По-умолчания помощник Sitemap использует валидаторы для проверки каждого элемента, который рендериться (отображается).  Это можно отключить используя метод $helper->setUseSitemapValidators(false).

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

Помощник Sitemap поддерживает Sitemap XSD Schema валидации сгенерированного сайта. По-умолчанию отключено, потому что будет отправлен запрос к файлу Schema. Для включения воспользуйтесь методом $helper->setUseSchemaValidation(true).

 

Элементы Sitemap XML

1) loc– абсолютный URL к странице. Генерируется помощником.

2) lastmod– дата последнего изменения файла в формате W3C. Может быть пропущена при необходимости. Можно использовать просто YYYY-MM-DD. Если дата не проходит валидацию она игнорируется.

3) changefreq -  как часто изменяется страница. Предоставляет общую информацию поисковикам и может не сильно точно соответствовать частоте сканирования. Валидные значения: always/hourly/daily/weekly/monthly/yearly/never. Если значение не проходит валидацию оно игнорируется.

4) priority - приоритет этого URL относительно других URL-адресов на Вашем сайте. Валидные значения: 0.0-1.0 . Если значение не проходит валидацию оно игнорируется.

 

Методы помощника Sitemap

1) {get|set}FormatOutput() gets/sets (получить/установить) флаг, указывающий на то, должен ли быть отформатирован XML вывод. Соответствует  значению formatOutput  класса DOMDocument. По умолчанию FALSE.

2) {get|set}UseXmlDeclaration() gets/sets (получить/установить) флаг, указывающий, надо ли включить декларацию XML. По умолчанию TRUE.

3) {get|set}UseSitemapValidators() gets/sets (получить/установить) флаг, определяющий, надо ли использовать валидацию при создании DOM. По умолчанию TRUE.

4) {get|set}UseSchemaValidation() gets/sets (получить/установить) флаг, определяющий, надо ли использовать валидацию XML Schema при создании DOM sitemap. По умолчанию FALSE.

5) {get|set}ServerUrl() gets/sets (получить/установить) URL-адрес сервера, который будет добавлен к неабсолютному URL - адресу в методе url(). Если не указать, то будет определена помощником.

6) url() – используется для создания абсолютных URL для страниц.

7) getDomSitemap() – создает DOMDocument из контейнера.

 

Создание XML карты сайта

// In a view script or layout:
 
// format output
$this->navigation()
      ->sitemap()
      ->setFormatOutput(true); // default is false
 
// other possible methods:
// ->setUseXmlDeclaration(false); // default is true
// ->setServerUrl('http://my.otherhost.com');
// default is to detect automatically
 
// print sitemap
echo $this->navigation()->sitemap();

Если установлен ACL -  то создано будет с применением соответствующих фильтров:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.example.com/</loc>
  </url>
  <url>
    <loc>http://www.example.com/products</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/server</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/server/faq</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/server/editions</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/server/requirements</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/studio</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/studio/customers</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/studio/support</loc>
  </url>
  <url>
    <loc>http://www.example.com/company/about</loc>
  </url>
  <url>
    <loc>http://www.example.com/company/about/investors</loc>
  </url>
  <url>
    <loc>http://www.example.com/company/news</loc>
  </url>
  <url>
    <loc>http://www.example.com/company/news/press</loc>
  </url>
  <url>
    <loc>http://www.example.com/archive</loc>
  </url>
  <url>
    <loc>http://www.example.com/community</loc>
  </url>
  <url>
    <loc>http://www.example.com/community/account</loc>
  </url>
  <url>
    <loc>http://forums.example.com/</loc>
  </url>
</urlset>

Построение карты сайта с использованием ролей ACL. Должно отфильтровать /community/account:

echo $this->navigation()
          ->sitemap()
          ->setFormatOutput(true)
          ->setRole();
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.example.com/</loc>
  </url>
  <url>
    <loc>http://www.example.com/products</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/server</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/server/faq</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/server/editions</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/server/requirements</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/studio</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/studio/customers</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/studio/support</loc>
  </url>
  <url>
    <loc>http://www.example.com/company/about</loc>
  </url>
  <url>
    <loc>http://www.example.com/company/about/investors</loc>
  </url>
  <url>
    <loc>http://www.example.com/company/news</loc>
  </url>
  <url>
    <loc>http://www.example.com/company/news/press</loc>
  </url>
  <url>
    <loc>http://www.example.com/archive</loc>
  </url>
  <url>
    <loc>http://www.example.com/community</loc>
  </url>
  <url>
    <loc>http://forums.example.com/</loc>
  </url>
</urlset>

Создание карты сайта с максимальной глубиной 1

echo $this->navigation()
          ->sitemap()
          ->setFormatOutput(true)
          ->setMaxDepth(1);
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.example.com/</loc>
  </url>
  <url>
    <loc>http://www.example.com/products</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/server</loc>
  </url>
  <url>
    <loc>http://www.example.com/products/studio</loc>
  </url>
  <url>
    <loc>http://www.example.com/company/about</loc>
  </url>
  <url>
    <loc>http://www.example.com/company/about/investors</loc>
  </url>
  <url>
    <loc>http://www.example.com/company/news</loc>
  </url>
  <url>
    <loc>http://www.example.com/community</loc>
  </url>
  <url>
    <loc>http://www.example.com/community/account</loc>
  </url>
  <url>
    <loc>http://forums.example.com/</loc>
  </url>
</urlset>

Важно: Кодировка UTF-8 используется по-умолчанию! Другую кодировку можно установить с помощью метода setEncoding(). Но помните, что Zend\View\Interface не определяет методов для кодирования, поэтому метод getEncoding() может быть не доступен, а он используется по-умолчанию помощниками для определения кодировки. Тогда Вам придется самому написать метод getEncoding() для нужной кодировки.


Автор статьи: DuB