Ich habe ein maßgeschneidertes Modul entwickelt, das eine Reihe von Personen auf der Website auflistet. Jede Person hat ihre eigene URL (ein maßgeschneiderter Magento-Controller, der grundlegende CRUD-Funktionen für Personenmodelle ausführt), und ich muss diese öffentlichen URLs in eine XML-XML-Datei mit Google Sitemap einspeisen.
Ich möchte Magentos eigene Sitemap-Generierung und den Cron verwenden, wenn ich kann.
Die Mage_Sitemap_Model_Observer
zieht bereits alle Sitemap-Datensätze aus der sitemaps
Tabelle und ruft nacheinander ihre generateXml()
Methoden auf.
$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();
}
}
Ich denke, ich muss meine neue Sitemap in die sitemaps
Tabelle einfügen, die dann aufgerufen wird, um meine (separate) XML-Datei für meine benutzerdefinierten Modelldatensätze zu generieren. Ich weiß jedoch nicht, wie ich Magento anweisen soll, mein erweitertes My_Module_Model_Sitemap
statt nur Mage_Sitemap_Model_Sitemap
das zu verwenden. Letzteres gibt mir nur eine XML-Datei, in der alle Kategorien, Produkte und CMS-Seiten als Haupt-Sitemaps aufgeführt sind.
Die sitemaps
Tabelle hat eine sitemap_type
Spalte, auf die in der Magento-Codebasis jedoch nie verwiesen wird, soweit ich das beurteilen kann.
Wie kann ich die in Magento integrierte Sitemap-Engine verwenden, während ich die überschreibe, Mage_Sitemap_Model_Sitemap
um eine eigene generateXml()
Methode zu haben ? Oder muss ich hier ein alternatives Sitemap-System nur für meine eigenen Zwecke erstellen?
Mage_Sitemap_Model_Sitemap
klasse erweitern undgenerateXml()
richtig überschreiben ? was hast du versuchtMage_Sitemap_Model_Sitemap
und gibt mir eine andere Sitemap mit den Produkten, Kategorien, CMS-Seiten - meine erweiterte Version wird nicht verwendet. Ich bin mir nicht sicher, wie ich es sagen soll.Mage_Sitemap_Model_Sitemap
Site neu zu schreiben und mein eigenes Modell unter den Kategorien- und Produktaufrufen hinzuzufügen. Wird bald mit Fortschritt aktualisiert.Antworten:
Die Schritte, die ich letztendlich durchführte, waren wie folgt und die Kommentare und Antworten haben mich in die richtige Richtung geführt.
Zuerst habe ich der Tabelle "sitemap" eine Zeile hinzugefügt. Da wir Multishop Set-Up haben und weil ich meinen Modul-Store agnostisch halten möchte, habe ich dieses INSERT nicht hart in eine MySQL-Migration geschrieben, sondern es einfach manuell im Store ausgeführt:
Dann habe ich das
Mage_Sitemap_Model_Sitemap
Modell im Abschnitt global / models in der config.xml-Datei meines eigenen Moduls überschrieben:Dies überschreibt alle Aufrufe für die gesamte
Mage_Sitemap_Model_Sitemap
Site mit meinem benutzerdefinierten Modell, aber ich wollte dort nicht zu viel Code kopieren und einfügen. Auf Vorschlag von Petar Dzhambazov habe ich eine Bedingung verwendet, um mich der Elternklasse zu widersetzen, es sei denn, dassitemap_type
ist "Volk".Gibt es einen besseren Weg, um zu vermeiden, dass so viel aus der Elternklasse kopiert und eingefügt wird?
quelle
Sie können entweder erweitern
Mage_Sitemap_Model_Sitemap
und darin prüfen,sitemap_type
ob es sich um Ihren Typ handelt, Ihre XML generieren oder eine übergeordnete XML generieren. Sie können auch einen Beobachter für das Sammlungsereignisload_after
hinzufügen und Ihr Sitemap-Modell zur Sammlung hinzufügen.quelle
Wenn Sie über Magento> = 1.9.0.0 verfügen und sich nicht für die Verwendung von Produkten oder die Katalogpriorität / Änderung der Frequenzeinstellung interessieren, können Sie einen Beobachter für verwenden
sitemap_products_generating_before
Wenn Sie ein anderes Verhalten für Sitemap-Seiten ausführen möchten, lesen Sie möglicherweise Sitemap.xml change home und / oder senden Sie ein allgemeineres Ereignis .
quelle