J'ai développé un module sur mesure qui répertorie une série de personnes sur le site. Chaque personne a sa propre URL (un contrôleur Magento sur mesure, qui fait CRUD de base sur les modèles Personne) et je dois alimenter ces URL publiques dans un fichier XML Google Sitemap.
Je veux utiliser la propre génération de sitemap de Magento et le cron si je le peux.
Le Mage_Sitemap_Model_Observer
tire déjà tous les enregistrements Sitemap de la sitemaps
table et un par un appelle leurs generateXml()
méthodes.
$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();
}
}
Je pense que je dois ajouter mon nouveau plan Sitemap dans le sitemaps
tableau qui sera ensuite appelé pour générer mon fichier XML (séparé) pour mes enregistrements de modèles personnalisés. Cependant, je ne sais pas comment dire à Magento d'utiliser mon extension My_Module_Model_Sitemap
au lieu de juste Mage_Sitemap_Model_Sitemap
, ce dernier me donnera simplement un fichier XML répertoriant toutes les mêmes catégories, produits et pages CMS que les plans de site principaux.
Le sitemaps
tableau a une sitemap_type
colonne, mais cela n'est jamais référencé dans la base de code Magento pour autant que je sache.
Comment puis-je utiliser le moteur de sitemap intégré de Magento tout en écrasant le Mage_Sitemap_Model_Sitemap
pour avoir ma propre generateXml()
méthode? Ou dois-je créer un autre système de plan de site juste pour mes propres besoins ici?
Mage_Sitemap_Model_Sitemap
classe et écraser àgenerateXml()
droite? qu'as-tu essayé?Mage_Sitemap_Model_Sitemap
et me donne un autre plan du site contenant les produits, les catégories, les pages CMS - il n'utilise pas ma version étendue. Je ne sais pas comment lui dire comment faire.Mage_Sitemap_Model_Sitemap
site et ajouter mon propre modèle dans la catégorie et les appels de produits. Mettra à jour bientôt avec les progrès.Réponses:
Les étapes que j'ai fini par suivre étaient les suivantes, et les commentaires et réponses jusqu'à présent m'ont permis de commencer dans la bonne direction.
J'ai d'abord ajouté une ligne au tableau "plan du site". Étant donné que nous avons mis en place plusieurs magasins et que je veux garder mon magasin de modules agnostique, je n'ai pas codé en dur cet INSERT dans une migration MySQL, mais je l'ai simplement exécuté sur le magasin manuellement:
Ensuite, j'ai écrasé le
Mage_Sitemap_Model_Sitemap
modèle dans la section global / models du fichier config.xml de mon propre module:Cela remplace tous les appels vers l'ensemble du
Mage_Sitemap_Model_Sitemap
site avec mon modèle personnalisé, mais je ne voulais pas copier et coller trop de code là-bas. En utilisant la suggestion de Petar Dzhambazov, j'ai utilisé un conditionnel pour m'en remettre à la classe parent à moins que ce nesitemap_type
soit "people".Y a-t-il une meilleure façon, qui évite de copier et coller autant de la classe parente?
la source
Vous pouvez soit étendre
Mage_Sitemap_Model_Sitemap
et vérifiersitemap_type
s'il s'agit de votre type, générer votre XML, sinon générer le XML parent. Ou vous pouvez ajouter un observateur pour l'load_after
événement de collection et ajouter votre modèle de plan de site à la collection.la source
Si vous avez Magento> = 1.9.0.0 et que vous ne vous souciez pas de l'utilisation des produits ou de la priorité de catalogue / changement de fréquence, vous pouvez utiliser un observateur sur
sitemap_products_generating_before
Si vous souhaitez compléter le comportement différent sur les pages de sitemap, lisez peut-être Sitemap.xml changer de maison et / ou envoyer un événement plus générique .
la source