Sơ đồ trang web thay đổi nhà


7

Trên cửa hàng Magento của chúng tôi, sơ đồ trang web mà Magento tự động tạo từ bảng quản trị tại Danh mục> Sơ đồ trang web của Google thêm url nhà vào trang chủ của chúng tôi như:

<url>
    <loc>http://our-domain.com/home</loc>
    <lastmod>2014-11-17</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.2</priority>
</url>

Có cách nào để thay đổi nó thành

<url>
    <loc>http://our-domain.com/</loc>
    <lastmod>2014-11-17</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.2</priority>
</url>

Câu trả lời:


9

bạn đang nhận được url đó vì trang chủ là một trang CMS.
Trong trường hợp của bạn, nó có định danh home.
Để thay đổi url đó, bạn cần viết lại phương thức Mage_Sitemap_Model_Resource_Cms_Page::_prepareObjectvà làm cho nó giống như thế này:

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;
}

tất nhiên điều này sẽ không hoạt động nếu bạn thay đổi trang chủ sang một trang khác. Nhưng đó là một cách nhanh chóng để làm điều đó.
Nếu bạn muốn phiên bản sạch, bạn phải kiểm tra xem hompage cho cửa hàng hiện tại của bạn là gì.
Đối với điều này thêm một thành viên mới và phương thức như thế này:

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];
}

Trong trường hợp này, bạn cần sửa đổi getCollectionphương thức trong cùng một lớp. Trước khi $page = $this->_prepareObject($row);thêm điều này:

if ($row[$this->getIdFieldName()] == $this->getHomepageId($store)) {
    $row['url'] = '';
}

vì vậy tôi sẽ cần ghi đè app/code/core/Mage/Sitemap/Model/Resource/Cms/Page.phpnhư được mô tả ở đây
Holly

@CreedBratton. Đúng ... đó là những gì tôi đang nói.
Marius

tuyệt vời - cảm ơn sự giúp đỡ của bạn. Tôi có một câu hỏi simlar ở đây bạn có muốn nhìn vào nó?
Holly

@MariusI đã thử điều này và thấy rằng giá trị đang ghi nhật ký chính xác trong tệp nhật ký tùy chỉnh của tôi nhưng khi tôi kiểm tra tại mysite.com/sitemap/sitemap.xml, nó vẫn hiển thị mysite.com/home thay vì mysite.com. Có cần phải xóa bộ nhớ cache / biên dịch chạy hay không?
Anurag Khandelwal

3

Magento 1.9.0.0. đã thêm hai sự kiện để điều chỉnh sơ đồ trang web XML của sản phẩm và danh mục:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

Trong Mage_Sitemap_Model_Sitemap::generateXml()họ thay thế

    foreach ($collection as $item) {

với

    $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) {

Tương tự cho các trang danh mục, nhưng 20 dòng bên dưới chúng chỉ giữ foreach ($collection as $item)cho các trang CMS. Tôi sẽ điều chỉnh phương pháp này và viết lại / sửa đổi Mage_Sitemap_Model_Sitemapđể thay thế nó bằng ...

    $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) {

Sau đó, bạn có thể sử dụng sự kiện mới đó để sửa đổi sơ đồ trang web CMS của mình:

Biến cố:

<sitemap_cms_pages_generating_before>
    <observers>
        <rename_home>
            <class>[model]/observer</class>
            <method>renameCmsHomePageUrl</method>
        </rename_home>
    </observers>
</sitemap_cms_pages_generating_before>

Người quan sát:

public function renameCmsHomePageUrl(Varien_Event_Observer $observer)
{
    $collection = $observer->getCollection();
    foreach ($collection->getItems() as $item) {
        if ($item->getUrl() === 'home') {
            $item->setUrl('');
            break;
        }
    }
}

2

Cảm ơn mã.

Sử dụng đoạn mã này, tôi đã tạo một tiện ích mở rộng để tự động hóa quy trình này. Điều này cũng sẽ làm việc với các cấu hình nhiều cửa hàng / trang web. Trong tiện ích mở rộng này, tôi đã cập nhật việc tạo liên kết Sơ đồ trang web CMS như sau:

/**
     * Generate cms pages sitemap
     */
    $homepage = (string)Mage::getStoreConfig('web/default/cms_home_page', $storeId);
    $changefreq = (string)Mage::getStoreConfig('sitemap/page/changefreq', $storeId);
    $priority   = (string)Mage::getStoreConfig('sitemap/page/priority', $storeId);
    $collection = Mage::getResourceModel('sitemap/cms_page')->getCollection($storeId);
    foreach ($collection as $item) {
        /* Customizing sitemap generation where url key is home */
        Mage::log($item->getUrl(), NULL, 'SeoSitemap.log');
        $url = $item->getUrl();
        if ( $item->getUrl() == $homepage) {
            $url = '';
        }
        $xml = sprintf('<url><loc>%s</loc><lastmod>%s</lastmod><changefreq>%s</changefreq><priority>%.1f</priority></url>',
            htmlspecialchars($baseUrl . $url),
            $date,
            $changefreq,
            $priority
        );
        $io->streamWrite($xml);
        /* Customization ends */
    }
    unset($collection);

    $io->streamWrite('</urlset>');
    $io->streamClose();

    $this->setSitemapTime(Mage::getSingleton('core/date')->gmtDate('Y-m-d H:i:s'));
    $this->save();

    return $this;

Bạn có thể tìm thấy toàn bộ mã nguồn từ kho lưu trữ của tôi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.