Я разработал специальный модуль, который перечисляет ряд людей на сайте. У каждого человека есть свой собственный URL (заказной контроллер Magento, который выполняет базовое CRUD для моделей Person), и мне нужно вставить эти общедоступные URL-адреса в XML-файл Google Sitemap.
Я хочу использовать собственную генерацию карты сайта Magento и cron, если смогу.
Mage_Sitemap_Model_Observer
Уже тянет все Sitemap записи из sitemaps
таблицы и один за другим называет свои generateXml()
методы.
$collection = Mage::getModel('sitemap/sitemap')->getCollection();
/* @var $collection Mage_Sitemap_Model_Mysql4_Sitemap_Collection */
foreach ($collection as $sitemap) {
/* @var $sitemap Mage_Sitemap_Model_Sitemap */
try {
$sitemap->generateXml();
}
catch (Exception $e) {
$errors[] = $e->getMessage();
}
}
Я думаю, что мне нужно добавить мой новый файл Sitemap в sitemaps
таблицу, которая затем будет вызываться для создания моего (отдельного) XML-файла для моих записей пользовательских моделей. Тем не менее, я не знаю, как сказать Magento, чтобы использовать мой расширенный My_Module_Model_Sitemap
вместо просто Mage_Sitemap_Model_Sitemap
, последний из которых просто даст мне XML-файл, перечисляющий все те же категории, продукты и страницы CMS в качестве основных карт сайта.
В sitemaps
таблице есть sitemap_type
столбец, но, насколько я могу судить, на кодовую базу Magento на него никогда не ссылаются.
Как я могу использовать встроенный движок карты сайта Magento при перезаписи, Mage_Sitemap_Model_Sitemap
чтобы иметь свой собственный generateXml()
метод? Или я должен создать альтернативную систему Sitemap только для своих собственных целей?
Mage_Sitemap_Model_Sitemap
класс и переписатьgenerateXml()
правильно? что ты пробовал?Mage_Sitemap_Model_Sitemap
и дает мне другую карту сайта, содержащую продукты, категории, страницы CMS - он не использует мою расширенную версию. Я не уверен, как сказать, как это сделать.Mage_Sitemap_Model_Sitemap
сайта в целом, и добавляю в мою собственную модель категорию и вызовы продуктов. Скоро обновлю с прогрессом.Ответы:
Шаги, которые я в конечном итоге использовал, были следующие, и комментарии и ответы до сих пор заставили меня начать в правильном направлении.
Сначала я добавил строку в таблицу "sitemap". Поскольку у нас настроено несколько хранилищ, и поскольку я хочу сохранить независимость хранилища модулей, я не жестко запрограммировал этот INSERT в миграцию MySQL, а просто запустил его в хранилище вручную:
Затем я переписал
Mage_Sitemap_Model_Sitemap
модель в разделе global / models в файле config.xml моего собственного модуля:Это переписывает любые вызовы на
Mage_Sitemap_Model_Sitemap
весь сайт с моей пользовательской моделью, но я не хотел копировать и вставлять туда слишком много кода. Пользуясь предложением Петра Джамбазова, я использовал условное условие для передачи родительскому классу, если этоsitemap_type
не «люди».Есть ли лучший способ избежать копирования и вставки из родительского класса?
источник
Вы можете либо расширить его,
Mage_Sitemap_Model_Sitemap
и в нем проверить,sitemap_type
относится ли он к вашему типу, сгенерировать ваш xml или создать родительский xml. Или вы можете добавить наблюдателя дляload_after
события коллекции и добавить свою модель сайта в коллекцию.источник
Если у вас есть Magento> = 1.9.0.0 и вы не хотите использовать продукты или каталог / изменить частоту, вы можете использовать наблюдателя на
sitemap_products_generating_before
Если вы хотите выполнить другое поведение на страницах карты сайта, прочитайте Sitemap.xml, измените домашнюю страницу и / или отправьте более общее событие .
источник