Loại trừ một số sản phẩm nhất định khỏi thế hệ sitento.xml Magento


14

Tôi cần đảm bảo một số ít sản phẩm KHÔNG có trong Sitemap.xmltệp được tạo trong Magento. Tôi đã tìm thấy một vài ví dụ cho những thứ như Trang CMS nhưng không có gì để làm trang sản phẩm và hơn 1 sản phẩm. Tôi là thương hiệu mới của Magento

Bất cứ ai biết làm thế nào điều này có thể được thực hiện?

Câu trả lời:


7

Không, không có cách nào để loại trừ một số sản phẩm khỏi sơ đồ trang web được tạo bởi Catalog -> Google Sitemaptính năng của Magento .

Nếu tôi chuẩn bị thực hiện chương trình này, các phiên bản hiện đại của Magento (đã được kiểm tra trong nhánh 1.7.x, thì phiên bản này có thể có trong các phiên bản trước / EE), sử dụng lớp mô hình tài nguyên sau

Mage_Sitemap_Model_Resource_Catalog_Product

để lấy danh sách các sản phẩm.

#File: app/code/core/Mage/Sitemap/Model/Sitemap.php
$collection = Mage::getResourceModel('sitemap/catalog_product')->getCollection($storeId);

Đây không phải là mô hình Magento CRUD tiêu chuẩn và getCollectionkhông trả về đối tượng bộ sưu tập. Thay vào đó, getCollectiontruy vấn thủ công cơ sở dữ liệu cho các sản phẩm này.

Nếu tôi định triển khai chức năng ngăn một số sản phẩm nhất định hiển thị trên bản đồ trang web, tôi sẽ thử

  1. Một lớp viết lại getCollectionphương thức gọi parent::getCollection, và sau đó lọc thủ công bất kỳ sản phẩm nào từ mảng

  2. Một lớp viết lại trên _addFilterđó gọi phương thức cha mẹ :: _ addFilter và sau đó thêm một mệnh đề WHERE bổ sung vào _selectđể loại trừ (các) sản phẩm cụ thể. Sắp xếp một vụ hack, nhưng đó là phương pháp duy nhất mà bạn có quyền truy cập vào _selectđối tượng được sử dụng để truy vấn cơ sở dữ liệu. Lý tưởng nhất là bạn muốn có một số loại cờ toàn cầu / tĩnh để bạn chỉ thêm (các) mệnh đề WHERE mới của bạn một lần.


8

Kể từ Magento 1.9.0. bạn có thể làm điều này mà không cần chạm vào bất kỳ tập tin cốt lõi.

Có hai sự kiện mới bạn có thể quan sát:

  • sitemap_categories_generating_before
  • sitemap_products_generating_before

Để loại trừ các sản phẩm dựa trên thuộc tính, bạn có thể làm điều này:

  1. thêm một người quan sát vào sitemap_products_generating_before

    ứng dụng \ code \ cộng đồng \ My \ Module \ etc \ config.xml

        <events>
            <sitemap_products_generating_before>
                <observers>
                    <my_module>
                        <class>my_module/observer</class>
                        <method>excludeProductsFromSitemap</method>
                    </my_module>
                </observers>
            </sitemap_products_generating_before>
        </events>

    ứng dụng \ code \ cộng đồng \ My \ Module \ Model \ Observer.php

    public function excludeProductsFromSitemap(Varien_Event_Observer $observer)
    {
        $collection = $observer->getCollection();
        $items = $collection->getItems();
    
        $excludeIds = Mage::getModel('catalog/product')
            ->getCollection()
            ->setStoreId($observer->getStoreId()) # requieres Magento 1.9.3.0
            ->addAttributeToFilter('use_in_sitemap', 0)
            ->getAllIds();
    
        foreach ($excludeIds as $id) {
            unset($items[$id]);
        }
    
        $collection->setItems($items);
    }
  2. thêm thuộc tính sản phẩm "có / không" được đặt tên use_in_sitemap(có thể là giá trị mặc định "có")

  3. thêm thuộc tính này vào tất cả các bộ thuộc tính
  4. đặt các sản phẩm bạn muốn loại trừ thành "không"
  5. tạo sơ đồ trang web của bạn

Lưu ý : cho đến khi Magento 1.9.3.0 thuộc tính phải được đặt thành globalphạm vi.


3

Để đạt được điều này, bạn có thể làm như sau -:

  1. Tạo một thuộc tính đối với sản phẩm tức là exclude_from_sitemap(Có / Không)

  2. Ghi đè Mage_Sitemap_Model_Resource_Catalog_Productlớp và sửa đổi getCollectionchức năng bằng cách thêm bộ lọc vào thuộc tính mới của bạn, tức là loại trừ khỏi sơ đồ trang web

Nếu bạn không phải là nhà phát triển thì mô-đun sau có thể giúp đạt được những điều trên nhưng tất nhiên đó là phần mở rộng phải trả tiền

http: //www.sc Commerce-mage.co.uk/magento-extensions/magento-google-site-map-exinating.html


1

Bạn có thể vô hiệu hóa các sản phẩm đó hoặc đặt trường hiển thị thành 'Không hiển thị riêng lẻ'. Trong sơ đồ trang web chỉ có các sản phẩm được kích hoạt và hiển thị được liệt kê.
Nếu bạn cần các sản phẩm đó được kích hoạt, chỉ cần vô hiệu hóa chúng, xây dựng sitemap.xml và bật lại chúng.

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.