Eu desenvolvi um módulo sob medida que lista uma série de pessoas no site. Cada pessoa tem seu próprio URL (um controlador Magento sob medida, que faz CRUD básico nos modelos Person) e eu preciso alimentar esses URLs públicos em um arquivo XML do Google Sitemap.
Eu quero usar a geração do mapa do site do Magento e o cron, se puder.
O Mage_Sitemap_Model_Observer
já puxa todos os registros do Sitemap da sitemaps
tabela e um a um chama seus 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();
}
}
Acho que preciso adicionar meu novo Sitemap na sitemaps
tabela que será chamada para gerar meu arquivo XML (separado) para meus registros de modelo personalizados. No entanto, não sei como dizer ao Magento para usar meu estendido em My_Module_Model_Sitemap
vez de apenas Mage_Sitemap_Model_Sitemap
, o último dos quais me fornecerá um arquivo XML listando todas as mesmas categorias, produtos e páginas CMS dos principais sitemaps.
A sitemaps
tabela possui uma sitemap_type
coluna, mas isso nunca é mencionado na base de código Magento, até onde eu sei.
Como posso usar o mecanismo de sitemap embutido do Magento enquanto sobrescrito Mage_Sitemap_Model_Sitemap
para ter meu próprio generateXml()
método? Ou devo criar um sistema de sitemap alternativo apenas para meus próprios fins aqui?
Mage_Sitemap_Model_Sitemap
classe e substituir,generateXml()
certo? o que você tentou?Mage_Sitemap_Model_Sitemap
e me fornece outro sitemap contendo os produtos, categorias, páginas do CMS - ele não usa minha versão estendida. Não sei bem como dizer como fazê-lo.Mage_Sitemap_Model_Sitemap
site e adicionar meu próprio modelo na categoria e nas chamadas de produtos. Será atualizado em breve com o progresso.Respostas:
As etapas que acabei usando foram as seguintes, e os comentários e respostas até agora me levaram a começar na direção certa.
Primeiro, adicionei uma linha à tabela "sitemap". Como temos a configuração de várias lojas e como quero manter meu armazenamento de módulos independente, não codifiquei esse INSERT em uma migração do MySQL, mas apenas o executei manualmente na loja:
Em seguida, substitui o
Mage_Sitemap_Model_Sitemap
modelo na seção global / models no arquivo config.xml do meu próprio módulo:Isso substitui todas as chamadas para todo o
Mage_Sitemap_Model_Sitemap
site com o meu modelo personalizado, mas eu não queria copiar e colar muito código lá. Usando a sugestão de Petar Dzhambazov, usei um condicional para adiar a classe dos pais, a menos quesitemap_type
sejam "pessoas".Existe uma maneira melhor, que evite copiar e colar muito da classe pai?
fonte
Você pode estender
Mage_Sitemap_Model_Sitemap
e verificarsitemap_type
se é do seu tipo, gerar seu xml e gerar outro xml pai. Ou você pode adicionar um observador para umload_after
evento de coleção e adicionar seu modelo de sitemap à coleção.fonte
Se você possui Magento> = 1.9.0.0 e não se preocupa em usar produtos ou prioridade de catálogo / alterar a configuração de frequência, pode usar um observador em
sitemap_products_generating_before
Se você deseja concluir um comportamento diferente nas páginas do mapa do site, leia Sitemap.xml change home e / ou envie um evento mais genérico .
fonte