Автогенерация Sitemap

События

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

  • onSitemapStepPrepare
  • onSitemapStep
  • onSitemapComplete

onSitemapStepPrepare

Событие вызывается после инициализации данных но до начала генерации карты.

Передаваемые параметры:

  • NS массив с временными данными, хранящий текущий шаг и прочие необходимые в процессе генерации данные.
  • arSitemap - массив описывающий настройки для генерации карты сайта, получаемый с помощью \Bitrix\Seo\SitemapTable::getById()

Вернуть необходимо объект результата с успешным статусом , содержащий в параметах:

  • NS - если нужно сохранить какие то врмеенные данные или модифицировать итоговый масси со временными данными
  • COMPLETE - true или false, в зависимости от того закончена ли подготовка или нет
  • STATUS - строк, содержащая текст текущей стадии, например выопленено на 30% или подготовлен 1й файл
\Bitrix\Main\EventResult(
    \Bitrix\Main\EventResult::SUCCESS,
    [
        'NS' => [...],
        'COMPLETE' => false,
        'STATUS' => 'Выполнено на 63%'
    ]
)

Пример использования:

Bitrix\Main\EventManager::getInstance()->addEventHandler("bxmaker.autositemap", "onSitemapStepPrepare", "BXmakerAutoSitemapOnSitemapStepPrepare");

function BXmakerAutoSitemapOnSitemapStepPrepare(\Bitrix\Main\Event $event)
{
    $NS = $event->getParameter('NS');
    $arSitemap = $event->getParameter('arSitemap');


    // временные данные
    if (!isset($NS['BXmakerAutoSitemapOnSitemapStepPrepare'])) {
        $NS['BXmakerAutoSitemapOnSitemapStepPrepare'] = [
            'step' => 1,
        ];
    }

    $data = &$NS['BXmakerAutoSitemapOnSitemapStepPrepare'];

    //какие то операции
    if ($data['step'] < 10) {
        $data['step']++;
    }


    //завершаем
    $arReturn = [
        'NS' => $NS,
        'COMPLETE' => ($data['step'] >= 10),
        'STATUS' => sprintf('Генерация прочих карт, выполнено %d %%', ($data['step'] / 10) * 100)
    ];

    $result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $arReturn);
    return $result;
}

onSitemapStep

Bызывается на каждом шаге генерации карты. Можно использовать чтобы дополнить массив ссылок на карты дополнительной.

Передаваемые параметры:

  • NS массив с временными данными, хранящий текущий шаг и прочие необходимые в процессе генерации данные.
  • arSitemap - массив описывающий настройки для генерации карты сайта, получаемый с помощью \Bitrix\Seo\SitemapTable::getById()

Вернуть необходимо объект результата с успешным статусом , содержащий в параметах:

  • NS - если нужно сохранить какие то врмеенные данные или модифицировать итоговый масси со временными данными
\Bitrix\Main\EventResult(
    \Bitrix\Main\EventResult::SUCCESS,
    [
        'NS' => [...],
    ]
)

Пример использования:

\Bitrix\Main\EventManager::getInstance()->addEventHandler("bxmaker.autositemap", "onSitemapStep", "BXmakerAutoSitemapOnSitemapStep");

function BXmakerAutoSitemapOnSitemapStep(\Bitrix\Main\Event $event)
{
    $NS = $event->getParameter('NS');

    if (isset($NS['XML_FILES']) && is_array($NS['XML_FILES']) && !in_array('sitemap_bxmaker_autositemap_test.xml', $NS['XML_FILES'])) {
        $NS['XML_FILES'][] = 'sitemap_bxmaker_autositemap_test.xml';
    }

    //завершаем
    $arReturn = [
        'NS' => $NS,
    ];

    $result = new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $arReturn);
    return $result;
}

onSitemapComplete

Вызывается на последнем шаге генерации карты, когда уже все сделано и карта сгенерирована

Передаваемые параметры:

  • NS массив с временными данными, хранящий текущий шаг и прочие необходимые в процессе генерации данные.
  • arSitemap - массив описывающий настройки для генерации карты сайта, получаемый с помощью \Bitrix\Seo\SitemapTable::getById()

Возвращать что-либо в обработчике не обязатльно

Пример

\Bitrix\Main\EventManager::getInstance()->addEventHandler("bxmaker.autositemap", "onSitemapComplete", "BXmakerAutoSitemapOnSitemapComplete");

function BXmakerAutoSitemapOnSitemapComplete(\Bitrix\Main\Event $event)
{
    $NS = $event->getParameter('NS');
    $arSitemap = $event->getParameter('arSitemap');

     //mail('test@local.loc', 'Сгенерирована карта', 'Сгенерирована карта №'.$arSitemap['ID'].' - '. $arSitemap['NAME']);

    return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS);
}