5

注文モデル( " dynamics_ord ")にカスタム属性を追加する必要があります。

この属性は、注文が正常に保存された後、理想的にはadmin / sales_order/viewのメイン注文ブロックで管理スタッフが定義する必要があります。

請求書/出荷などから独立している必要があります-注文" edit"イベントに添付されている可能性があります。

他のエンティティ(特に顧客)用にいくつかのカスタム属性を作成しました。そして、これは同じプロセスだと思います。しかし、明らかな「更新」アクションがないため、この属性を使用して注文を修正する方法がわかりません。「編集」は理にかなっているかもしれませんが、私は不必要に注文を複製したくありません。

この属性が配置されたら、sales_order/indexグリッドに表示します。(注=実用的な解決策については、この関連スレッドを確認してください。)

このモジュールの最終状態(およびこのソリューションを必要としている他の人のために):

/ sales_order / view /スクリーンショット: スクリーンショット

WACI_SalesExt

app/local/WACI/SalesExt
 /Block
   /Adminhtml
     /Sales
       -Dynamicsord.php
 /controllers
   /Adminhtml
     /Sales
       - OrderController.php
 /etc
  - config.xml
 /Helper
   - Data.php
 /sql
   /waci_salesext_setup
     -mysql4-install-0.2.0.php

config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <WACI_SalesExt>
            <version>0.2.0</version>
        </WACI_SalesExt>
    </modules>
    <global>

        <helpers>
            <WACI_SalesExt>
                <class>WACI_SalesExt_Helper</class>
            </WACI_SalesExt>
        </helpers>

        <blocks>
            <WACI_SalesExt>
                <class>WACI_SalesExt_Block</class>
            </WACI_SalesExt>

            <adminhtml> <!-- unclear if i need this second declaration for admin-->
                <WACI_SalesExt>
                    <class>WACI_SalesExt_Block</class>
                </WACI_SalesExt>
            </adminhtml>

        </blocks>

        <models>
            <WACI_SalesExt>
                <class>WACI_SalesExt_Model</class>
                <resourceModel>salesext_mysql4</resourceModel>
            </WACI_SalesExt>

        </models>

        <resources>
            <waci_salesext_setup>
                <setup>
                    <module>WACI_SalesExt</module>
                    <class>Mage_Sales_Model_Mysql4_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </waci_salesext_setup>
            <waci_salesext_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </waci_salesext_write>
            <waci_salesext_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </waci_salesext_read>
        </resources>

    </global>

<admin>
    <routers>
        <adminhtml>
            <use>admin</use>
            <args>
                <modules>
                    <WACI_SalesExt after="Mage_Adminhtml_Sales">WACI_SalesExt_Adminhtml</WACI_SalesExt>
                </modules>
            </args>
        </adminhtml>    
    </routers>
</admin>
</config>

WACI / SalesExt / sql / waci_salesext_setup / mysql4-install-0.2.0.php

    $installer = $this;
    $installer->startSetup();

    $installer->addAttribute('order', 'dynamics_ord', array(
                                'type'              =>'varchar', 
                                'visible'           => true, 
                                'required'          => false, 
                                'is_user_defined'   => false, 
                                'note'              => 'Dynamics ORD')
                            );

$installer->getConnection()->addColumn($installer->getTable('sales_flat_order'), 'dynamics_ord','VARCHAR(255) NULL DEFAULT NULL');
$installer->getConnection()->addColumn($installer->getTable('sales_flat_order_grid'), 'dynamics_ord','VARCHAR(255) NULL DEFAULT NULL');

    $installer->endSetup();

template / sales / order / view / info.phtml

<?php echo $this->getLayout()->createBlock('WACI_SalesExt/adminhtml_sales_dynamicsord')->setOrderId($_order->getId())->toHtml() ?>

template / sales / ord_form.phtml

<?php if ('sales_order' == Mage::app()->getRequest()->getControllerName() ): ?>
<tr>
    <td class="label"><label for="dynamics_ord">Dynamics ORD</label></td>
    <td class="value">
        <form action="<?php echo $this->getFormUrl(); ?>" method="post" id="ord_form">
            <input type="hidden" name="form_key" value="<?php echo $this->getFormKey(); ?>" />
            <input type="hidden" name="token" value="<?php echo $this->getToken(); ?>" />  
            <div class="">
                <input type="text" class="input-text" name="dynamics_ord" value="<?php echo $this->getOrder()->getData('dynamics_ord'); ?>" style="width:150px; float:left; display:inline;" />
                <button onclick="editForm.submit()" style="float:left;margin:3px 10px 0;">Update</button>  
            </div> 
        </form>
        <script type="text/javascript">
            editForm = new varienForm('ord_form');
        </script>
    </td>
</tr>
<?php endif; ?>

WACI_SalesExt_Block_Adminhtml_Sales_Dynamicsord

class WACI_SalesExt_Block_Adminhtml_Sales_Dynamicsord extends Mage_Adminhtml_Block_Template
{
    public function __construct()
    {
        parent::__construct();
        $this->setTemplate('sales/ord_form.phtml');
    }

    public function getOrder(){
        return Mage::registry('current_order');
    }

    public function getFormUrl(){
        return Mage::helper("adminhtml")->getUrl('*/sales_order/editord', array('order_id'=>$this->getOrder()->getId()) );
    }

}

WACI_SalesExt_Adminhtml_Sales_OrderController

include_once Mage::getModuleDir('controllers', 'Mage_Adminhtml') . DS . 'Sales' . DS . 'OrderController.php';

class WACI_SalesExt_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController
{

    public function editordAction()
    {

        $postData = $this->getRequest()->getPost();

        Mage::log('WACI_SalesExt_Adminhtml_Sales_OrderController::ordEditAction'.print_r($postData, true) );

        $id = $this->getRequest()->getParam('order_id');
        $order = Mage::getModel('sales/order')->load($id);
        $order->setDynamicsOrd($postData['dynamics_ord']);

        $order->save();

        // return to sales_order view
        Mage::app()->getResponse()->setRedirect(Mage::helper('adminhtml')->getUrl("adminhtml/sales_order/view", array('order_id'=> $id)));

    }

}

この問題に関するいくつかの情報を探していましたが、このSOスレッドは私がやりたいことにかなり近いようです。しかし、このワークフローを介して編集可能な入力を作成できるかどうかは明らかではありません。

私はMage1.11を使用していることに注意します。そして、標準のEAVパターンが注文モデルに使用されなくなったことを確認しました。

乾杯 -


アップデート

(「現在の」モジュールの内容に注意してください。)

  • フィールドがsales_flat_orderに追加されました
  • WACI_SalesExt_Block_Adminhtml_Sales_Dynamicsordブロックが正しく構築されています
  • 正しく引き込まれているテストデータがあります

この時点では、ルーターが正しく設定されていないと思います。あなたの例では、を呼び出し<?php echo $this->getEditFormUrl(); ?>ました。フォーマットされたアクションURLを出力することになっているのかどうかはわかりませんが、そうではありませんでした。私は自分の物を落としましたが、それでもルーターに正しく当たっていません。

現在、フォームアクションの値=

   action ="http://my.domain.com/index.php/my_admin/sales_order/editord/key/2e56d7f560dc4d356e3ef9519764b8a84858e5cd40d3c1f5821a423b949b9a6a/"

そして、「ページが見つかりません」をヒットするだけです。私の知る限り、ルーターはここで正確である必要があります。私はいくつかの異なる組み合わせを試しました。管理ルーターの問題で重要な何かが見当たらないようです。私はkey/ee6...がおそらく私を台無しにしていることを理解していますが、それを適切に処理する方法がわかりません。


アップデート

ルーティングの問題は単純なエラーでした。不必要に複雑になりました。「AdminHtml」と「Adminhtml」の名前のつづりが間違っていたため、ルーターが失われました。

ああマゼント...

助けてくれてありがとう@RS。

4

1 に答える 1

8

注文詳細ページの「アカウント情報」セクションに「編集可能な入力」を追加してみてください。

/app/design/adminhtml/default/default/template/sales/order/view/info.phtml内

ここに画像の説明を入力してください

追加

<?php echo $this->getLayout()->createBlock('salesext/adminhtml_editform')->setOrderId($_order->getId())->toHtml() ?>

あなたのブロックで

<?php

class WACI_SalesExt_Block_Adminhtml_Editform extends Mage_Adminhtml_Block_Template
{
    public function __construct()
    {
        parent::__construct();
       $this->setTemplate('salesext/edit_form.phtml');
    }

    public function getOrder(){
        return Mage::registry('current_order');
    }

   public function getFormUrl(){
       return Mage::helper("adminhtml")->getUrl('*/sales_order/editField', array('order_id'=>$this->getOrder()->getId());
  }
  ...

/app/design/adminhtml/default/default/template/salesext/edit_form.phtmlにあります

<?php if ('sales_order' == Mage::app()->getRequest()->getControllerName() : ?>
<div id="change-order-email" style="display:none">
    <form action="<?php echo $this->getEditFormUrl(); ?>" method="post" id="edit_form">
        <input type="hidden" name="form_key" value="<?php echo $this->getFormKey(); ?>" />
        <input type="hidden" name="token" value="<?php echo $this->getToken(); ?>" />  
        <table cellspacing="4" class="form-list">
            <tr>
                <td>Field</td>
                <td><input .... class="required-entry validate-email" /></td>
            </tr>
        </table>
    </form>
    <button onclick="editForm.submit()">Change</button> 
</div>
<script type="text/javascript">
    editForm = new varienForm('edit_form');
</script>
<?php endif; ?>

/app/code/local/CWACI/SalesExt/controllers/Adminhtml/Sales/OrderController.php内

<?php
include_once Mage::getModuleDir('controllers', 'Mage_Adminhtml') . DS . 'Sales' . DS . 'OrderController.php';

class CWACI_SalesExt_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Sales_OrderController
{

    public function editFieldAction()
    {
        $postData = $this->getRequest()->getPost();
        $id = $this->getRequest()->getParam('order_id');
        $order = Mage::getModel('sales/order')->load($id);
        $order->setFieldName($postData[field_name]);
        .....
        $order->save();

config.xmlで

...
<admin>
    <routers>
        <adminhtml>
            <use>admin</use>
            <args>
                <modules>
                    <CWACI_SalesExt after="Mage_Adminhtml_Sales">CWACI_SalesExt_Adminhtml</CWACI_SalesExt>
                </modules>
            </args>
        </adminhtml>    
    </routers>
</admin>

....。

モジュールからカスタム管理テーマを設定して、コアテンプレートに直接変更を加えないようにするも参照してください。

于 2013-01-31T02:54:34.010 に答える