如果产品在Opencart类别页面中有选项,请添加“从”开始

时间:2015-03-19 12:57:36

标签: php themes opencart

我需要在opencart的类别页面中显示

如果此产品有选项,则从€xx.xx开始。

这样的事情:

if (have options) {
    print starting at $price
} else {
    print $price }

category.tpl包含:

<p class="price">
<?php if (!$product['special']) { ?>
<?php echo $product['price']; ?>
<?php } else { ?>
<span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span>
<?php } ?>
<?php if ($product['tax']) { ?>
<span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span>
<?php } ?>

我需要插入另一个控制器,如果我们有选项显示“以€...开头”而不是价格。

谢谢大家, 的Davide

2 个答案:

答案 0 :(得分:2)

我需要在Opencart(v1.5.5.1)中为客户端提供类似的功能。以下代码检查是否存在且价格上涨的选项,如果是,则在类别页面上显示“来自价格”:

将以下功能添加到 \ catalog \ model \ catalog \ product.php

public function hasOptionPriceIncrease($product_id) {
  $option_data = $this->getProductOptions($product_id);
  if (is_array($option_data)) {
    foreach ($option_data as $option) {
      if (is_array($option['option_value'])) {
        foreach ($option['option_value'] as $value) {
          if ($value['price'] > 1) {
            return true;
          }
        }  
      }
    }
  }
  return false;
}
opencart中的

&gt; 2.0 使用product_option_value代替option_value

public function hasOptionPriceIncrease($product_id) {
  $option_data = $this->getProductOptions($product_id);
    if (is_array($product_option_value)) {
      foreach ($product_option_value as $option) {
      if (is_array($option['product_option_value'])) {
        foreach ($option['product_option_value'] as $value) {
          if ($value['price'] > 1) {
            return true;
          }
        }
      }
    }    
  }
  return false;
}

然后将以下行添加到类别控制器中的$this->data['products'][]数组:\ controller \ product \ category.php

      'has_option_price_increase' =>$this->model_catalog_product->hasOptionPriceIncrease($result['product_id'])

这是我的第250行,但你可能会有点不同:

$this->data['products'][] = array(
  'product_id'  => $result['product_id'],
  'thumb'       => $image,
  'name'        => $result['name'],
  'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',
  'price'       => $price,
  'special'     => $special,
  'tax'         => $tax,
  'rating'      => $result['rating'],
  'reviews'     => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
  'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url),
  'has_option_price_increase' =>$this->model_catalog_product->hasOptionPriceIncrease($result['product_id'])
);

不要忘记在前一行的末尾添加逗号。

然后,您可以在视图中添加类似于以下内容的内容: \ catalog \ view \ theme \ duvalay \ template \ product \ category.tpl

<p class="price">
 <?php if ($product['has_option_price_increase']) { echo 'From'; } ?>    

答案 1 :(得分:0)

jx12345发布的解决方案非常有用,但是,我花了大部分时间试图弄清楚为什么它没有在OC v2.0.3.1上工作并且发现解决方案只是一个更改原始数组检查变量的问题。他有原始变量

$option_data 

需要更改为

$product_option_value

因此,添加到模型文件的最终代码如下所示:

public function hasOptionPriceIncrease($product_id) {
  $product_option_value = $this->getProductOptions($product_id);
    if (is_array($product_option_value)) {
     foreach ($product_option_value as $option) {
      if (is_array($option['product_option_value'])) {
       foreach ($option['product_option_value'] as $value) {
         if ($value['price'] > 1) {
           return true;
         }
       }
     }
   }    
 }
return false;
}

至少这是让代码为我工作所必需的。

感谢jx12345的贡献!