0

私の最後の質問に端を発し、私はオーバーライドをしようとして困惑しています。ここでMudithaEの答えがしたことも正確にやっています。

_prepareColumns()ファイルにあるように、独自のものを実装したいと思いますapp/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php。モジュールのディレクトリとファイルを以下のように設定しました。調査中に、多くの開発者がDev_Module_Block_Adminhtml_blah. 変化なし。私の Cycleworks_SalesGridImproved モジュールは、System -> Config -> Advanced リストにも表示されます。

ファイル: app/code/local/Cycleworks/SalesGridImproved/Adminhtml/Block/Sales/Order/Grid.php :

<?php
class Cycleworks_SalesGridImproved_Adminhtml_Block_Sales_Order_Grid  extends Mage_Adminhtml_Block_Sales_Order_Grid {
    protected function _prepareColumns() // tried public too
    {
                    parent::_prepareColumns();
        ...
        ...
        $this->addColumn('created_at', array(
            'header' => Mage::helper('sales')->__('Purchased On'),
            'index' => 'created_at',
             'type' => 'datetime',
             'format' => 'MMM d, h:mm a',
            'width' => '165px', 
        ));
        ...
        ...
        return $this; 
    }
}

app/code/local/Cycleworks/SalesGridImproved/etc/config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <!-- also tried: Cycleworks_SalesGridImproved -->
        <Cycleworks_Adminhtml>
            <version>0.0.01</version>
        </Cycleworks_Adminhtml>
    </modules>

    <global>
        <blocks>
            <adminhtml>
                <salesgridimproved>
                      <class>Cycleworks_SalesGridImproved_Adminhtml_Block_Sales_Order_Grid</class>
                </salesgridimproved>
                <rewrite>
                    <sales_order_grid>Cycleworks_SalesGridImproved_Adminhtml_Block_Sales_Order_Grid</sales_order_grid>
                </rewrite>
            </adminhtml>
        </blocks>        
    </global>

</config>

そしてで/app/etc/modules/Cycleworks_SalesGridImproved.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Cycleworks_SalesGridImproved>
            <active>true</active>
            <codePool>local</codePool>
        </Cycleworks_SalesGridImproved>
    </modules>
</config>  

私が欠けているものを見せてください...ありがとう!


アップデート:

拡張機能 EM_DeleteOrder も、私と同じ販売注文グリッド クラスをオーバーライドしていることがわかりました。彼の拡張機能の構成は、Mage コアの前に呼び出されるように設定されているため、私のものよりも複雑です。config.xml は確かにビジーです!

<?xml version="1.0"?>
<config>
    <modules>
        <EM_DeleteOrder>
            <version>1.0.0</version>
        </EM_DeleteOrder>
    </modules>
    <global>
        <rewrite>
        <em_emadmin_adminhtml_sales_order>
            <from><![CDATA[#/admin/sales_order/#]]></from>
            <to>/emadmin/adminhtml_sales_order/</to>
        </em_emadmin_adminhtml_sales_order>
        </rewrite>

        <blocks>
            <adminhtml>
                <rewrite>
                    <sales_order_grid>EM_DeleteOrder_Block_Adminhtml_Sales_Order_Grid</sales_order_grid>
                </rewrite>
            </adminhtml>
        </blocks>       
    </global>
    <admin>
        <routers>
            <em_deleteorder>
                <use>admin</use>
                <args>
                    <module>EM_DeleteOrder</module>
                    <frontName>emadmin</frontName>
                </args>
            </em_deleteorder>           
            <adminhtml>
                <args>
                  <modules>
                    <EM_DeleteOrder_Adminhtml before="Mage_Adminhtml">EM_DeleteOrder_Adminhtml</EM_DeleteOrder_Adminhtml>
                  </modules>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>

同様の構文を使用してモジュールを機能させ、彼のコードをハッキングする必要がない方法について何か考えはありますか? のようにafter="Mage_Adminhtml"


最終更新: 残念ながら、以下の 3 つの回答は回答ではなく、拡張機能の競合でした。私は自分の質問に答えて、回答済みとしてマークします。

4

4 に答える 4

3

私はこれを試してみましたが、うまくいきます。parent::_prepareColumns()戻ることで、あなたの変更を無視していると思います。関数の先頭に追加してから返すと、$thisうまくいきます。

<?php
class Cycleworks_SalesGridImproved_Adminhtml_Block_Sales_Order_Grid  extends Mage_Adminhtml_Block_Sales_Order_Grid {
protected function _prepareColumns() // tried public too
{
//       ...
  //     ...

parent::_prepareColumns();



    $this->addColumn('created_at', array(
        'header' => Mage::helper('sales')->__('Purchased On'),
        'index' => 'created_at',
         'type' => 'datetime',
         'format' => 'MMM d, h:mm a',
        'width' => '165px',
    ));
 //   ...
   // ...
    return $this; #parent::_prepareColumns();
}
}
于 2013-02-19T04:01:43.870 に答える
2

これは拡張機能の競合とその解決に関する大きな教訓だったので、私は自分自身に答えています。さらに、私たちの特定のインストールについて多くのことを学びました。

アップデートと同様に、EM_DeleteOrderは Adminhtml Block Sales Order Grid ( absog) をオーバーライドしていました。拡張機能MDN_ExtensionConflictも使用しましたが、正確な競合は検出されませんでしたが、EM_DeleteOrder が使用していたことがわかりましたabsog。を使用せずに注文を削除できる拡張機能を探しましabsogた。これは簡単な方法であるに違いありません。

拡張機能Asperience_DeleteAllOrdersは、ページ全体を上書きすることなくこれを実行し、代わりにルーターで何かをキャッチします。私にとってconfig.xmlは抽象芸術なので、もしあなたが上級開発者なら、彼の作品を私よりも高く評価すると思います。

最終的に、全体を独自のグリッドに置き換え、構成可能な追加の列を持つMageWorx_ExtendedOrdersを見つけました。absogカスタム配送料、注文の編集、注文の削除、注文のアーカイブが含まれます。$149 のこの拡張機能には感銘を受けました。また、 MageWorx_ExtendedOrdersに置き換えられた複数の拡張機能を削除しています。拡張機能のコードをハッキングして、列を希望の順序に並べ、日付形式を更新しています (変更内容を機能の提案として共有します)。

于 2013-02-21T01:38:57.803 に答える
1

_prepareColumns() is protected, not public.

于 2013-02-19T02:11:25.170 に答える
1

ブロックフォルダー内にadminhtmlフォルダーを配置してみてください。app/code/local/Cycleworks/SalesGridImproved/Block/Adminhtml/Sales/Order/Grid

于 2013-02-20T04:34:04.943 に答える