Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Opencart 1.5.4.1. - вывод в model последних товаров определенной категории


Recommended Posts

Добрый день!

 

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

ID категории известен, и его не надо нигде прописывать в админке - достаточно указать тут в модели (главное - просто и работает).

 

В модуле и контроллере модуля уже дал запрос на getLatestCategory (сейчас - это просто копипаста getLatestProducts). Сейчас показывает последние товары, как обычно.

 

Понимаю, что дописывать нужно тут, но синтаксисом не так сильно владею:

catalog/model/catalog/product.php

 

public function getLatestCategory($limit) {
        if ($this->customer->isLogged()) {
            $customer_group_id = $this->customer->getCustomerGroupId();
        } else {
            $customer_group_id = $this->config->get('config_customer_group_id');
        }    
                
        $product_data = $this->cache->get('product.latest.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $customer_group_id . '.' . (int)$limit);
// чуйка тянет дописать после config_store_id по аналогии фильтр по ID категории, но проводимые попытки вызывали только ошибки.

        if (!$product_data) {
            $query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$limit);
// Тут тоже прописывал AND перед ORDER BY и по аналогии и пытался сделать выборку по ID категории. Ничего толкового из этого не вышло :(


            // вырванные куски, где тоже идет вывод товаров категории.
            // $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");
                //    $sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
 

Прикреплен файл. Кусок, о котором идет речь - 317 строка.

 

Заранее большое спасибо!

product.php

Надіслати
Поділитися на інших сайтах


UDP: в контроллере модуля идет как обычно запрос на модель:

 

$bestseller_results = $this->model_catalog_product->getLatestCategory($setting['limit']);

 

Если в модели прописать категорию (код смотрите выше, выделено зеленым что добавил):

 

        $product_data = $this->cache->get('product.latest.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $category_id = '75' . '.' . $customer_group_id . '.' . (int)$limit);

 

.., выходит ответ ошибки VQMODa про парсер:

 

Parse error: syntax error, unexpected $end in /*путь*/vqmod/vqcache/vq2-catalog_model_catalog_product.php on line 174

 

 

174 строка в кэшовом файле - это последняя строка PHP файла (пустая).

Надіслати
Поділитися на інших сайтах


UDP2: ещё одна неудачная попытка. Указываю, на мой взгляд, более правильный синтаксис в модели (отмечено зеленым):

 

$product_data = $this->cache->get('product.latest.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $category_id('75') . '.' . $customer_group_id . '.' . (int)$limit);

 

И получаю уже другие ответы от системы:

 

Notice: Undefined variable: category_id in /*путь*/vqmod/vqcache/vq2-catalog_model_catalog_product.php on line 367
Fatal error: Function name must be a string in /*путь*/vqmod/vqcache/vq2-catalog_model_catalog_product.php on line 367

 

Открыл файл кэша, строку 367 (выделил синим):

 

public function getProducts($data = array()) {
        if ($data) {
            $sql = "SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)";
            
            if (!empty($data['filter_category_id'])) {
                $sql .= " LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)";            
            } .....

Надіслати
Поділитися на інших сайтах


Никак не могу самостоятельно решить вопрос :(

 

Уже нашел расписанный запрос к базе данных в одной из найденных тем https://opencartforum.com/topic/2103-%d0%ba%d0%b0%d0%ba-%d1%81%d0%be%d1%81%d1%82%d0%b0%d0%b2%d0%b8%d1%82%d1%8c-mysql-%d0%b7%d0%b0%d0%bf%d1%80%d0%be%d1%81-%d0%b4%d0%bb%d1%8f-%d0%b2%d1%8b%d0%b1%d0%be%d1%80%d0%b0/page__view__findpost__p__12790

 

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

По сути сейчас:

» модуль - работает, товары показывает последние, но просто со всех категорий.

» контроллер модуля - посылает свой запрос в модель на предмет показа товаров.

Осталось дело за тем, чтобы прописать в catalog/model/catalog/product.php вызов нужной функции.

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

Скажите пожалуйста, правильный ли это вообще подход - просить на уровне модели дать сортировку категории? Может надо править код в другом месте?

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.