Saya telah mengembangkan modul dipesan lebih dahulu yang mencantumkan serangkaian orang di situs. Setiap orang memiliki URL mereka sendiri (pengontrol Magento yang dipesan lebih dahulu, yang melakukan CRUD dasar pada model Orang) dan saya perlu memasukkan URL publik ini ke dalam file XML Google Sitemap.
Saya ingin menggunakan generasi sitemap dan cron Magento sendiri jika saya bisa.
Yang Mage_Sitemap_Model_Observer
sudah menarik semua catatan peta situs dari sitemaps
tabel dan satu-per-satu memanggil generateXml()
metode mereka .
$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();
}
}
Saya pikir saya perlu menambahkan peta situs baru saya di sitemaps
tabel yang kemudian akan dipanggil untuk menghasilkan file XML (terpisah) saya untuk catatan model kustom saya. Namun, saya tidak tahu bagaimana cara memberitahu Magento untuk menggunakan perpanjangan saya, My_Module_Model_Sitemap
bukan hanya Mage_Sitemap_Model_Sitemap
, yang terakhir hanya akan memberi saya file XML yang mencantumkan semua kategori, produk, dan halaman CMS yang sama sebagai peta situs utama.
The sitemaps
meja memiliki sitemap_type
kolom, tapi ini tidak pernah dirujuk dalam Magento basis kode sejauh yang saya tahu.
Bagaimana saya bisa menggunakan mesin peta situs bawaan Magento sambil menimpa Mage_Sitemap_Model_Sitemap
untuk memiliki generateXml()
metode saya sendiri ? Atau haruskah saya membangun sistem peta situs alternatif hanya untuk keperluan saya sendiri di sini?
Mage_Sitemap_Model_Sitemap
kelas dan menimpagenerateXml()
kan? apa yang sudah kamu cobaMage_Sitemap_Model_Sitemap
dan memberi saya peta situs lain yang berisi produk, kategori, halaman CMS - tidak menggunakan versi saya yang diperluas. Saya tidak yakin bagaimana cara mengatakannya.Mage_Sitemap_Model_Sitemap
situs luas, dan menambahkan model saya sendiri di bawah kategori dan panggilan produk. Akan segera diperbarui dengan kemajuan.Jawaban:
Langkah-langkah yang akhirnya saya gunakan adalah sebagai berikut, dan komentar serta jawaban sejauh ini membuat saya mulai ke arah yang benar.
Pertama saya menambahkan baris ke tabel "sitemap". Karena kami memiliki pengaturan multi-toko, dan karena saya ingin menjaga agnostik toko modul saya, saya tidak mengubah kode INSERT ini menjadi migrasi MySQL, tetapi hanya menjalankannya di toko secara manual:
Kemudian saya menimpa
Mage_Sitemap_Model_Sitemap
model di dalam bagian global / models dalam file config.xml modul saya sendiri:Ini menimpa semua panggilan ke seluruh
Mage_Sitemap_Model_Sitemap
situs dengan model khusus saya, tetapi saya tidak ingin menyalin dan menempelkan terlalu banyak kode di sana. Menggunakan saran Petar Dzhambazov, saya menggunakan persyaratan untuk menunda ke kelas induk kecualisitemap_type
"orang".Apakah ada cara yang lebih baik, yang menghindari menyalin dan menempel begitu banyak dari kelas induk?
sumber
Anda dapat memperluas
Mage_Sitemap_Model_Sitemap
dan memeriksasitemap_type
apakah itu tipe Anda, menghasilkan xml Anda, atau menghasilkan xml induk. Atau Anda dapat menambahkan pengamat untukload_after
acara pengumpulan dan menambahkan model peta situs Anda ke koleksi.sumber
Jika Anda memiliki Magento> = 1.9.0.0 dan tidak peduli menggunakan produk atau pengaturan frekuensi prioritas / katalog, Anda dapat menggunakan pengamat di
sitemap_products_generating_before
Jika Anda ingin menyelesaikan perilaku berbeda untuk pada halaman sitemap mungkin membaca Sitemap.xml ganti home dan / atau kirim acara yang lebih umum .
sumber