1

基于http://www.webspeaks.in/2011/06/customize-new-order-email-template-in.htmlhttp://www.magentocommerce.com/boards/viewthread/43928/我创建了一个自定义电子邮件模板。

然而,几个小时后,我无法弄清楚如何让项目的自定义选项显示在电子邮件中。

在默认电子邮件代码(位于 \app\design\frontend\base\default\template\email\order\items\order\default.phtml)中有以下几行:

    <?php if ($this->getItemOptions()): ?>
    <dl style="margin:0; padding:0;">
        <?php foreach ($this->getItemOptions() as $option): ?>
        <dt><strong><em><small><?php echo $option['label'] ?></small></em></strong></dt>
        <dd style="margin:0; padding:0 0 0 9px;">
            <?php echo (isset($option['print_value']) ? $option['print_value'] : nl2br($this->escapeHtml($option['value']))) ?>
        </dd>
        <?php endforeach; ?>
    </dl>
    <?php endif; ?>

但是在我的 .phtml 中使用该代码不会显示任何内容。

这是我的代码:

<?php $_order = $this->getOrder() ?>
<?php $i=0; foreach ($_order->getAllItems() as $_item): ?><?php if($_item->getParentItem()) continue; else $i++; ?>
<?php echo $this->__('(') ?><?php echo $_item->getQtyOrdered()*1 ?><?php echo $this->__(') ') ?>
<strong><?php echo $this->htmlEscape($_item->getName()) ?></strong>
<?php echo $this->__('$') ?><?php echo number_format($_item->getRowTotal(), 2) ?>
<br />
    <?php if ($this->getItemOptions()): ?>
        <?php foreach ($this->getItemOptions() as $option): ?>
        <strong><em><small><?php echo $option['label'] ?></small></em></strong>
            <?php echo (isset($option['print_value']) ? $option['print_value'] : nl2br($this->escapeHtml($option['value']))) ?>
        <?php endforeach; ?>
    <?php endif; ?>
<?php echo $this->__("-------------------") ?>
<br />
<?php endforeach; ?>
<br />
<?php echo $this->__('Subtotal: $') ?><?php echo number_format($_order->getSubtotal(), 2) ?>
<br />
<?php echo $this->__('Tax: $') ?><?php echo number_format($_order->getTaxAmount(), 2) ?>
<br />
<strong><?php echo $this->__('Grand Total: $') ?><?php echo number_format($_order->getGrandTotal(), 2) ?></strong>

我尝试使用 $_item->getItemOptions()) 但没有帮助。

如果有人能提供正确的语法帮助,我将不胜感激(我希望这就是我所缺少的)。

谢谢你。

4

2 回答 2

2

我知道这个问题已经得到解答,但就我而言,它看起来像是观察者在干扰该$this->getItemOptions()方法。

尝试替换以下代码块

应用程序/设计/前端/[YOUR_PACKAGE]/[YOUR_THEME]/template/email/order/items/order/default.phtml

<?php if ($this->getItemOptions()): ?>
<dl style="margin:0; padding:0;">
    <?php foreach ($this->getItemOptions() as $option): ?>
    <dt><strong><em><?php echo $option['label'] ?></em></strong></dt>
    <dd style="margin:0; padding:0 0 0 9px;">
        <?php echo nl2br($option['value']) ?>
    </dd>
    <?php endforeach; ?>
</dl>
<?php endif; ?>

有了这个

    <?php if ($options = $_item->getProductOptions()): ?>
        <?php if (isset($options['options'])): ?>
            <dl style="margin:0; padding:0;">
            <?php foreach ($options['options'] as $option): ?>
                <dt><strong><em><small><?php echo $option['label'] ?></small></em></strong></dt>
                <dd><?php echo (isset($option['print_value']) ? $option['print_value'] : nl2br($this->escapeHtml($option['value']))) ?></dd>
            <?php endforeach; ?>
            </dl>
        <?php endif; ?>
        <?php if (isset($options['additional_options'])): ?>
            <dl style="margin:0; padding:0;">
            <?php foreach ($options['additional_options'] as $option): ?>
                <dt><strong><em><small><?php echo $option['label'] ?></small></em></strong></dt>
                <dd><?php echo (isset($option['print_value']) ? $option['print_value'] : nl2br($this->escapeHtml($option['value']))) ?></dd>
            <?php endforeach; ?>
            </dl>
        <?php endif; ?>
        <?php if (isset($options['attributes_info'])): ?>
            <dl style="margin:0; padding:0;">
            <?php foreach ($options['attributes_info'] as $option): ?>
                <dt><strong><em><small><?php echo $option['label'] ?></small></em></strong></dt>
                <dd><?php echo (isset($option['print_value']) ? $option['print_value'] : nl2br($this->escapeHtml($option['value']))) ?></dd>
            <?php endforeach; ?>
            </dl>
        <?php endif; ?>
    <?php endif; ?>
于 2017-07-03T13:43:58.113 回答
1

经过大量研究,我发现了解决方案。

上面的代码片段来自使用我的文件中我无法访问的函数 getItemOptions() 的原始代码。所以我找到了该函数的位置,正如您在此处看到的那样,它使用了 getProductOption() 函数。所以这是我的最终代码:

    <?php if ($options = $_item->getProductOptions()): ?>
    <?php if (isset($options['options'])): ?>
    <?php foreach ($options['options'] as $option): ?>
    <br /><strong><em><small><?php echo $option['label'] ?></small></em></strong>
        <br /><?php echo (isset($option['print_value']) ? $option['print_value'] : nl2br($this->escapeHtml($option['value']))) ?>
    <?php endforeach; ?>
    <?php endif; ?>
<?php endif; ?>

稍微解释一下:在 getProductOptions() 中有 2 个数组["info_buyRequest"]["options"]. 内["options"]有: ["label"], ["value"], ["print_value"], ["option_id"], ["option_type"], ["option_value"] and ["custom_view"]。我通过 获取此信息var_dump($options)

我希望这可以帮助任何与我有同样问题的人。

于 2012-12-26T15:37:09.090 回答