Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

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

Link to comment
Share on other sites


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 файла (пустая).

Link to comment
Share on other sites


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)";            
            } .....

Link to comment
Share on other sites


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

 

Уже нашел расписанный запрос к базе данных в одной из найденных тем 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 вызов нужной функции.

Link to comment
Share on other sites


  • 2 weeks later...

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

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.