سؤال

على متجر 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"> مستودع

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top