Вывод переменной из БД в карточку товара

Тема в разделе "Общие вопросы", создана пользователем Suhar, 2 сен 2025.

  1. Suhar

    Suhar Новичок

    Сообщения:
    3
    Симпатии:
    0
    Добрый день!
    opencart 3.0.3.7
    задача на странице товара выводить три вида кнопки покупки.
    1. Кнопка Купить показывается только когда товара больше чем 0.
    2. Кнопка нет в наличии когда товара 0 или меньше.
    3. Кнопка Предзаказ появляется когда товара 0 и в статусе товара стоит Предзаказ. В базе данных oc_product есть столбец stock_status_id. Появляется цифра 8 у товара когда я ставлю статус Предзаказ.
    Основная проблема в том, что при добавлении на страницу переменной stock_status_id == 8 не видит значение stock_status_id. Не могу понять как сделать так, чтоб шаблон видел эту переменную из базы дынных.

    В model/catalog/product.php добавлял
    public function getProduct($product_id) { $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, p.stock_status_id........

    В catalog/controller/product/product.php добавлял
    $data['stock_status_id'] = $product_info['stock_status_id'];

    Далее добавляю в catalog/view/theme/default/template/product/product.twig

    <div style="background:#ffecec;padding:10px;margin:10px 0;">
    <strong>Отладка:</strong><br/>
    stock_status_id = {{ stock_status_id }}<br/>
    quantity = {{ quantity }}<br/>
    {% if quantity > 0 %}
    Статус: В наличии
    {% elseif stock_status_id == 8 %}
    Статус: Предзаказ
    {% else %}
    Статус: Нет в наличии
    {% endif %}
    </div>

    В итоге на странице товара выводится

    Отладка:
    stock_status_id =
    quantity = 0
    Статус: Нет в наличии

    Подскажите пожалуйста, что я делаю не так?
     
    Последнее редактирование: 2 сен 2025
  2. Tom

    Tom Специалист

    Сообщения:
    1.047
    Симпатии:
    373
    видимо так
    Код:
    $data['stock_status_id'] = $product_info['stock_status_id'];
    
     
  3. Suhar

    Suhar Новичок

    Сообщения:
    3
    Симпатии:
    0
    Да это я скопировал из других попыток вывести переменную. Так как вы написали я делал в первую очередь. К сожалению это не работает.
     
  4. Tom

    Tom Специалист

    Сообщения:
    1.047
    Симпатии:
    373
    Сделайте в контроллере после
    $product_info = $this->model_catalog_product->getProduct($product_id);
    такой вывод для отладки:
    Код:
    echo '<pre>'; print_r($product_info); echo '</pre>'; exit;
    и смотрите есть ли данные stock_status_id
     
    Последнее редактирование: 2 сен 2025
  5. Blast

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

    Сообщения:
    266
    Симпатии:
    92
    модификаторы обновляли?
     
    Tesloz нравится это.
  6. vrndorog

    vrndorog Пользователь

    Сообщения:
    36
    Симпатии:
    5
    Не забыли ли Вы внести изменения в возращаеммый функцией getProduct массив? Там должно быть 'stock_status_id' => $query->row['stock_status_id'].

    Может быть, Вам лучше подойдет следующее решение:
    В представление передается переменная {{ stock }}. Если количество товара 0 или меньше, эта перемепенная равна stock_status. Соответственно в twig может быть следующее:
    Код:
    {% if quantity > 0 %}
       {% set text = "Купить" %}
     {% else %}
        {% set text = stock %}
    {% endif %}
    
    "Нет в наличии" - тоже должно быть статусом склада.
     
    Последнее редактирование: 2 сен 2025
  7. Suhar

    Suhar Новичок

    Сообщения:
    3
    Симпатии:
    0
    Да именно это я и забыл добавить. Спасибо!
    Попробую.
    Всем спасибо за помощь!