[Помогите] Сортировка товаров по цене в гривне

Тема в разделе "OpenCart", создана пользователем BETEP2063, 22 авг 2016.

  1. BETEP2063

    BETEP2063

    Регистрация:
    14 июл 2016
    Сообщения:
    5
    Симпатии:
    0
    Доброго времени суток! Подскажите пожалуйста как сделать сортировку товаров в категории по цене в гривне. Дело в том что сейчас сортирует по цене указанной в админке (например там не всегда указывалась цена в гривне, так же на некоторые товары цена стоит в евро или долларах) вот и получается что товары в евро самые дешевые так как сортирует по абсолютному значению например 350 евро выводит в конце списка самых дешевых товаров (хотя пользователь видит стоимость в гривне - 9 с копейками тысяч гривен) вот и получается что товар за 9 253 гривны дешевле товара за 5 000 гривен:

    //вот код в category.php

    $data['sorts'][] = array(
    'text' => $this->language->get('text_price_desc'),
    'value' => 'p.price-DESC',
    'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.price&order=DESC' . $url)
    );

    что бы пользователь видел цену в гривнах на товары а не в той валюте в которой указано в админке, я просто умножал цену на коэфициент курса в том же category.php:

    $result['price'] *= $result['price_coefficient'];

    я так понимаю для сортировки в гривне нужно сделать что-то подобное? Заранее благодарен за помощь!
     
  2. cereberlum

    cereberlum

    Регистрация:
    26 май 2013
    Сообщения:
    756
    Симпатии:
    269
    Что-то у меня каша какая-то в голове, это как вообще? Ну есть в опенкарте валюта по-умолчанию, допустим сначала это было евро(завели 10 товаров), потом стала гривна(завели еще 20), так цены из евро автоматом должны перевестись в гривны. Разве нет? Ну т.е. и то самое абсолтное значение сконвертироваться должно же, разве нет?поле для цены одно ведь и там валюта по-умолчанию.
     
  3. BETEP2063

    BETEP2063

    Регистрация:
    14 июл 2016
    Сообщения:
    5
    Симпатии:
    0
    Извините, я не совсем корректно сформулировал вопрос, я имел ввиду что price берет у меня с базы в том виде в котором его указали в админке - то есть если стоит цифра 250 (евро) то сортирует именно учитывая ее. А пользователь видит цену уже в гривне, для етого я в контроллере умножил значение цены на коэффициент текущей валюты:

    $result['price'] *= $result['price_coefficient'];

    вот и получается что 7 500 гр (250 евро) получаются дешевле по этой сортировке чем 2 000 гривен (так как 2000 нривен было указано в админке именно в гривне - вот оно и сравнивает 250 и 2000)....

    как бы решить проблему, не правя запрос?
     
  4. cereberlum

    cereberlum

    Регистрация:
    26 май 2013
    Сообщения:
    756
    Симпатии:
    269
    я что-то все-равно не могу понять, в базе поле price одно, так же как и поле "цена" в админке одно. В базе значение цены хранится без указания валюты. И так в базе один товар 250 (евро), а другой 2000 (гривен), но указания валюты нет и поле одно, тогда выходит что $result['price'] *= $result['price_coefficient']; должно умножать на коэффициент и 250 и 2000. По какому принципу сейчас определяется что умножать (евро), а что нет (гривны)?
     
  5. BETEP2063

    BETEP2063

    Регистрация:
    14 июл 2016
    Сообщения:
    5
    Симпатии:
    0
    Абсолютно верно, поле в бд одно. Но так же есть табличка "oc_currency" в которой указаны коефициенты для валют, по-этому умножает на коефициент валюты все: и гривны (просто для нее это 1, то есть 2000 умножает на 1) и евро (для него свой коефициент 28, умножает 250 {евро} на 28) и доллары (коефициент 25, умножает на 25).

    Я решил задачу отображения цены в гривне не зависимо от того в чем указана цена в админке на уровне контроллера:

    $results = $this->model_catalog_product->getProducts($filter_data);

    foreach ($results as $result) {
    if ($result['image']) {
    $image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
    } else {
    $image = $this->model_tool_image->resize('placeholder.png', $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
    }
    //recalculate price by cource
    $result['price'] *= $result['price_coefficient'];

    то есть метод getProducts($filter_data) кроме всего прочего возвращает мне и "price_coefficient" (коэфициент для каждой валюты) на который я и умножил значение "price"
    _____________________________________________
    а вот теперь как бы провернуть такой же фокус с сортировкой?
    так как сравнивает именно значение колонки "price" в которой как Вы правильно подметили абсолютное значение... и 250 {евро} выходить "дешевле" 2000 гривен

    Может в фильтрах что-то подправить?
    П.С. Спасибо, Вам, что пытаетесь помочь!
    --- Добавлено, 23 авг 2016 ---
    [​IMG]