Magento:在产品详细信息页面上添加textboxx以获得自定义大小

时间:2012-08-26 09:30:32

标签: magento magento-1.7

我正在珠宝网站(在magento 1.7中开发),我有一个戒指产品。在ring产品的详细信息页面上,我的客户希望显示一个文本框,用户将在其中输入与大小相关的详细信息。

产品价格不会因输入的尺寸而异,此尺寸字段仅供客户参考,以便他们可以根据需要制作合适尺寸的戒指。

我已检查过,但magento不允许在可配置产品上使用文本框。

有人知道任何扩展程序(免费或付费)或任何可以帮助我在magento中实现此功能的代码。

感谢。

2 个答案:

答案 0 :(得分:1)

在您的主题中,对于文件:template / checkout / cart.phtml 添加新标题以及购物车项目的其他标题。

1
<th><?php echo $this->__('Comments') ?></th>
In the file: template/checkout/cart/item/default.phtml

添加新列

1
<td class="a-center">
2
<textarea name="cart[<?php echo $_item->getId() ?>][comments]" rows="3" cols="20"><?php echo $_item->getItemcomment() ?></textarea>
3
</td>

对于较早版本的Magento,它将是:

1
<td class="a-center">
2
<textarea name="cart[<?php echo $_item->getId() ?>][comments]" rows="3" cols="20"><?php echo $this->getItemItemcomment($_item) ?></textarea>
3
</td>

下一步是在客户更新购物车时将注释保存在数据库中。

在表单'sales_flat_quote_item'中添加一个新字段'itemcomment'。 (对于旧版本的Magento,该表将为'sales_quote_item')

现在我们要添加将执行数据库操作的代码。为此,我们需要修改文件: app / code / core / Mage / Checkout / Model / Cart.php(注意:如果您打算升级Magento设置,请将此文件复制到本地和修改。)

这里我们需要在函数updateItems()中添加一些代码,这样函数现在应该如下所示:

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

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

07
        $item = $this->getQuote()->getItemById($itemId);
08
        if (!$item) {
09
            continue;
10
        }
11

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

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

22
    /* Start: Custom code added for comments */
23
    if(!empty($itemInfo['comments'])) {
24

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

27
        # make the frame_queue active
28
        $query = "UPDATE `sales_flat_quote_item` SET itemcomment = '".$itemInfo['comments']."' where item_id = $itemId";
29
        $write->query($query);
30

31
        $item->setItemcomment($itemInfo['comments']);
32
    }
33
    /* End: Custom code added for comments */
34

35
    }
36

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

在管理员中显示评论 - &gt;查看订单

将新函数getItemcomment()添加到下面的文件中: 应用程序/代码/核心/法师/ Adminhtml /砌块/销售/订购/视图/ Items.php

如果您使用的是1.5或更高版本,请将其添加到下面的文件中。 应用程序/代码/核心/法师/ Adminhtml /砌块/销售/订购/视图/ Items.php

01
    public function getItemcomment($item) {
02
        $itemId = $item->getId();
03

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

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

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

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

17
        while ($row = $res->fetch() ) {
18
            if(key_exists('itemcomment',$row)) {
19
                echo nl2br($row['itemcomment']);
20
            }
21
        }
22
    }   
To add the comments column to the items edit the .phtml file below:
app/design/adminhtml/default/default/template/sales/order/view/items.phtml

Adding header for items to make it look like below:

1
.
2
.
3
<tr class="headings">
4
    <th><?php echo $this->helper('sales')->__('Product') ?></th>
5
    <th><?php echo $this->helper('sales')->__('Comments') ?></th>
6
    <th><?php echo $this->helper('sales')->__('Item Status') ?></th>
7
.
8
.
9
.
Adding Column with comments. app/design/adminhtml/default/default/template/sales/order/view/items/renderer/default.phtml
Add a column for item comments juts before status columns to make it look a like below.

view sourceprint?
1
.
2
.
3
<td><?php echo $this->getItemcomment($_item) ?></td> <!-- New column added for item comments -->
4
<td class="a-center"><?php echo $_item->getStatus() ?></td>
5
.
6
.

这样做会在项目表中显示评论栏。 这将添加一个名称为注释的文本框(尽快更改名称)。希望这会有所帮助。 注意:只有当项目被添加到购物车时才会添加一个框,正如您所说的价格没有变化我认为这更合适。

答案 1 :(得分:1)

我已按照您的说明在我的onepage checkout上添加了评论框,但在我检查时它没有在数据库表中添加评论。如果我做错了,你能告诉我吗?

下面的

是我说过要更新的Cart.php文件中的函数:

public function updateItems($ data)     {         Mage :: dispatchEvent('checkout_cart_update_items_before',数组('cart'=&gt; $ this,'info'=&gt; $ data));

    /* @var $messageFactory Mage_Core_Model_Message */
    $messageFactory = Mage::getSingleton('core/message');
    $session = $this->getCheckoutSession();
    $qtyRecalculatedFlag = false;
    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);

            $itemInQuote = $this->getQuote()->getItemById($item->getId());

            if (!$itemInQuote && $item->getHasError()) {
                Mage::throwException($item->getMessage());
            }

            if (isset($itemInfo['before_suggest_qty']) && ($itemInfo['before_suggest_qty'] != $qty)) {
                $qtyRecalculatedFlag = true;
                $message = $messageFactory->notice(Mage::helper('checkout')->__('Quantity was recalculated from %d to %d', $itemInfo['before_suggest_qty'], $qty));
                $session->addQuoteItemMessage($item->getId(), $message);
            }
        }


        /* Start: Custom code added for comments */
        if(!empty($itemInfo['comments'])) {

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

            # make the frame_queue active
            $query = "UPDATE `mgn_sales_flat_quote_item` SET itemcomment = '".$itemInfo['comments']."' where item_id = " . $itemId . "";
            $write->query($query);
            $item->setItemcomment($itemInfo['comments']);

        }
        /* End: Custom code added for comments */


    }

    if ($qtyRecalculatedFlag) {
        $session->addNotice(
            Mage::helper('checkout')->__('Some products quantities were recalculated because of quantity increment mismatch')
        );
    }

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