0

チェックアウトカートのmornitorで、カートにearch製品の日付ピッカーを追加して、顧客が使用開始日(今から1か月以内)を選択できるようにしました。place-orderをクリックすると、この日付ピッカーを1ページに保存したいと思います。注文に応じて保存されます。私はすでにeav_attributeに属性を作成しています。config.xmlでは、次のコードを使用します。

<events>

            <controller_action_predispatch_checkout_cart_index >
                <observers>
                    <licensetime_observer>
                        <class>licensetime/observer</class>
                        <method>saveLicensetime</method>
                    </licensetime_observer>
                </observers>
            </controller_action_predispatch_checkout_cart_index>

        </events>

そしてオブザーバー私はvar_dumpを試みましたが、start_dateはnullです

public function saveLicensetime($observer)
    {

        $event = $observer->getEvent();
        $product = $event->getProduct();
        $quote = Mage::getSingleton('checkout/type_onepage')->getQuote();
        $licenseStartDate = $quote->getLicense_start_date();
        if (!$licenseStartDate) {
            $licenseStartDate = date ("Y-m-d H:i:s", floor(time()/86400)*86400);
        }
        //var_dump($quote); die("aaaaaaaaaaa");

    }

cart / item / defaul.phtml datepickerコード:

<label for="license_start_date"><?php echo $this->__('Start Date') ?> :</label>
    <input name="cart[<?php echo $_item->getId() ?>][license_start_date]" readonly="true" id="license_start_date<?php echo $_item->getProductId(); ?>" value="<?php echo $this->getLicenseStartTime($_item->getId()) ?>" class="date-picker" />
    <label for="license_end_date"><?php echo $this->__('End Date') ?> :</label>
    <input readonly="true" name="cart[<?php echo $_item->getId() ?>][license_end_date]" id="license_end_date<?php echo $_item->getProductId(); ?>" value="<?php echo $this->getLicenseEndTime($_item->getId()) ?>"></input>

私はこの記事を試していますが、運がありません!

Magentoは、カートに追加する前にカスタムオプションの値を変更します

すみません、私のEはよくありません!

4

1 に答える 1

0

数日前、私は勤勉で、次のことを知っています。-app / code / core / Mage / Checkout / Model / Cart.phpをオーバーライドし、次のような関数を編集します。

    public function updateItems($data)
 {
     Mage::dispatchEvent('checkout_cart_update_items_before', array('cart'=>$this, 'info'=>$data));

     foreach ($data as $itemId => $itemInfo) {

         $item = $this->getQuote()->getItemById($itemId);
         if (!$item) {
             continue;
         }

         if (!empty($itemInfo['remove']) || (isset($itemInfo['qty']) && $itemInfo['qty']=='0')) {
             $this->removeItem($itemId);
             continue;
         }

         $qty = isset($itemInfo['qty']) ? (float) $itemInfo['qty'] : false;
         if ($qty > 0) {
             $item->setQty($qty);
         }

     /* Start: Custom code added for license start date */
     if(!empty($itemInfo['license_start_date'])) {

        $write = Mage::getSingleton('core/resource')->getConnection('core_write');

        # make the frame_queue active
        $query = "UPDATE `sales_flat_quote_item` SET license_start_date = '".$itemInfo['license_start_date']."' where item_id = $itemId";
$write->query($query);

        $item->setLicense_start_date($itemInfo['license_start_date']);
     }
     /* End: Custom code added for licensee start date */

     }

     Mage::dispatchEvent('checkout_cart_update_items_after', array('cart'=>$this, 'info'=>$data));
     return $this;
 }

app / code / core / Mage / Adminhtml / Block / Sales / Order / Items / Abstract.phpをローカル(app / code / local / Mage / Adminhtml / Block / Sales / Order / Items / Abstract.php)にコピーして追加しますこの関数:

public function getLicense_start_date($item) {
        $itemId = $item->getId();

        $write = Mage::getSingleton('core/resource')->getConnection('core_write');

        $query = "SELECT q.* FROM `sales_flat_order_item` o
        LEFT JOIN `sales_flat_quote_item` q on o.quote_item_id = q.item_id
        WHERE o.item_id = $itemId";

        # For older versions of Magento
/*      $query = "SELECT q.* FROM `sales_order_entity_int` o
        LEFT JOIN `sales_flat_quote_item` q on o.value = q.entity_id
        WHERE o.entity_id = $itemId AND o.attribute_id = 343";       */     

        $res = $write->query($query);

        while ($row = $res->fetch() ) {
            if(key_exists('itemcomment',$row)) {
                echo nl2br($row['itemcomment']);
            }
        }
    }    

ライセンス時間の列をアイテムに追加するには、以下の.phtmlファイルを編集します。app/ design / adminhtml / default / default / template / sales / order / view / items.phtml(adminhtmlにテーマを追加して編集できます)

アイテムのヘッダーを追加して、次のようにします。

<tr class="headings">
<th><?php echo $this->helper('sales')->__('Product') ?></th>
<th><?php echo $this->helper('sales')->__('Licens Time') ?></th>
<th><?php echo $this->helper('sales')->__('Item Status') ?></th>

そして、コメント付きの列を追加します。app / design / adminhtml / default / default / template / sales / order / view / items / renderer / default.phtmlステータス列の前にアイテムコメントの突き出しの列を追加して、次のようにします。

<td><?php echo $this->getLicense_start_date($_item) ?></td> <!-- New column added for item comments -->
<td class="a-center"><?php echo $_item->getStatus() ?></td>

注:テーマでは、ファイルの場合:template / checkout / cart.phtmlカートアイテムの他の見出しと一緒に新しい見出しを追加し、ファイルの場合:template / checkout / cart / item/default.phtml選択した日付にdatepickerを使用します以下のようなコードで:

<td class="a-center">
<input type="text" name="cart[<?php echo $_item->getId() ?>][license_start_date]" rows="3" cols="20"><?php echo $_item->getLicense_start_date() ?></input>
</td>
于 2012-10-15T10:52:25.313 に答える