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

Вывод определенных атрибутов в корзине и в письмах (админу и клиенту) на OcStore 3.0.3.7


Перейти к решению Решений mpn2005,

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

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

OcStore 3.0.3.7

Шаблон unishop2. 

Готов оплатить труд, желательно модификатором сделать.

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

Из массива выбираются по ID, а где вам нужно выводить?

Дизайн, программирование, обновление и тех. поддержка Opencart, ocStore

Телеграм — @devagency

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

  • Решение

Можно сделать такой правкой в system/library/cart/cart.php

 

Перед строкой:

$product_data[] = array(

 

Добавляем:

$attribute_query = $this->db->query("SELECT pa.attribute_id, pa.text, ad.name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (pa.attribute_id = ad.attribute_id) WHERE pa.attribute_id IN (5, 6) AND pa.product_id = '" . (int)$product_query->row['product_id'] . "' AND pa.language_id = '" . (int)$this->config->get('config_language_id') . "' AND ad.language_id = '" . (int)$this->config->get('config_language_id') . "'");
foreach ($attribute_query->rows as $attribute) {
    $option_data[] = array(
        'product_option_id'       => 0,
        'product_option_value_id' => '',
        'option_id'               => 0,
        'option_value_id'         => '',
        'name'                    => $attribute['name'],
        'value'                   => $attribute['text'],
        'type'                    => 'attribute-' . $attribute['attribute_id'],
        'quantity'                => '',
        'subtract'                => '',
        'price'                   => '',
        'price_prefix'            => '',
        'points'                  => '',
        'points_prefix'           => '',
        'weight'                  => '',
        'weight_prefix'           => ''
    );
}

 

Вот тут перечисляем ID атрибутов для вывода

pa.attribute_id IN (5, 6)

 

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

16 часов назад, mpn2005 сказал:

Можно сделать такой правкой в system/library/cart/cart.php

 

Перед строкой:

$product_data[] = array(

 

Добавляем:

$attribute_query = $this->db->query("SELECT pa.attribute_id, pa.text, ad.name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (pa.attribute_id = ad.attribute_id) WHERE pa.attribute_id IN (5, 6) AND pa.product_id = '" . (int)$product_query->row['product_id'] . "' AND pa.language_id = '" . (int)$this->config->get('config_language_id') . "' AND ad.language_id = '" . (int)$this->config->get('config_language_id') . "'");
foreach ($attribute_query->rows as $attribute) {
    $option_data[] = array(
        'product_option_id'       => 0,
        'product_option_value_id' => '',
        'option_id'               => 0,
        'option_value_id'         => '',
        'name'                    => $attribute['name'],
        'value'                   => $attribute['text'],
        'type'                    => 'attribute-' . $attribute['attribute_id'],
        'quantity'                => '',
        'subtract'                => '',
        'price'                   => '',
        'price_prefix'            => '',
        'points'                  => '',
        'points_prefix'           => '',
        'weight'                  => '',
        'weight_prefix'           => ''
    );
}

 

Вот тут перечисляем ID атрибутов для вывода

pa.attribute_id IN (5, 6)

 

Спасибо, тут я сделал. А Как вывести во фронте в корзине теперь? Я так понимаю нужно в этом файле uni_cart.twig добавить что то, и в контроллере. Во вложении сменил расширение, twig не загружается тут.

Мне нужно тут вывести. И в письме о заказе клиенту и админу 

Спойлер

 

 

 

 

Изменено пользователем tirk
Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, tirk сказал:

Спасибо, тут я сделал. А Как вывести во фронте в корзине теперь? Я так понимаю нужно в этом файле uni_cart.twig добавить что то, и в контроллере. Во вложении сменил расширение, twig не загружается тут.

Если в выводимом месте выводит и опции, то они там и должны появиться после внесённой правки.

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

1 час назад, mpn2005 сказал:

Если в выводимом месте выводит и опции, то они там и должны появиться после внесённой правки.

Спасибо, получилось, ID не верный указывал просто.

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

  • 4 недели спустя...
В 16.08.2022 в 23:00, mpn2005 сказал:

Можно сделать такой правкой в system/library/cart/cart.php

А разве не проще?
в

/catalog/controller/checkout/cart.php

Подключить модель
$this->load->model('catalog/product');

А в массив
$data['products'][] = array(


добавить
'attribute_groups' => $this->model_catalog_product->getProductAttributes($product['product_id']),

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

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

А разве не проще?
в

/catalog/controller/checkout/cart.php

Нет. Не проще.

1) Нарушает общую архитектуру

2) Метод getProducts - не подходит для выборки товаров из корзины

3) Очень много лишних ненужных данных

4) Тянутся все атрибуты, а если их у каждого товара 50?

 

По всем факторам - проще одним запросом получить только нужные данные, чем лепить неуместную модель с очень большой избыточностью.

 

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

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

/catalog/controller/checkout/cart.php

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

И не пойдёт в таблицы заказ в админке. 

Придётся дублировать функционал, ещё в двух местах.

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

  • 1 год спустя...
В 16.08.2022 в 23:00, mpn2005 сказал:

Можно сделать такой правкой в system/library/cart/cart.php

 

Перед строкой:

$product_data[] = array(

 

Добавляем:

$attribute_query = $this->db->query("SELECT pa.attribute_id, pa.text, ad.name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (pa.attribute_id = ad.attribute_id) WHERE pa.attribute_id IN (5, 6) AND pa.product_id = '" . (int)$product_query->row['product_id'] . "' AND pa.language_id = '" . (int)$this->config->get('config_language_id') . "' AND ad.language_id = '" . (int)$this->config->get('config_language_id') . "'");
foreach ($attribute_query->rows as $attribute) {
    $option_data[] = array(
        'product_option_id'       => 0,
        'product_option_value_id' => '',
        'option_id'               => 0,
        'option_value_id'         => '',
        'name'                    => $attribute['name'],
        'value'                   => $attribute['text'],
        'type'                    => 'attribute-' . $attribute['attribute_id'],
        'quantity'                => '',
        'subtract'                => '',
        'price'                   => '',
        'price_prefix'            => '',
        'points'                  => '',
        'points_prefix'           => '',
        'weight'                  => '',
        'weight_prefix'           => ''
    );
}

 

Вот тут перечисляем ID атрибутов для вывода

pa.attribute_id IN (5, 6)

 

Спасибо, как раз искал подобное решение, все работает как часы!

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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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