Файл ресурса переопределения расширения Magento - PullRequest
1 голос
/ 27 сентября 2011

Как переопределить файл ресурсов, как показано ниже, при создании расширения Magento:

core/Mage/Catalog/Model/Resource/Product/Indexer/Price/Default.php

Я знаю, что вы можете скопировать этот файл в локальный путь и переопределить его таким образом, но япытаясь выяснить, как переопределить / расширить его для расширения.В частности, как должен выглядеть синтаксис config.xml?Мне интересно, возможно ли это вообще, потому что все, что я вижу в Интернете, - это как переопределить файлы моделей, подобные этому:

core/Mage/Catalog/Model/Product.php

Что вы могли бы сделать со следующим:

<models>
  <catalog>
    <rewrite>
      <product>My_Module_Catalog_Model_Product</product>
    </rewrite>
  </catalog>
<models>

или файлы ресурсов, подобные этому, внутри каталога Eav / Mysql4:

core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product.php

Что, я полагаю, вы могли бы сделать так:

<models>
  <catalog_resource_eav_mysql4>
    <rewrite>
       <product>My_Module_Catalog_Model_Resource_Eav_Mysql4_Product</attribute></product>
  </catalog_resource_eav_mysql4>
</models>

Но я не понимаю, какобрабатывать файлы ресурсов, которые не в каталоге Eav.Возможно ли это?

Ответы [ 3 ]

10 голосов
/ 31 декабря 2011

Из комментариев к принятому ответу, на который ссылается Zyava, вы можете проверить исходный файл модуля config.xml, чтобы увидеть, какие модели определены.Как только вы это узнаете, синтаксис для их переопределения будет прежним.

Модуль каталога имеет эту модель, определенную для ресурсов:

<global>
    <models>
        ....
        <catalog_resource>
            <class>Mage_Catalog_Model_Resource</class>
            ...
        </catalog_resource>
    </models>
</global>

(Примечание. Класса Mage_Catalog_Model_Resource не существует,но это нормально, потому что Magento будет использовать это как базу для вызова всех связанных моделей.)

Теперь мы знаем, что нам следует использовать catalog_resource в качестве контейнера XML для перезаписи, и мы знаем, что мы должны использовать текст, которыйпосле имени ресурса в имени класса модели создается контейнер XML со ссылкой на конкретную модель, которую мы хотим переопределить.

core/Mage/Catalog/Model/Resource/Product/Indexer/Price/Default.php
xxxxxxxxxx----------------------|-----------------------------xxxx
                              split

Catalog/Model/Resource        -> catalog_resource
Product/Indexer/Price/Default -> product_indexer_price_default    

Вот как это должно выглядеть в файле config.xml пользовательского модуля:

<global>
    <models>
        <catalog_resource>
            <rewrite>
                <product_indexer_price_default>CompanyName_ModuleName_Model_Catalog_Resource_Product_Indexer_Price_Default</product_indexer_price_default>
            <rewrite>
        </catalog_resource>
    </models>
</global>

Какое имя класса вы переопределяете, зависит от конфигурации вашего модуля.Пример, который я использовал (CompanyName_ModuleName_Model_Catalog_Resource_Product_Indexer_Price_Default), соответствует образцу файлов, который я обычно использую.Похоже, у вас что-то вроде этого:

My_Module_Catalog_Model_Resource_Product_Indexer_Price_Default
2 голосов
/ 03 января 2012

Что я теперь понимаю о системе переписывания классов Magento, которую я не понял, когда задавал этот вопрос, так это то, что этот конкретный класс, который я хотел переопределить в расширении, недоступен для перезаписи. Рассматриваемый класс действительно больше похож на абстрактный класс, он никогда не создается напрямую, вместо этого он подклассируется другими классами, которые в свою очередь являются кандидатами на переписывание. Поэтому правильным способом добиться того, чего я хотел, было бы выбрать соответствующий конкретный дочерний класс и переписать его обычным способом, как указано, например, в ответе потерянного времени.

А как вы определяете, является ли класс кандидатом на переписывание? Один из способов - после того, как вы определите имя сгруппированного класса или URI для класса (то есть catalog/product_index_price), найдите его в источнике Magento и посмотрите, используется ли оно где-либо для создания экземпляра класса.

0 голосов
/ 27 сентября 2011

Как вы можете видеть, это также файл модели в core/Mage/Catalog/Model/ dir, поэтому расширение этого файла в config.xml (переписывание, а затем расширение) выглядит так же, как и в любой другой модели.

, если вы не хотите полностью переопределить его, просто скопируйте в

local/Mage/Catalog/Model/Resource/Product/Indexer/Price/Default.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...