تغيير الصفحة الرئيسية Sitemap.xml
سؤال
على متجر Magento الخاص بنا، قم بتخزين خريطة الموقع التي يقوم Magento بإنشائها تلقائيًا من لوحة الإدارة في الكتالوج > خريطة موقع جوجل يضيف بيت عنوان url لصفحتنا الرئيسية مثل:
<url>
<loc>http://our-domain.com/home</loc>
<lastmod>2014-11-17</lastmod>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
هل هناك طريقة لتغييره إلى
<url>
<loc>http://our-domain.com/</loc>
<lastmod>2014-11-17</lastmod>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
المحلول
لقد حصلت على عنوان url هذا لأن الصفحة الرئيسية هي صفحة CMS.
في حالتك فإنه يحتوي على المعرف home
.
من أجل تغيير عنوان URL هذا، تحتاج إلى إعادة كتابة الطريقة Mage_Sitemap_Model_Resource_Cms_Page::_prepareObject
وجعلها تبدو مثل هذا:
protected function _prepareObject(array $data)
{
$object = new Varien_Object();
$object->setId($data[$this->getIdFieldName()]);
//for home set url to ''
if ($data['url'] == 'home') {
$data['url'] = '';
}
$object->setUrl($data['url']);
return $object;
}
بالطبع لن ينجح هذا إذا قمت بتغيير الصفحة الرئيسية إلى صفحة أخرى.لكنها طريقة سريعة للقيام بذلك.
إذا كنت تريد الإصدار النظيف، فيجب عليك التحقق من الصفحة الرئيسية لمتجرك الحالي.
لهذا أضف عضوًا جديدًا وطريقة مثل هذا:
protected $_homeId = array();
public function getHomepageId($storeId)
{
if (!isset($this->_homeId[$storeId]))) {
$pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE, $storeId);
$delimeterPosition = strrpos($pageId, '|');
if ($delimeterPosition) {
$pageId = substr($pageId, 0, $delimeterPosition);
}
$this->_homeId[$storeId] = $pageId;
}
return $this->_homeId[$storeId];
}
في هذه الحالة، تحتاج إلى تعديل getCollection
الطريقة في نفس الفئةقبل $page = $this->_prepareObject($row);
اضف هذا:
if ($row[$this->getIdFieldName()] == $this->getHomepageId($store)) {
$row['url'] = '';
}
نصائح أخرى
ماجنتو 1.9.0.0.تمت إضافة حدثين لضبط خريطة موقع XML للمنتج والفئة:
sitemap_categories_generating_before
sitemap_products_generating_before
في Mage_Sitemap_Model_Sitemap::generateXml()
لقد استبدلوا
foreach ($collection as $item) {
مع
$priority = (string)Mage::getStoreConfig('sitemap/product/priority', $storeId);
$collection = Mage::getResourceModel('sitemap/catalog_product')->getCollection($storeId);
$products = new Varien_Object();
$products->setItems($collection);
Mage::dispatchEvent('sitemap_products_generating_before', array(
'collection' => $products
));
foreach ($products->getItems() as $item) {
نفس الشيء بالنسبة لصفحات الفئات، ولكن تم الاحتفاظ بـ 20 سطرًا أدناه foreach ($collection as $item)
لصفحات نظام إدارة المحتوى.سأقوم بتكييف هذه الطريقة وإعادة الكتابة/التعديل Mage_Sitemap_Model_Sitemap
لاستبدالها ب...
$pages = new Varien_Object();
$pages->setItems($collection);
Mage::dispatchEvent('sitemap_cms_pages_generating_before', array(
'collection' => $pages,
'store_id' => $storeId
));
foreach ($pages->getItems() as $item) {
ثم يمكنك استخدام هذا الحدث الجديد لتعديل خريطة موقع صفحات CMS الخاصة بك:
حدث:
<sitemap_cms_pages_generating_before>
<observers>
<rename_home>
<class>[model]/observer</class>
<method>renameCmsHomePageUrl</method>
</rename_home>
</observers>
</sitemap_cms_pages_generating_before>
مراقب:
public function renameCmsHomePageUrl(Varien_Event_Observer $observer)
{
$collection = $observer->getCollection();
foreach ($collection->getItems() as $item) {
if ($item->getUrl() === 'home') {
$item->setUrl('');
break;
}
}
}
شكرا على الكود.
باستخدام هذا القصاص، لقد قمت بإنشاء امتداد لأتمتة هذه العملية.هذا سيعمل مع تكوينات متعددة المتاجر / الموقع أيضا.في هذا الملحق، قمت بتحديث جيل الارتباط Sitemap CMS مثل التالي: giveacodicetagpre.
يمكنك العثور على شفرة المصدر بأكملها من بلدي Href="https://bitbucket.org/thecoderin/seositemap" str="nofollow"> مستودع