2011-01-11 5 views
4

Мне нужно отображать некоторые продукты по-разному в зависимости от их цены. Я надеялся, что могу просто проверить значение переменной $price из соответствующих файлов темы, но $price содержит строку с отформатированной в валюте. И поскольку OpenCart поддерживает различные форматы валют, нет простого и надежного способа преобразования строк цены обратно в числа.Разработка темы OpenCart: цена как номер?

Я просмотрел класс контроллера продукта, ControllerProductProduct. Насколько я могу судить, OpenCart не отображает числовые значения цены для просмотров. Я мог бы изменить класс контроллера, но я предпочел бы не потому, что это усложняло бы обновления.

Я что-то пропустил? Нет ли простого способа выполнить числовое сравнение по цене в рамках темы OpenCart?

ответ

0

К сожалению, ответа нет, OpenCart не выставляет числовые значения цен на темы. Вам придется изменить основные файлы, которые Brad explains how to do.

+2

Если Брэд объясняет, как это решить, я бы выбрал * его * ответ. :-) –

+0

Я слышал, что вы говорите, поэтому я упомянул его ответ, но мой вопрос специально исключает изменение системных файлов. Как только вы сделаете хоть малейшую модификацию, вы больше не сможете выполнять слепые обновления. Вы должны вручную объединить каждую новую версию OpenCart с вашей пользовательской версией. Вы также не можете распространять свою тему как самостоятельный пакет. Это боль, которую я действительно хотел избежать! – Metaphile

+2

@Metaphile: vQmod был создан именно по этой причине. Также возможно получить значение цены в шаблоне без изменений. Вы можете использовать переменную '$ product_info' –

7

Глядя на v1.4.9.4 в product.php (ControllerProductProduct) я могу увидеть следующий код, который задает форматированное значение $ цене, что вы говорите:

if ($discount) { 
    $price = $this->currency->format($this->tax->calculate($discount, $result['tax_class_id'], $this->config->get('config_tax'))); 
} else { 
    $price = $this->currency->format($this->tax->calculate($result['price'],$result['tax_class_id'], $this->config->get('config_tax'))); 

Почему не изменить это будет следующее ...

if ($discount) { 
    $price_num = $this->tax->calculate($discount, $result['tax_class_id'], $this->config->get('config_tax')); 
    $price = $this->currency->format($price_num); 
} else { 
    $price_num = $this->tax->calculate($result['price'],$result['tax_class_id'], $this->config->get('config_tax')); 
    $price = $this->currency->format($price_num); 

А потом несколько строк вниз от этого, вы можете передать это значение $ price_num в шаблон, добавив следующее:

$this->data['products'][] = array(
    'product_id' => $result['product_id'], 
    ... 
    'price'   => $price, 
    'price_num'  => $price_num, 
    ... 

Если делать то, что вам нужно

Смежные вопросы