Làm thế nào để xử lý các lớp học Mys Mys44 không dùng nữa khi viết lại các mô hình tài nguyên


8

Tôi phải viết lại Mage_Catalog_Model_Resource_Category_Flat.

Lớp tài nguyên cũ Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatvẫn còn đó trong Magento 1.7 để tương thích ngược và mở rộng lớp mới.

Một tìm kiếm trong cơ sở mã cho bí danh mô hình đầy đủ resource_eav_mysql4_category_flatkhông mang lại kết quả nào. Nhưng config.xmlMage_Catalog chứa dòng này:

<deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>

Và tôi không biết deprecatedNodesử dụng ở đâu và như thế nào .

Có những khó khăn gì để mong đợi khi viết lại một mô hình tài nguyên như vậy? Tôi có nên viết lại cả hai lớp? Hoặc tôi có thể bỏ qua lớp mysql4 một cách an toàn?

Câu trả lời:


5

Nếu bạn phát triển một tiện ích mở rộng cho mục đích sử dụng cá nhân được cho là chỉ hoạt động cho dự án xây dựng trên Magento 1.6+ thì không có gì phải lo lắng. Bạn chỉ nên ghi đè Mage_Catalog_Model_Resource_Category_Flatbằng cách thêm phần này vào config.xmltệp tiện ích mở rộng của mình:

<models>
    <catalog_resource>
        <rewrite>
            <category_flat>Namespace_Module_Model_Resource_Category_Flat</category_flat>
        </rewrite>
    </catalog_resource>
</models>

Nếu bạn đang xây dựng một tiện ích mở rộng và bạn muốn nó hoạt động trên phiên bản trước 1.6, bạn cũng cần ghi đè Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flatlớp. Trong trường hợp config.xmlnày, phần của bạn sẽ trông như thế này:

<models>
    <catalog_resource><!--used for 1.6+ -->
        <rewrite>
            <category_flat>Namespace_Module_Model_Resource_Category_Flat</category_flat>
        </rewrite>
    </catalog_resource>
    <catalog_resource_eav_mysql4><!-- used for versions before 1.6 -->
        <rewrite>
            <category_flat>Namespace_Module_Model_Resource_Eav_Mysql4_Category_Flat</category_flat>
        </rewrite>
    </catalog_resource_eav_mysql4>
</models>

Bạn nên đặt tất cả logic của mình vào Namespace_Module_Model_Resource_Category_Flatvà lớp cho các phiên bản trước 1.6 sẽ như thế này:

class Namespace_Module_Model_Resource_Eav_Mysql4_Category_Flat extends Namespace_Module_Model_Resource_Category_Flat
{
}

Bằng cách này, cả hai phiên bản đều sử dụng cùng một mã.


7

deprecatedNodeđược Magento sử dụng để thử và tải mysql4*mô hình tài nguyên nếu resource* không tìm thấy. Tham khảo các ý kiến ​​từ Mage_Core_Model_Config::getGroupedClassNameMage_Core_Model_Resource::getEntity:

/**
 * Backwards compatibility for pre-MMDB extensions.
 * In MMDB release resource nodes <..._mysql4> were renamed to <..._resource>. So <deprecatedNode> is left
 * to keep name of previously used nodes, that still may be used by non-updated extensions.
 */

Nếu có resource*mô hình, bạn nên viết lại nó, nếu không thì viết lại mysql4*. Ví dụ về viết lại mysql4*mô hình tài nguyên:

<config>
    <global>
        <models>
            <review_mysql4>
                <rewrite>
                    <review_collection>AW_AdvancedReviews_Model_Mysql4_Review_Collection</review_collection>
                    <review>AW_AdvancedReviews_Model_Mysql4_Review</review>
                </rewrite>
            </review_mysql4>
        </models>
    </global>
</config>

Các mysql4*lớp chỉ có ở đó để tương thích ngược cho các triển khai hiện có đã mở rộng chúng. Tức là các lớp shell để tránh buộc mã hiện có phải cập nhật các phần mở rộng trên mọi thứ để tiếp tục hoạt độ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.