Desarrollé un módulo a medida que enumera una serie de personas en el sitio. Cada persona tiene su propia URL (un controlador Magento a medida, que hace CRUD básico en modelos Personales) y necesito alimentar estas URL públicas en un archivo XML de Google Sitemap.
Quiero usar la generación del mapa del sitio de Magento y el cron si puedo.
El Mage_Sitemap_Model_Observer
ya extrae todos los registros de Sitemap de la sitemaps
tabla y uno por uno llama a sus generateXml()
métodos.
$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();
}
}
Creo que necesito agregar mi nuevo Sitemap en la sitemaps
tabla que luego se llamará para generar mi archivo XML (separado) para mis registros de modelos personalizados. Sin embargo, no sé cómo decirle a Magento que use mi extendido en My_Module_Model_Sitemap
lugar de solo Mage_Sitemap_Model_Sitemap
, el último de los cuales solo me dará un archivo XML con las mismas categorías, productos y páginas CMS que los mapas de sitio principales.
La sitemaps
tabla tiene una sitemap_type
columna, pero por lo que puedo decir, esto nunca se menciona en la base de código de Magento.
¿Cómo puedo usar el motor de mapa del sitio incorporado de Magento mientras sobrescribo Mage_Sitemap_Model_Sitemap
para tener mi propio generateXml()
método? ¿O debo construir un sistema de mapa de sitio alternativo solo para mis propios fines aquí?
Mage_Sitemap_Model_Sitemap
clase y sobrescribir,generateXml()
¿verdad? que has intentadoMage_Sitemap_Model_Sitemap
y me da otro mapa del sitio que contiene los productos, categorías, páginas CMS, no usa mi versión extendida. No estoy seguro de cómo decirle cómo hacerlo.Mage_Sitemap_Model_Sitemap
sitio y agregar mi propio modelo en la categoría y llamadas de productos. Se actualizará pronto con el progreso.Respuestas:
Los pasos que terminé usando fueron los siguientes, y los comentarios y respuestas hasta ahora me ayudaron a comenzar en la dirección correcta.
Primero agregué una fila a la tabla "mapa del sitio". Como tenemos una configuración de varias tiendas y porque quiero mantener mi tienda de módulos independiente, no codifiqué este INSERT en una migración de MySQL, sino que simplemente lo ejecuté en la tienda manualmente:
Luego sobrescribí el
Mage_Sitemap_Model_Sitemap
modelo dentro de la sección global / models en el archivo config.xml de mi propio módulo:Esto sobrescribe cualquier llamada a todo el
Mage_Sitemap_Model_Sitemap
sitio con mi modelo personalizado, pero no quería copiar y pegar demasiado código allí. Usando la sugerencia de Petar Dzhambazov, utilicé un condicional para diferir a la clase principal a menos quesitemap_type
sea "personas".¿Hay una mejor manera, que evite copiar y pegar tanto de la clase principal?
fuente
Puede ampliar
Mage_Sitemap_Model_Sitemap
y, en él, verificarsitemap_type
si es su tipo, generar su xml, de lo contrario generar xml principal. O puede agregar un observador para elload_after
evento de colección y agregar su modelo de mapa del sitio a la colección.fuente
Si tiene Magento> = 1.9.0.0 y no le importa usar productos o la configuración de prioridad de cambio / prioridad del catálogo, puede usar un observador en
sitemap_products_generating_before
Si desea completar un comportamiento diferente para las páginas del mapa del sitio, puede leer Sitemap.xml cambiar a casa y / o enviar un evento más genérico .
fuente