Вывод category_id в latest

Тема в разделе "Общие вопросы", создана пользователем evgenyk, 8 фев 2023.

  1. evgenyk

    evgenyk Новичок

    Сообщения:
    6
    Симпатии:
    0
    Всем привет, я новичок в теме опенкарта и просьба если что не злиться за глупости возможные с моей стороны.
    Я разобрался с выводом category_id в контроллерах category и product, но у меня на главной странице есть блок latest, как я понял он везде одинаковый. Попытался добавить в файл контроллера latest.php так же как и в category в строке "$data['products'][] = array(" добавил - $data['this_id'] = $category_id, но вывода нет, подскажите пожалуйста что нужно добавить, как выцепить этот $category_id , перед созданием вопроса хорошо порылся в интернете и не нашел ответа

    Версия ocStore 3.0.3.7
     
  2. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Вы бы код прислали контроллера и вьюхи
     
    evgenyk нравится это.
  3. evgenyk

    evgenyk Новичок

    Сообщения:
    6
    Симпатии:
    0
    А вьюха это twig файл?
    Вот контроллер, извините если длинно, не нашел как делать спойлер
    /catalog/controller/extension/module/latest.php
    <?php
    class ControllerExtensionModuleLatest extends Controller {
    public function index($setting) {
    $this->load->language('extension/module/latest');

    $this->load->model('catalog/product');

    $this->load->model('tool/image');

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

    $results = $this->model_catalog_product->getLatestProducts($setting['limit']);

    if ($results) {
    foreach ($results as $result) {
    if ($result['image']) {
    $image = $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height']);
    } else {
    $image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['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 (!is_null($result['special']) && (float)$result['special'] >= 0) {
    $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
    $tax_price = (float)$result['special'];
    } else {
    $special = false;
    $tax_price = (float)$result['price'];
    }

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

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

    $data['products'][] = array(
    'product_id' => $result['product_id'],
    'thumb' => $image,
    'name' => $result['name'],
    'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
    'price' => $price,
    'special' => $special,
    'tax' => $tax,
    'rating' => $rating,
    'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'])
    );
    }

    return $this->load->view('extension/module/latest', $data);
    }
    }
    }
     
  4. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Вьюха это твиг.

    Ну сейчас у вас в дата - $data['products'][] = array( там нет данных о категориях. Собственно, нужо подтягивать категории товаров. Единственно, учтите, что у товаров несколько категорий может быть.
     
    evgenyk нравится это.
  5. evgenyk

    evgenyk Новичок

    Сообщения:
    6
    Симпатии:
    0
    у меня только одна категория везде, это не страшно
    ну вот я в массив передаю, но ничего нет, я вам отправил чистый контроллер без моих изменений, я подразумеваю что $category_id надо как-то получить в контроллере этом, но увы не понимаю как
    $data['products'][] = array(
    $data['this_id'] = $category_id, --- это передаю
    'product_id' => $result['product_id'],
    'thumb' => $image,
    'name' => $result['name'],
    ...
     
  6. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Ну вы можете сделать так (навскидку):

    Код:
    $temp_cat = $this->model_catalog_product->getCategories($result['product_id']);
    
    $data['products'][] = array(
    'this_id' => ( !empty($temp_cat) ? $temp_cat[0]['category_id'] : 0 ), // это передаёте
    'product_id' => $result['product_id'],
    

    В таком случае у каждого product будет отображаться первая категория из загруженных
     
    evgenyk нравится это.
  7. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Подкорректировал сообщение выше (навскидку же пишу)))
     
    evgenyk нравится это.
  8. evgenyk

    evgenyk Новичок

    Сообщения:
    6
    Симпатии:
    0
    оооо как здорово, все выводится, спасибо большущее, а не подскажите где можно почитать о этом? не нашел информации по моделям, я хоть и слабоват но в базе разобраться могу, возможно документациях о моделях мне бы помогла)
    в вьюхе(твиге) выводится через - {{ product.this_id }}
     
  9. optimlab

    optimlab Продвинутый пользователь

    Сообщения:
    924
    Симпатии:
    240
  10. evgenyk

    evgenyk Новичок

    Сообщения:
    6
    Симпатии:
    0
    спасибо
    я не говоорил что меня не устраивает документация, попросил по возможности ссылку дать на нее, если бы я ее нашел то возможно получилось разобраться самому, просто не получилось у меня найти её.
     
  11. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Пожалуйста. Помните, что если кто-то вам помог, то неплохо бы нажать кнопку "Мне нравится" чуть ниже сообщения. Это помогает авторам. Тут как с лайками)))

    Вам нужно почитать про то, как устроен опенкарт, бесцельно смотреть отдельные модели немного смысла, особенно учитывая, что в опенкарте существует ocmod (модификаторы). Попробуйте поискать, например, "Как создать модуль опенкарт", хотя бы логику начнёте немного понимать, а там проще будет.
     
    evgenyk нравится это.
  12. evgenyk

    evgenyk Новичок

    Сообщения:
    6
    Симпатии:
    0
    Спасибо за совет, задачку вроде как простую хотел быстро решить и отвалился на 2 часа), понимаю что ковыряться в одном месте толку немного - обязательно буду разбираться
     
  13. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Пожалуйста. Первое время у всех так, а потом когда вьезжаешь в тему, то становится существенно проще.