Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

vier
 Поделиться

Рекомендованные сообщения

Здравствуйте. У меня на сайте 2-е цены.

Как мне это подружить с фильтром

<file path="catalog/controller/product/category.php">

<operation error="skip">
<search><![CDATA[$price,]]></search>
			<add position="after"><![CDATA['price_2'       => $price_2,]]></add>
		</operation>
		
		<operation error="skip">
<search><![CDATA[$price = false;]]></search>
			<add position="after" offset="1"><![CDATA[if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
					$price_2 = $this->currency->format($this->tax->calculate($result['price_2'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
				} else {
					$price_2 = false;
				}]]></add>
		</operation>
		
		</file>

Спасибо.

Ссылка на комментарий
Поделиться на других сайтах


19 минут назад, yurabr сказал:

Здравствуйте. У меня на сайте 2-е цены.

Как мне это подружить с фильтром

если у Вас в таблице по продуктам `product` есть данное поле - `price_2`, то модуль ее выведет в контроллере категорий.

и если модификатор составлен правильно, то должна изменяться цена в товарах на странице категорий при описанных условиях.

а вообще, чтоб не городить велосипед, может надо было пойти стандартными методами Opencart - через скидки, или может акции.

Ссылка на комментарий
Поделиться на других сайтах

53 минуты назад, vier сказал:

если у Вас в таблице по продуктам `product` есть данное поле - `price_2`, то модуль ее выведет в контроллере категорий.

и если модификатор составлен правильно, то должна изменяться цена в товарах на странице категорий при описанных условиях.

а вообще, чтоб не городить велосипед, может надо было пойти стандартными методами Opencart - через скидки, или может акции.

У меня в oc_product_discount колонка price_2.

В скидках забиваются две цены и потом выводятся на сайт. У меня это уже давно так.

Из Осмод удалил код, что выше, и на прямую залил в контроллер, вышло так:

Спойлер

            foreach ($results as $result) {
                if ($result['image']) {
                    $image = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
                } else {
                    $image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
                }

                if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
                    $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
                } else {
                    $price = false;
                }
                
                if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
                    $price_2 = $this->currency->format($this->tax->calculate($result['price_2'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
                } else {
                    $price_2 = false;
                }

                if ((float)$result['special']) {
                    $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
                } else {
                    $special = false;
                }

                if ($this->config->get('config_tax')) {
                    $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
                } else {
                    $tax = false;
                }

                if ($this->config->get('config_review_status')) {
                    $rating = (int)$result['rating'];
                } else {
                    $rating = false;
                }

                $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, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..',
                    'price'       => $price,
                    'price_2'       => $price_2,
                    'special'     => $special,
                    'tax'         => $tax,
                    'minimum'     => ($result['minimum'] > 0) ? $result['minimum'] : 1,
                    'rating'      => $rating,
                    'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
                );
            }

Потом устанавливаю фильтр и вот как это теперь выглядит в public_shtml/system/storage/modification/catalog/controller/product/category.php

Спойлер

            foreach ($results as $result) {
                if ($result['image']) {
                    $image = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
                } else {
                    $image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'));
                }

                if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
                    $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);

        if ($this->currency->has($this->config->get('config_currency2')) && ($this->config->get('config_currency2') != $this->session->data['currency'])) {
            $price .= ' (' . $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->config->get('config_currency2')) . ')';
        }
      
                } else {
                    $price = false;
                }
                
                if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
                    $price_2 = $this->currency->format($this->tax->calculate($result['price_2'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
                } else {
                    $price_2 = false;
                }

                if ((float)$result['special']) {
                    $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);

        if ($this->currency->has($this->config->get('config_currency2')) && ($this->config->get('config_currency2') != $this->session->data['currency'])) {
            $special .= ' (' . $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->config->get('config_currency2')) . ')';
        }
      
                } else {
                    $special = false;
                }

                if ($this->config->get('config_tax')) {
                    $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
                } else {
                    $tax = false;
                }

                if ($this->config->get('config_review_status')) {
                    $rating = (int)$result['rating'];
                } else {
                    $rating = false;
                }


                    $imgadd = $this->model_catalog_product->getProductImages($result['product_id']);
                    $img2 = array();
                    foreach ($imgadd as $imgi) {
                        $img2[] = array(
                        'thumb' => $this->model_tool_image->resize($imgi['image'], $this->config->get($this->config->get('config_theme') . '_image_product_width'), $this->config->get($this->config->get('config_theme') . '_image_product_height'))
                        );
                    }
      
                $data['products'][] = array(

                    'dateadded'  => $result['date_added'],
                    'viewed'     => $result['viewed'],
                    'rating'     => $result['rating'],
                    'stickers'   => $result['mpn'],    
                    'quantity'   => $result['quantity'],
                    'price_sticker'        => $result['price'],
                    'special_sticker'      => (isset($result['special']) ? $result['special'] : false),    
                    'images' => $img2,
                    'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']),                        
      
                    '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, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..',
                    'price'       => $price,
                    'price_2'       => $price_2,
                    'special'     => $special,
                    'tax'         => $tax,
                    'minimum'     => ($result['minimum'] > 0) ? $result['minimum'] : 1,
                    'rating'      => $rating,
                    'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
                );
            }

Теперь не работает.

В тпл выводилось <span class="common-price"><?php echo $product['price']; ?></span><span class="common-price"><?php echo $product['price_2']; ?></span>

P.S. На другом сайте с фильтрпро все дружит, хотелось бы и тут...

Я не знаю, как правильно - ломать всю настроенную давно логику работы компании под фильтр или же наоборот

P.P.S. Мне фильтрация по цене вообще не нужна

Изменено пользователем yurabr
Ссылка на комментарий
Поделиться на других сайтах


14 минут назад, yurabr сказал:

У меня в oc_product_discount колонка price_2

колонка price_2  - это нестандартная колонка, и соответственно модуль-фильтр не знает о ее существовании и не подключает ее.

обрабатываете ее в контроллере, присвоив $product['price'] данные по условию, и выводите в tpl-файле одну переменную - $product['price'] (зачем еще в tpl-файле делать еще одну обработку - цените время Вашего сайта).

 

PS

я в своем продукте использую собственные оптимизированные запросы к БД.

Ссылка на комментарий
Поделиться на других сайтах

5 минут назад, vier сказал:

колонка price_2  - это нестандартная колонка, и соответственно модуль-фильтр не знает о ее существовании и не подключает ее.

обрабатываете ее в контроллере, присвоив $product['price'] данные по условию, и выводите в tpl-файле одну переменную - $product['price'] (зачем еще в tpl-файле делать еще одну обработку - цените время Вашего сайта).

 

PS

я в своем продукте использую собственные оптимизированные запросы к БД.

Таак. Это разговор слепого с немым. Я не крутой программист. Мне нужно вывести price_2 в категории, без фильтра оно выводится, с фильтром - нет.

Подскажите, пожалуйста, что мне дописать (удалить, отключить), чтобы все работало. Тем более, что я действительно фильтрацию по цене не использую.

Ссылка на комментарий
Поделиться на других сайтах


3 минуты назад, yurabr сказал:

Подскажите, пожалуйста, что мне дописать (удалить, отключить), чтобы все работало.

это что-то подобное надо сделать на Ваше условие в foreach

$price_2 = false;
if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
    $result['price_2'] = $this->db->query("SELECT `price_2` FROM `".DB_PREFIX."product_discount` WHERE `product_id` = ".(int)$result['product_id']." AND `customer_group_id` = ".(int)$this->config->get('config_customer_group_id')." AND `quantity` = 1 AND ((`date_start` = '0000-00-00' OR `date_start` < NOW()) AND (`date_end` = '0000-00-00' OR `date_end` > NOW())) ORDER BY `priority` ASC, `price_2` ASC LIMIT 1")->row['price_2'];
    if($result['price_2']) {
        $price_2 = $this->currency->format($this->tax->calculate($result['price_2'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
    }
}

код не проверялся, так что внимательно его просмотрите.

 

Ссылка на комментарий
Поделиться на других сайтах

8 минут назад, vier сказал:

это что-то подобное надо сделать на Ваше условие в foreach

$price_2 = false;
if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
    $result['price_2'] = $this->db->query("SELECT `price_2` FROM `".DB_PREFIX."product_discount` WHERE `product_id` = ".(int)$result['product_id']." AND `customer_group_id` = ".(int)$this->config->get('config_customer_group_id')." AND `quantity` = 1 AND ((`date_start` = '0000-00-00' OR `date_start` < NOW()) AND (`date_end` = '0000-00-00' OR `date_end` > NOW())) ORDER BY `priority` ASC, `price_2` ASC LIMIT 1")->row['price_2'];
    if($result['price_2']) {
        $price_2 = $this->currency->format($this->tax->calculate($result['price_2'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
    }
}

код не проверялся, так что внимательно его просмотрите.

 

Большое спасибо. То, что нужно.

Ссылка на комментарий
Поделиться на других сайтах


8 минут назад, yurabr сказал:

Большое спасибо. То, что нужно.

пожалуйста.

всё решаемо )

Ссылка на комментарий
Поделиться на других сайтах

Здравствуйте!

Установил фильтр, сделал, как смог, базовые настройки но фильтр не выводится(

На сколько я понял он должен был автоматически вывестись на страницах катерогий, но он не вывелся.

Пробовал вывести его на других страницах с помощью  подключения к макетам, но результата тоже не было.

Ссылка на комментарий
Поделиться на других сайтах


1 минуту назад, sset сказал:

Здравствуйте!

Установил фильтр, сделал, как смог, базовые настройки но фильтр не выводится(

На сколько я понял он должен был автоматически вывестись на страницах катерогий, но он не вывелся.

Пробовал вывести его на других страницах с помощью  подключения к макетам, но результата тоже не было.

Возможно это связано с тем, что устанавливал фильтр когда у меня было одно доменное имя а активировал и настраивал, когда уже я сменил доменное имя?

Ссылка на комментарий
Поделиться на других сайтах


4 минуты назад, sset сказал:

Возможно это связано с тем, что устанавливал фильтр когда у меня было одно доменное имя а активировал и настраивал, когда уже я сменил доменное имя?

- возможно.

так же надо было при смене домена пересохранить все вкладки модуля, чтоб настройки на новом обновились и кеш сбросился в модуле (если включали).

Ссылка на комментарий
Поделиться на других сайтах

6 минут назад, sset сказал:

Возможно это связано с тем, что устанавливал фильтр когда у меня было одно доменное имя а активировал и настраивал, когда уже я сменил доменное имя?

Только что еще раз попробовал привязать в макетах к категориям и получилось!

вопрос снят!

Ссылка на комментарий
Поделиться на других сайтах


Все таки у меня есть проблема:

При выборе в фильтре параметра, сам фильтр реагирует а вот товары не меняются.

http://www.triplanki.com/index.php?route=product/category&amp;path=59&amp;manufs[1]=34

Ссылка на комментарий
Поделиться на других сайтах


3 минуты назад, sset сказал:

Все таки у меня есть проблема:

При выборе в фильтре параметра, сам фильтр реагирует а вот товары не меняются.

это не проблема.

Вы модификатор модуля установили? - потом обновили все модификаторы - стандартная процедура.

Ссылка на комментарий
Поделиться на других сайтах

18 минут назад, vier сказал:

это не проблема.

Вы модификатор модуля установили? - потом обновили все модификаторы - стандартная процедура.

да, сделал... 

 

Ссылка на комментарий
Поделиться на других сайтах


26 минут назад, vier сказал:

это не проблема.

Вы модификатор модуля установили? - потом обновили все модификаторы - стандартная процедура.

Сдедал все еще раз и все работает!

Спасибо за помощь!!! 

Ссылка на комментарий
Поделиться на других сайтах


6 минут назад, sset сказал:

да, сделал... 

и где Вы его загрузили? - закладка Модификаторов же была пуста.

если не знаете, как пользоваться базовыми настройками Opencart`а, то обратитесь к специалистам.

Ссылка на комментарий
Поделиться на других сайтах

3 минуты назад, vier сказал:

и где Вы его загрузили? - закладка Модификаторов же была пуста.

если не знаете, как пользоваться базовыми настройками Opencart`а, то обратитесь к специалистам.

Мои действия

за 10.11.18:

1. В разделе "установка расширений" я загрузил нужный файл.

2. В разделе "модификаторы" я нажал кнопку обновить. По чему закладка модификаторов была пустая - я не знаю(

сегодня 12.11.18

Повторив все действия: 1,2. Но, уже раздел модификаторов был не пустой. 

 

 

Ссылка на комментарий
Поделиться на других сайтах


я писал о вкладке Модификаторов, а не о Установке расширений. -

19 минут назад, vier сказал:

и где Вы его загрузили? - закладка Модификаторов же была пуста.

но если вопрос исчерпан, дискуссию прекращаем. - времени на это нет.

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

@vier Недавно пришлось заглянуть в код модели вашего фильтра "catalog/model/module/filter_vier.php" (уже прогнанный через prettifier) и код откровенно говоря ужасен.
Код обычно пишется для людей, а не для себя. Пожалуйста поинтересуйтесь темами code style/refactoring. А то это просто жопа...
Удачи!

 

Изменено пользователем kagan
Ссылка на комментарий
Поделиться на других сайтах

2 минуты назад, kagan сказал:

Недавно пришлось заглянуть в код модели вашего фильтра "catalog/model/module/filter_vier.php" (уже прогнанный через prettifier) и код откровенно говоря ужасен.

Вы наверно не по адресу пишите. Код зашифрован - как Вы его могли посмотреть?

Ссылка на комментарий
Поделиться на других сайтах

@kagan  - еще один претендент на использование пиратской версией модуля.

 

 

Ссылка на комментарий
Поделиться на других сайтах

19 hours ago, vier said:

Вы наверно не по адресу пишите. Код зашифрован - как Вы его могли посмотреть?

 

19 hours ago, vier said:

@kagan  - еще один претендент на использование пиратской версией модуля.

Вам скинуть исходник?
Даже если кто-то и ставил пиратскую версию вашего модуля (я не в курсе, не я владелец того сайата где я вносил правки), зачем менять контент файла?
Я все-таки склонен к тому, что ничего не менялось..

Изменено пользователем kagan
Ссылка на комментарий
Поделиться на других сайтах

1 минуту назад, kagan сказал:

Вам скинуть исходник?

а зачем мне исходник, - я и так их знаю.
если используете пиратскую версию, или ту версию модуля, которая еще не была под ionCube, то тогда к чему эта дискуссия.

а код в модуле я пишу под себя (не для первоклассников), и он оптимизированный, дабы чтоб в целом модуль работать оперативно на сайте клиента.

Ссылка на комментарий
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.