Перейти к содержанию
yourmaze

Не выводить товары в категории не имеющие изображений

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

Здравствуйте, уважаемые форумчане!

Стоит задача: не выводить в категории товары у которых нет изображений. Простое добавление условия в контроллере или в отображении не подходит, так как этот метод getTotalProducts() считает количество товаров с изображениями и без, в связи с этим при пагинации могут быть пустые страницы. Да и просто не правильно подобные вещи не в модели делать. Но отсюда вытекает проблема: у меня плохо с построением sql запросов(тем более модели opencart это что-то). Не могу разобраться куда что добавить.

 

Поиск по форумам дал несколько подобных тем, но ни в одной решения я не нашел.

 

Буду очень благодарен за помощь)

Поделиться сообщением


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

Я надеюсь Вы не сильно покалечили файлы контроллера и модели? )))

Поделиться сообщением


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

В общем там где у Вас создается массив в контроллере категории

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

До 

$data['products'][] = array(

Написать следующее
 

if (!empty ($image)) {

И после 

);

Поставить 

}

 

Поделиться сообщением


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

Чтобы не изменять файлы контроллера лучше написать модификатор.

Могу сделать.

Поделиться сообщением


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

добавить в модель условие
 

Цитата

AND p.image != ''

 

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, thentru сказал:

добавить в модель условие
 

 

Зачем лезть в модель? А если гдето еще она будет использоваться, тогда что?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, legioner26 сказал:

Зачем лезть в модель? А если гдето еще она будет использоваться, тогда что?

Логично, что если товар скрывается на витрине, то и в любых других местах его не должно быть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, thentru сказал:

Логично, что если товар скрывается на витрине, то и в любых других местах его не должно быть

Ну а если все-таки он нужен будет в каких то решениях, я вот об этом. То что в моделе прописать условие это понятно. Но есть конкретная задача, и для нее есть свой контроллер. Если менять все в моделе всегда то выйдет каламбур.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, legioner26 сказал:

Ну а если все-таки он нужен будет в каких то решениях, я вот об этом. То что в моделе прописать условие это понятно. Но есть конкретная задача, и для нее есть свой контроллер. Если менять все в моделе всегда то выйдет каламбур.

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

В данном вот случае ваше решение будет актуальным ? :)

В контроллере если делать, то можно доп условие задать, к примеру кроме этой категории.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, legioner26 сказал:

Ну а если все-таки он нужен будет в каких то решениях, я вот об этом. То что в моделе прописать условие это понятно. Но есть конкретная задача, и для нее есть свой контроллер. Если менять все в моделе всегда то выйдет каламбур.

 

В модели самое правильное решение, т.к. в случае правки контроллера придется отнимать от product_total товары без картинок, а так добавил условие и туда и туда и все в порядке, при этом при заходе напрямую товар будет работать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, legioner26 сказал:

В данном вот случае ваше решение будет актуальным ? :)

В такой задаче добавить проверку на логин админа

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, spectre сказал:

 

В модели самое правильное решение, т.к. в случае правки контроллера придется отнимать от product_total товары без картинок, а так добавил условие и туда и туда и все в порядке, при этом при заходе напрямую товар будет работать

Ну не знаю, модель если трогать, то трогать в крайних случаях. Лучше с контроллером поработать. А product_total да, надо отнимать разницу.

Поделиться сообщением


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

Ладно пойду чайку попью :) Всем спасибо за деббаты ))))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, legioner26 сказал:

Зачем лезть в модель? А если гдето еще она будет использоваться, тогда что?

 

Ответ

3 часа назад, yourmaze сказал:

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
17 hours ago, legioner26 said:

В общем там где у Вас создается массив в контроллере категории


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

До 


$data['products'][] = array(

Написать следующее
 


if (!empty ($image)) {

И после 


);

Поставить 


}

 

 

Спасибо за ответы, но указанный метод не поможет, так как

14 hours ago, Tom said:

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

 

В связи с этим принял решение, что лучше изменять модель, так как проект писался с нуля и модулей использующих эту модель как-то необычно нет. Везде, где используется метод получения товаров из категории требуется фильтрация товаров без изображения. Я понимаю, что "по-феншую" нужно создать новый метод, где я поменяю то что мне нужно и буду вызывать его в нужных мне контроллерах) Но это решение временное и проект я веду, так что когда будет нужно верну все назад)

 

17 hours ago, thentru said:

добавить в модель условие
 

 

Да, до этого я дойти смог) Но не понял где добавлять. Добавлял везде, но метод начал возвращать просто пустые ячейки с id товарами. Моэете уточнить, куда именно мне дописать это условие?

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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