Tobolskiy Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 Всем привет! Подскажите пожалуйста, на странице товара есть опции, они все зависимы на "вычитать со склада", то есть, если все опции будут с количеством 0, опции показываться не будут, как сделать так, что бы если опций нет (у всех кол-во 0) выводить какой то текст, например "опции не доступны"... Буду благодарен если найдется рабочее решение. Заранее спасибо!!! Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 решать комлексно $option_exist = false; foreach ($option['product_option_value'] as $option_value) { $option_exist = $option_exist || (!$option_value['subtract'] || ($option_value['quantity'] > 0) {% if not option_exist %} текст {% endif %} 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 1 час назад, chukcha сказал: $option_exist = false; foreach ($option['product_option_value'] as $option_value) { $option_exist = $option_exist || (!$option_value['subtract'] || ($option_value['quantity'] > 0) это в контроллер product.php после какой строчки нужно? 1 час назад, chukcha сказал: {% if not option_exist %} текст {% endif %} это в шаблон, тут понял)) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 1 минуту назад, Tobolskiy сказал: foreach ($option['product_option_value'] as $option_value) { Это базовая строка контроллера Если опций несколько $option_exist[$option['option_id']] = false; Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 1 час назад, chukcha сказал: Это базовая строка контроллера Если опций несколько $option_exist[$option['option_id']] = false; Получается в контроллер так? $option_exist[$option['option_id']] = false; foreach ($option['product_option_value'] as $option_value) { if (!$option_exist = $option_exist || (!$option_value['subtract'] || ($option_value['quantity'] > 0))) { if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) { $price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax') ? 'P' : false), $this->session->data['currency']); } else { $price = false; } Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 11 минут назад, Tobolskiy сказал: if (!$option_exist Где вы у меня это видели? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 3 минуты назад, chukcha сказал: Где вы у меня это видели? а без этого ошибка 500 0_о Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 14 минут назад, Tobolskiy сказал: а без этого ошибка точки с запятой не было? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 4 минуты назад, chukcha сказал: точки с запятой не было? нет)) скопировал как написали, можно сделать так $option_exist = $option_exist || (!$option_value['subtract'] || ($option_value['quantity'] > 0)); но тогда во фронте код {% if not option_exist %} текст {% endif %} выводится как есть и не обрабатывается Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 Какая у вас версия сборки? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 6 минут назад, chukcha сказал: Какая у вас версия сборки? OcStore 2.3 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 <?php if (!$option_exist) { ?> text <?php } ?> 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Теперь ругается что не может найти переменную((( Notice: Undefined variable: option_exist in как сложно оказалось все Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 $data['option_exist'] 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Ну либо я не туда вставляю, или не так, или еще что то дофантазировать нужно (что пришло в голову попробовал) но при таком раскладе либо ошибка 500 либо всегда выводится текст вне зависимости от опций. возможно я окончательно запутался и тп Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 (змінено) 13 часов назад, chukcha сказал: $data['option_exist'] Это должно иметь такой вид? $data['options_exist'] = false; или как вы написали? Змінено 6 квітня 2021 користувачем Tobolskiy Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В контроллере карточки товара catalog\controller\product\product.php Спойлер После строки $data['options'] = array(); Добавляем $data['options_exist'] = false; // опций нет После строки if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) { Добавляем $data['options_exist'] = true; // есть хотя бы одна опция (вычитать со склада - Да и остаток > 0) 2. В вьюхе карточки товара catalog\view\theme\default\template\product\product.tpl Спойлер Вместо <?php if ($options) { ?> Заменяем на <?php if ($options && $options_exist) { ?> В конце блока условия, т.е. перед <?php } ?> Добавляем <?php } else { ?> <h3>Опций нет</h3> В нужных типах опций, н-р, для списка вместо <?php if ($option['type'] == 'select') { ?> вставляем <?php if ($option['type'] == 'select' && $option['product_option_value']) { ?> для переключателей вместо <?php if ($option['type'] == 'radio') { ?> вставляем <?php if ($option['type'] == 'radio' && $option['product_option_value']) { ?> для флажков вместо <?php if ($option['type'] == 'checkbox') { вставляем <?php if ($option['type'] == 'checkbox' && $option['product_option_value']) { ?> 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 57 минут назад, searchingman сказал: 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается Спасибо большое за ваше решение, работает! Спасибо за труд!!! 13 часов назад, chukcha сказал: Простите что я такой тупой))) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Простите что я такой тупой))) Цитата Чукча рыбачит на берегу Берингова пролива. Вдруг всплывает американская подводная лодка. Оттуда спрашивают: - Как проплыть к морю Лаптевых? - Норд-норд-ост. - О'кей, сэнкью, гуд бай! Через час всплывает наша подлодка. - Эй, чукча, тут не проходила американская подводная лодка? - Да. - А куда она пошла? - Норд-норд-ост. - Да ты не умничай, ты рукой покажи! Я только рукой показал Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 4 часа назад, searchingman сказал: Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 9 минут назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нет, тоже не выводятся, но в категории товаров нужно просто текст "есть опции" "нет опции" - без непосредственно самих опций. Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 3 часа назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нужно получается проверку сделать, если есть опции то один текст, если нет опций то другой. сами опции по факту в плашку товара выводить не нужно. в контроллере ничего связанного с опциями действительно не нашел Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 9 квітня 2021 Share Опубліковано: 9 квітня 2021 (змінено) В 06.04.2021 в 17:45, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Для ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В файле модели catalog\model\catalog\product.php Спойлер // в конце перед закрывающей } // добавляем /** * Получить IDs товаров для показа с условиями: * - у опции товара установлено (вычитать со склада - Да и Остаток > 0) * - у опции товара установлено (вычитать со склада - Нет)) * * @param array $product_ids , н-р, [33, 68, 84] * @return array */ public function getIdsProductsOptionsWithConditions($product_ids) { $query = $this->db->query("SELECT product_id, SUM(CASE WHEN (quantity > 0 AND subtract = 1 OR subtract = 0) THEN 1 ELSE 0 END) AS show_option FROM " . DB_PREFIX . "product_option_value WHERE product_id IN (" . implode(",", $product_ids) . ") GROUP BY product_id"); return $query->rows; } 2. В контроллере catalog\controller\product\category.php Спойлер // после $data['products'] = array(); // вставить $ids_subtract_quantity = array(); // ++++ // после foreach ($results as $result) { // вставить $ids_subtract_quantity[] = $result['product_id']; // ++++ add id product // после блока $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => ($result['minimum'] > 0) ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } //вставить // +++++ if ($ids_subtract_quantity) { $data['ids_subtract_quantity'] = array(); $ids_subtract_quantity = $this->model_catalog_product->getIdsProductsOptionsWithConditions($ids_subtract_quantity); foreach ($ids_subtract_quantity as $id_subtract_quantity) { if ($id_subtract_quantity['show_option'] > 0) $data['ids_subtract_quantity'][] = $id_subtract_quantity['product_id']; } } // +++++ 3. в файле представления catalog\view\theme\default\template\product\category.tpl Спойлер // после блока <p class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </p> // вставить <?php if (isset($ids_subtract_quantity) && in_array($product['product_id'], $ids_subtract_quantity)) { ?> <h5>Опции есть</h5> <?php } else { ?> <h5>Опций нет!</h5> <?php } ?> 4. В итоге на дефолтном шаблоне будет выглядеть так. Змінено 9 квітня 2021 користувачем searchingman 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 10 квітня 2021 Автор Share Опубліковано: 10 квітня 2021 В 09.04.2021 в 15:04, searchingman сказал: Для ocStore 2.3.0.2.4 (дефолтный шаблон) Спасибо большое!!! Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Разное Курилка Если все опции с количеством 0 - выводим текст Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 1 час назад, chukcha сказал: $option_exist = false; foreach ($option['product_option_value'] as $option_value) { $option_exist = $option_exist || (!$option_value['subtract'] || ($option_value['quantity'] > 0) это в контроллер product.php после какой строчки нужно? 1 час назад, chukcha сказал: {% if not option_exist %} текст {% endif %} это в шаблон, тут понял)) Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 1 минуту назад, Tobolskiy сказал: foreach ($option['product_option_value'] as $option_value) { Это базовая строка контроллера Если опций несколько $option_exist[$option['option_id']] = false; Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 1 час назад, chukcha сказал: Это базовая строка контроллера Если опций несколько $option_exist[$option['option_id']] = false; Получается в контроллер так? $option_exist[$option['option_id']] = false; foreach ($option['product_option_value'] as $option_value) { if (!$option_exist = $option_exist || (!$option_value['subtract'] || ($option_value['quantity'] > 0))) { if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) { $price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax') ? 'P' : false), $this->session->data['currency']); } else { $price = false; } Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 11 минут назад, Tobolskiy сказал: if (!$option_exist Где вы у меня это видели? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 3 минуты назад, chukcha сказал: Где вы у меня это видели? а без этого ошибка 500 0_о Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 14 минут назад, Tobolskiy сказал: а без этого ошибка точки с запятой не было? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 4 минуты назад, chukcha сказал: точки с запятой не было? нет)) скопировал как написали, можно сделать так $option_exist = $option_exist || (!$option_value['subtract'] || ($option_value['quantity'] > 0)); но тогда во фронте код {% if not option_exist %} текст {% endif %} выводится как есть и не обрабатывается Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 Какая у вас версия сборки? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 6 минут назад, chukcha сказал: Какая у вас версия сборки? OcStore 2.3 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 <?php if (!$option_exist) { ?> text <?php } ?> 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Теперь ругается что не может найти переменную((( Notice: Undefined variable: option_exist in как сложно оказалось все Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 $data['option_exist'] 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Ну либо я не туда вставляю, или не так, или еще что то дофантазировать нужно (что пришло в голову попробовал) но при таком раскладе либо ошибка 500 либо всегда выводится текст вне зависимости от опций. возможно я окончательно запутался и тп Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 (змінено) 13 часов назад, chukcha сказал: $data['option_exist'] Это должно иметь такой вид? $data['options_exist'] = false; или как вы написали? Змінено 6 квітня 2021 користувачем Tobolskiy Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В контроллере карточки товара catalog\controller\product\product.php Спойлер После строки $data['options'] = array(); Добавляем $data['options_exist'] = false; // опций нет После строки if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) { Добавляем $data['options_exist'] = true; // есть хотя бы одна опция (вычитать со склада - Да и остаток > 0) 2. В вьюхе карточки товара catalog\view\theme\default\template\product\product.tpl Спойлер Вместо <?php if ($options) { ?> Заменяем на <?php if ($options && $options_exist) { ?> В конце блока условия, т.е. перед <?php } ?> Добавляем <?php } else { ?> <h3>Опций нет</h3> В нужных типах опций, н-р, для списка вместо <?php if ($option['type'] == 'select') { ?> вставляем <?php if ($option['type'] == 'select' && $option['product_option_value']) { ?> для переключателей вместо <?php if ($option['type'] == 'radio') { ?> вставляем <?php if ($option['type'] == 'radio' && $option['product_option_value']) { ?> для флажков вместо <?php if ($option['type'] == 'checkbox') { вставляем <?php if ($option['type'] == 'checkbox' && $option['product_option_value']) { ?> 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 57 минут назад, searchingman сказал: 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается Спасибо большое за ваше решение, работает! Спасибо за труд!!! 13 часов назад, chukcha сказал: Простите что я такой тупой))) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Простите что я такой тупой))) Цитата Чукча рыбачит на берегу Берингова пролива. Вдруг всплывает американская подводная лодка. Оттуда спрашивают: - Как проплыть к морю Лаптевых? - Норд-норд-ост. - О'кей, сэнкью, гуд бай! Через час всплывает наша подлодка. - Эй, чукча, тут не проходила американская подводная лодка? - Да. - А куда она пошла? - Норд-норд-ост. - Да ты не умничай, ты рукой покажи! Я только рукой показал Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 4 часа назад, searchingman сказал: Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 9 минут назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нет, тоже не выводятся, но в категории товаров нужно просто текст "есть опции" "нет опции" - без непосредственно самих опций. Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 3 часа назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нужно получается проверку сделать, если есть опции то один текст, если нет опций то другой. сами опции по факту в плашку товара выводить не нужно. в контроллере ничего связанного с опциями действительно не нашел Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 9 квітня 2021 Share Опубліковано: 9 квітня 2021 (змінено) В 06.04.2021 в 17:45, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Для ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В файле модели catalog\model\catalog\product.php Спойлер // в конце перед закрывающей } // добавляем /** * Получить IDs товаров для показа с условиями: * - у опции товара установлено (вычитать со склада - Да и Остаток > 0) * - у опции товара установлено (вычитать со склада - Нет)) * * @param array $product_ids , н-р, [33, 68, 84] * @return array */ public function getIdsProductsOptionsWithConditions($product_ids) { $query = $this->db->query("SELECT product_id, SUM(CASE WHEN (quantity > 0 AND subtract = 1 OR subtract = 0) THEN 1 ELSE 0 END) AS show_option FROM " . DB_PREFIX . "product_option_value WHERE product_id IN (" . implode(",", $product_ids) . ") GROUP BY product_id"); return $query->rows; } 2. В контроллере catalog\controller\product\category.php Спойлер // после $data['products'] = array(); // вставить $ids_subtract_quantity = array(); // ++++ // после foreach ($results as $result) { // вставить $ids_subtract_quantity[] = $result['product_id']; // ++++ add id product // после блока $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => ($result['minimum'] > 0) ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } //вставить // +++++ if ($ids_subtract_quantity) { $data['ids_subtract_quantity'] = array(); $ids_subtract_quantity = $this->model_catalog_product->getIdsProductsOptionsWithConditions($ids_subtract_quantity); foreach ($ids_subtract_quantity as $id_subtract_quantity) { if ($id_subtract_quantity['show_option'] > 0) $data['ids_subtract_quantity'][] = $id_subtract_quantity['product_id']; } } // +++++ 3. в файле представления catalog\view\theme\default\template\product\category.tpl Спойлер // после блока <p class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </p> // вставить <?php if (isset($ids_subtract_quantity) && in_array($product['product_id'], $ids_subtract_quantity)) { ?> <h5>Опции есть</h5> <?php } else { ?> <h5>Опций нет!</h5> <?php } ?> 4. В итоге на дефолтном шаблоне будет выглядеть так. Змінено 9 квітня 2021 користувачем searchingman 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 10 квітня 2021 Автор Share Опубліковано: 10 квітня 2021 В 09.04.2021 в 15:04, searchingman сказал: Для ocStore 2.3.0.2.4 (дефолтный шаблон) Спасибо большое!!! Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Разное Курилка Если все опции с количеством 0 - выводим текст Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 1 час назад, chukcha сказал: Это базовая строка контроллера Если опций несколько $option_exist[$option['option_id']] = false; Получается в контроллер так? $option_exist[$option['option_id']] = false; foreach ($option['product_option_value'] as $option_value) { if (!$option_exist = $option_exist || (!$option_value['subtract'] || ($option_value['quantity'] > 0))) { if ((($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) && (float)$option_value['price']) { $price = $this->currency->format($this->tax->calculate($option_value['price'], $product_info['tax_class_id'], $this->config->get('config_tax') ? 'P' : false), $this->session->data['currency']); } else { $price = false; } Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 11 минут назад, Tobolskiy сказал: if (!$option_exist Где вы у меня это видели? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 3 минуты назад, chukcha сказал: Где вы у меня это видели? а без этого ошибка 500 0_о Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 14 минут назад, Tobolskiy сказал: а без этого ошибка точки с запятой не было? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 4 минуты назад, chukcha сказал: точки с запятой не было? нет)) скопировал как написали, можно сделать так $option_exist = $option_exist || (!$option_value['subtract'] || ($option_value['quantity'] > 0)); но тогда во фронте код {% if not option_exist %} текст {% endif %} выводится как есть и не обрабатывается Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 Какая у вас версия сборки? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 6 минут назад, chukcha сказал: Какая у вас версия сборки? OcStore 2.3 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 <?php if (!$option_exist) { ?> text <?php } ?> 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Теперь ругается что не может найти переменную((( Notice: Undefined variable: option_exist in как сложно оказалось все Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 $data['option_exist'] 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Ну либо я не туда вставляю, или не так, или еще что то дофантазировать нужно (что пришло в голову попробовал) но при таком раскладе либо ошибка 500 либо всегда выводится текст вне зависимости от опций. возможно я окончательно запутался и тп Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 (змінено) 13 часов назад, chukcha сказал: $data['option_exist'] Это должно иметь такой вид? $data['options_exist'] = false; или как вы написали? Змінено 6 квітня 2021 користувачем Tobolskiy Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В контроллере карточки товара catalog\controller\product\product.php Спойлер После строки $data['options'] = array(); Добавляем $data['options_exist'] = false; // опций нет После строки if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) { Добавляем $data['options_exist'] = true; // есть хотя бы одна опция (вычитать со склада - Да и остаток > 0) 2. В вьюхе карточки товара catalog\view\theme\default\template\product\product.tpl Спойлер Вместо <?php if ($options) { ?> Заменяем на <?php if ($options && $options_exist) { ?> В конце блока условия, т.е. перед <?php } ?> Добавляем <?php } else { ?> <h3>Опций нет</h3> В нужных типах опций, н-р, для списка вместо <?php if ($option['type'] == 'select') { ?> вставляем <?php if ($option['type'] == 'select' && $option['product_option_value']) { ?> для переключателей вместо <?php if ($option['type'] == 'radio') { ?> вставляем <?php if ($option['type'] == 'radio' && $option['product_option_value']) { ?> для флажков вместо <?php if ($option['type'] == 'checkbox') { вставляем <?php if ($option['type'] == 'checkbox' && $option['product_option_value']) { ?> 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 57 минут назад, searchingman сказал: 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается Спасибо большое за ваше решение, работает! Спасибо за труд!!! 13 часов назад, chukcha сказал: Простите что я такой тупой))) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Простите что я такой тупой))) Цитата Чукча рыбачит на берегу Берингова пролива. Вдруг всплывает американская подводная лодка. Оттуда спрашивают: - Как проплыть к морю Лаптевых? - Норд-норд-ост. - О'кей, сэнкью, гуд бай! Через час всплывает наша подлодка. - Эй, чукча, тут не проходила американская подводная лодка? - Да. - А куда она пошла? - Норд-норд-ост. - Да ты не умничай, ты рукой покажи! Я только рукой показал Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 4 часа назад, searchingman сказал: Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 9 минут назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нет, тоже не выводятся, но в категории товаров нужно просто текст "есть опции" "нет опции" - без непосредственно самих опций. Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 3 часа назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нужно получается проверку сделать, если есть опции то один текст, если нет опций то другой. сами опции по факту в плашку товара выводить не нужно. в контроллере ничего связанного с опциями действительно не нашел Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 9 квітня 2021 Share Опубліковано: 9 квітня 2021 (змінено) В 06.04.2021 в 17:45, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Для ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В файле модели catalog\model\catalog\product.php Спойлер // в конце перед закрывающей } // добавляем /** * Получить IDs товаров для показа с условиями: * - у опции товара установлено (вычитать со склада - Да и Остаток > 0) * - у опции товара установлено (вычитать со склада - Нет)) * * @param array $product_ids , н-р, [33, 68, 84] * @return array */ public function getIdsProductsOptionsWithConditions($product_ids) { $query = $this->db->query("SELECT product_id, SUM(CASE WHEN (quantity > 0 AND subtract = 1 OR subtract = 0) THEN 1 ELSE 0 END) AS show_option FROM " . DB_PREFIX . "product_option_value WHERE product_id IN (" . implode(",", $product_ids) . ") GROUP BY product_id"); return $query->rows; } 2. В контроллере catalog\controller\product\category.php Спойлер // после $data['products'] = array(); // вставить $ids_subtract_quantity = array(); // ++++ // после foreach ($results as $result) { // вставить $ids_subtract_quantity[] = $result['product_id']; // ++++ add id product // после блока $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => ($result['minimum'] > 0) ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } //вставить // +++++ if ($ids_subtract_quantity) { $data['ids_subtract_quantity'] = array(); $ids_subtract_quantity = $this->model_catalog_product->getIdsProductsOptionsWithConditions($ids_subtract_quantity); foreach ($ids_subtract_quantity as $id_subtract_quantity) { if ($id_subtract_quantity['show_option'] > 0) $data['ids_subtract_quantity'][] = $id_subtract_quantity['product_id']; } } // +++++ 3. в файле представления catalog\view\theme\default\template\product\category.tpl Спойлер // после блока <p class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </p> // вставить <?php if (isset($ids_subtract_quantity) && in_array($product['product_id'], $ids_subtract_quantity)) { ?> <h5>Опции есть</h5> <?php } else { ?> <h5>Опций нет!</h5> <?php } ?> 4. В итоге на дефолтном шаблоне будет выглядеть так. Змінено 9 квітня 2021 користувачем searchingman 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 10 квітня 2021 Автор Share Опубліковано: 10 квітня 2021 В 09.04.2021 в 15:04, searchingman сказал: Для ocStore 2.3.0.2.4 (дефолтный шаблон) Спасибо большое!!! Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Разное Курилка Если все опции с количеством 0 - выводим текст Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 3 минуты назад, chukcha сказал: Где вы у меня это видели? а без этого ошибка 500 0_о Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 14 минут назад, Tobolskiy сказал: а без этого ошибка точки с запятой не было? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 4 минуты назад, chukcha сказал: точки с запятой не было? нет)) скопировал как написали, можно сделать так $option_exist = $option_exist || (!$option_value['subtract'] || ($option_value['quantity'] > 0)); но тогда во фронте код {% if not option_exist %} текст {% endif %} выводится как есть и не обрабатывается Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 Какая у вас версия сборки? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 6 минут назад, chukcha сказал: Какая у вас версия сборки? OcStore 2.3 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 <?php if (!$option_exist) { ?> text <?php } ?> 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Теперь ругается что не может найти переменную((( Notice: Undefined variable: option_exist in как сложно оказалось все Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 $data['option_exist'] 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Ну либо я не туда вставляю, или не так, или еще что то дофантазировать нужно (что пришло в голову попробовал) но при таком раскладе либо ошибка 500 либо всегда выводится текст вне зависимости от опций. возможно я окончательно запутался и тп Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 (змінено) 13 часов назад, chukcha сказал: $data['option_exist'] Это должно иметь такой вид? $data['options_exist'] = false; или как вы написали? Змінено 6 квітня 2021 користувачем Tobolskiy Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В контроллере карточки товара catalog\controller\product\product.php Спойлер После строки $data['options'] = array(); Добавляем $data['options_exist'] = false; // опций нет После строки if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) { Добавляем $data['options_exist'] = true; // есть хотя бы одна опция (вычитать со склада - Да и остаток > 0) 2. В вьюхе карточки товара catalog\view\theme\default\template\product\product.tpl Спойлер Вместо <?php if ($options) { ?> Заменяем на <?php if ($options && $options_exist) { ?> В конце блока условия, т.е. перед <?php } ?> Добавляем <?php } else { ?> <h3>Опций нет</h3> В нужных типах опций, н-р, для списка вместо <?php if ($option['type'] == 'select') { ?> вставляем <?php if ($option['type'] == 'select' && $option['product_option_value']) { ?> для переключателей вместо <?php if ($option['type'] == 'radio') { ?> вставляем <?php if ($option['type'] == 'radio' && $option['product_option_value']) { ?> для флажков вместо <?php if ($option['type'] == 'checkbox') { вставляем <?php if ($option['type'] == 'checkbox' && $option['product_option_value']) { ?> 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 57 минут назад, searchingman сказал: 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается Спасибо большое за ваше решение, работает! Спасибо за труд!!! 13 часов назад, chukcha сказал: Простите что я такой тупой))) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Простите что я такой тупой))) Цитата Чукча рыбачит на берегу Берингова пролива. Вдруг всплывает американская подводная лодка. Оттуда спрашивают: - Как проплыть к морю Лаптевых? - Норд-норд-ост. - О'кей, сэнкью, гуд бай! Через час всплывает наша подлодка. - Эй, чукча, тут не проходила американская подводная лодка? - Да. - А куда она пошла? - Норд-норд-ост. - Да ты не умничай, ты рукой покажи! Я только рукой показал Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 4 часа назад, searchingman сказал: Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 9 минут назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нет, тоже не выводятся, но в категории товаров нужно просто текст "есть опции" "нет опции" - без непосредственно самих опций. Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 3 часа назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нужно получается проверку сделать, если есть опции то один текст, если нет опций то другой. сами опции по факту в плашку товара выводить не нужно. в контроллере ничего связанного с опциями действительно не нашел Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 9 квітня 2021 Share Опубліковано: 9 квітня 2021 (змінено) В 06.04.2021 в 17:45, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Для ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В файле модели catalog\model\catalog\product.php Спойлер // в конце перед закрывающей } // добавляем /** * Получить IDs товаров для показа с условиями: * - у опции товара установлено (вычитать со склада - Да и Остаток > 0) * - у опции товара установлено (вычитать со склада - Нет)) * * @param array $product_ids , н-р, [33, 68, 84] * @return array */ public function getIdsProductsOptionsWithConditions($product_ids) { $query = $this->db->query("SELECT product_id, SUM(CASE WHEN (quantity > 0 AND subtract = 1 OR subtract = 0) THEN 1 ELSE 0 END) AS show_option FROM " . DB_PREFIX . "product_option_value WHERE product_id IN (" . implode(",", $product_ids) . ") GROUP BY product_id"); return $query->rows; } 2. В контроллере catalog\controller\product\category.php Спойлер // после $data['products'] = array(); // вставить $ids_subtract_quantity = array(); // ++++ // после foreach ($results as $result) { // вставить $ids_subtract_quantity[] = $result['product_id']; // ++++ add id product // после блока $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => ($result['minimum'] > 0) ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } //вставить // +++++ if ($ids_subtract_quantity) { $data['ids_subtract_quantity'] = array(); $ids_subtract_quantity = $this->model_catalog_product->getIdsProductsOptionsWithConditions($ids_subtract_quantity); foreach ($ids_subtract_quantity as $id_subtract_quantity) { if ($id_subtract_quantity['show_option'] > 0) $data['ids_subtract_quantity'][] = $id_subtract_quantity['product_id']; } } // +++++ 3. в файле представления catalog\view\theme\default\template\product\category.tpl Спойлер // после блока <p class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </p> // вставить <?php if (isset($ids_subtract_quantity) && in_array($product['product_id'], $ids_subtract_quantity)) { ?> <h5>Опции есть</h5> <?php } else { ?> <h5>Опций нет!</h5> <?php } ?> 4. В итоге на дефолтном шаблоне будет выглядеть так. Змінено 9 квітня 2021 користувачем searchingman 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 10 квітня 2021 Автор Share Опубліковано: 10 квітня 2021 В 09.04.2021 в 15:04, searchingman сказал: Для ocStore 2.3.0.2.4 (дефолтный шаблон) Спасибо большое!!! Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Разное Курилка Если все опции с количеством 0 - выводим текст Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 4 минуты назад, chukcha сказал: точки с запятой не было? нет)) скопировал как написали, можно сделать так $option_exist = $option_exist || (!$option_value['subtract'] || ($option_value['quantity'] > 0)); но тогда во фронте код {% if not option_exist %} текст {% endif %} выводится как есть и не обрабатывается Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 Какая у вас версия сборки? Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 6 минут назад, chukcha сказал: Какая у вас версия сборки? OcStore 2.3 Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 <?php if (!$option_exist) { ?> text <?php } ?> 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Теперь ругается что не может найти переменную((( Notice: Undefined variable: option_exist in как сложно оказалось все Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 $data['option_exist'] 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Ну либо я не туда вставляю, или не так, или еще что то дофантазировать нужно (что пришло в голову попробовал) но при таком раскладе либо ошибка 500 либо всегда выводится текст вне зависимости от опций. возможно я окончательно запутался и тп Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 (змінено) 13 часов назад, chukcha сказал: $data['option_exist'] Это должно иметь такой вид? $data['options_exist'] = false; или как вы написали? Змінено 6 квітня 2021 користувачем Tobolskiy Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В контроллере карточки товара catalog\controller\product\product.php Спойлер После строки $data['options'] = array(); Добавляем $data['options_exist'] = false; // опций нет После строки if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) { Добавляем $data['options_exist'] = true; // есть хотя бы одна опция (вычитать со склада - Да и остаток > 0) 2. В вьюхе карточки товара catalog\view\theme\default\template\product\product.tpl Спойлер Вместо <?php if ($options) { ?> Заменяем на <?php if ($options && $options_exist) { ?> В конце блока условия, т.е. перед <?php } ?> Добавляем <?php } else { ?> <h3>Опций нет</h3> В нужных типах опций, н-р, для списка вместо <?php if ($option['type'] == 'select') { ?> вставляем <?php if ($option['type'] == 'select' && $option['product_option_value']) { ?> для переключателей вместо <?php if ($option['type'] == 'radio') { ?> вставляем <?php if ($option['type'] == 'radio' && $option['product_option_value']) { ?> для флажков вместо <?php if ($option['type'] == 'checkbox') { вставляем <?php if ($option['type'] == 'checkbox' && $option['product_option_value']) { ?> 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 57 минут назад, searchingman сказал: 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается Спасибо большое за ваше решение, работает! Спасибо за труд!!! 13 часов назад, chukcha сказал: Простите что я такой тупой))) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Простите что я такой тупой))) Цитата Чукча рыбачит на берегу Берингова пролива. Вдруг всплывает американская подводная лодка. Оттуда спрашивают: - Как проплыть к морю Лаптевых? - Норд-норд-ост. - О'кей, сэнкью, гуд бай! Через час всплывает наша подлодка. - Эй, чукча, тут не проходила американская подводная лодка? - Да. - А куда она пошла? - Норд-норд-ост. - Да ты не умничай, ты рукой покажи! Я только рукой показал Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 4 часа назад, searchingman сказал: Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 9 минут назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нет, тоже не выводятся, но в категории товаров нужно просто текст "есть опции" "нет опции" - без непосредственно самих опций. Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 3 часа назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нужно получается проверку сделать, если есть опции то один текст, если нет опций то другой. сами опции по факту в плашку товара выводить не нужно. в контроллере ничего связанного с опциями действительно не нашел Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 9 квітня 2021 Share Опубліковано: 9 квітня 2021 (змінено) В 06.04.2021 в 17:45, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Для ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В файле модели catalog\model\catalog\product.php Спойлер // в конце перед закрывающей } // добавляем /** * Получить IDs товаров для показа с условиями: * - у опции товара установлено (вычитать со склада - Да и Остаток > 0) * - у опции товара установлено (вычитать со склада - Нет)) * * @param array $product_ids , н-р, [33, 68, 84] * @return array */ public function getIdsProductsOptionsWithConditions($product_ids) { $query = $this->db->query("SELECT product_id, SUM(CASE WHEN (quantity > 0 AND subtract = 1 OR subtract = 0) THEN 1 ELSE 0 END) AS show_option FROM " . DB_PREFIX . "product_option_value WHERE product_id IN (" . implode(",", $product_ids) . ") GROUP BY product_id"); return $query->rows; } 2. В контроллере catalog\controller\product\category.php Спойлер // после $data['products'] = array(); // вставить $ids_subtract_quantity = array(); // ++++ // после foreach ($results as $result) { // вставить $ids_subtract_quantity[] = $result['product_id']; // ++++ add id product // после блока $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => ($result['minimum'] > 0) ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } //вставить // +++++ if ($ids_subtract_quantity) { $data['ids_subtract_quantity'] = array(); $ids_subtract_quantity = $this->model_catalog_product->getIdsProductsOptionsWithConditions($ids_subtract_quantity); foreach ($ids_subtract_quantity as $id_subtract_quantity) { if ($id_subtract_quantity['show_option'] > 0) $data['ids_subtract_quantity'][] = $id_subtract_quantity['product_id']; } } // +++++ 3. в файле представления catalog\view\theme\default\template\product\category.tpl Спойлер // после блока <p class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </p> // вставить <?php if (isset($ids_subtract_quantity) && in_array($product['product_id'], $ids_subtract_quantity)) { ?> <h5>Опции есть</h5> <?php } else { ?> <h5>Опций нет!</h5> <?php } ?> 4. В итоге на дефолтном шаблоне будет выглядеть так. Змінено 9 квітня 2021 користувачем searchingman 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 10 квітня 2021 Автор Share Опубліковано: 10 квітня 2021 В 09.04.2021 в 15:04, searchingman сказал: Для ocStore 2.3.0.2.4 (дефолтный шаблон) Спасибо большое!!! Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Разное Курилка Если все опции с количеством 0 - выводим текст Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 6 минут назад, chukcha сказал: Какая у вас версия сборки? OcStore 2.3 Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 <?php if (!$option_exist) { ?> text <?php } ?> 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Теперь ругается что не может найти переменную((( Notice: Undefined variable: option_exist in как сложно оказалось все Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 $data['option_exist'] 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Ну либо я не туда вставляю, или не так, или еще что то дофантазировать нужно (что пришло в голову попробовал) но при таком раскладе либо ошибка 500 либо всегда выводится текст вне зависимости от опций. возможно я окончательно запутался и тп Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 (змінено) 13 часов назад, chukcha сказал: $data['option_exist'] Это должно иметь такой вид? $data['options_exist'] = false; или как вы написали? Змінено 6 квітня 2021 користувачем Tobolskiy Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В контроллере карточки товара catalog\controller\product\product.php Спойлер После строки $data['options'] = array(); Добавляем $data['options_exist'] = false; // опций нет После строки if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) { Добавляем $data['options_exist'] = true; // есть хотя бы одна опция (вычитать со склада - Да и остаток > 0) 2. В вьюхе карточки товара catalog\view\theme\default\template\product\product.tpl Спойлер Вместо <?php if ($options) { ?> Заменяем на <?php if ($options && $options_exist) { ?> В конце блока условия, т.е. перед <?php } ?> Добавляем <?php } else { ?> <h3>Опций нет</h3> В нужных типах опций, н-р, для списка вместо <?php if ($option['type'] == 'select') { ?> вставляем <?php if ($option['type'] == 'select' && $option['product_option_value']) { ?> для переключателей вместо <?php if ($option['type'] == 'radio') { ?> вставляем <?php if ($option['type'] == 'radio' && $option['product_option_value']) { ?> для флажков вместо <?php if ($option['type'] == 'checkbox') { вставляем <?php if ($option['type'] == 'checkbox' && $option['product_option_value']) { ?> 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 57 минут назад, searchingman сказал: 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается Спасибо большое за ваше решение, работает! Спасибо за труд!!! 13 часов назад, chukcha сказал: Простите что я такой тупой))) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Простите что я такой тупой))) Цитата Чукча рыбачит на берегу Берингова пролива. Вдруг всплывает американская подводная лодка. Оттуда спрашивают: - Как проплыть к морю Лаптевых? - Норд-норд-ост. - О'кей, сэнкью, гуд бай! Через час всплывает наша подлодка. - Эй, чукча, тут не проходила американская подводная лодка? - Да. - А куда она пошла? - Норд-норд-ост. - Да ты не умничай, ты рукой покажи! Я только рукой показал Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 4 часа назад, searchingman сказал: Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 9 минут назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нет, тоже не выводятся, но в категории товаров нужно просто текст "есть опции" "нет опции" - без непосредственно самих опций. Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 3 часа назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нужно получается проверку сделать, если есть опции то один текст, если нет опций то другой. сами опции по факту в плашку товара выводить не нужно. в контроллере ничего связанного с опциями действительно не нашел Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 9 квітня 2021 Share Опубліковано: 9 квітня 2021 (змінено) В 06.04.2021 в 17:45, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Для ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В файле модели catalog\model\catalog\product.php Спойлер // в конце перед закрывающей } // добавляем /** * Получить IDs товаров для показа с условиями: * - у опции товара установлено (вычитать со склада - Да и Остаток > 0) * - у опции товара установлено (вычитать со склада - Нет)) * * @param array $product_ids , н-р, [33, 68, 84] * @return array */ public function getIdsProductsOptionsWithConditions($product_ids) { $query = $this->db->query("SELECT product_id, SUM(CASE WHEN (quantity > 0 AND subtract = 1 OR subtract = 0) THEN 1 ELSE 0 END) AS show_option FROM " . DB_PREFIX . "product_option_value WHERE product_id IN (" . implode(",", $product_ids) . ") GROUP BY product_id"); return $query->rows; } 2. В контроллере catalog\controller\product\category.php Спойлер // после $data['products'] = array(); // вставить $ids_subtract_quantity = array(); // ++++ // после foreach ($results as $result) { // вставить $ids_subtract_quantity[] = $result['product_id']; // ++++ add id product // после блока $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => ($result['minimum'] > 0) ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } //вставить // +++++ if ($ids_subtract_quantity) { $data['ids_subtract_quantity'] = array(); $ids_subtract_quantity = $this->model_catalog_product->getIdsProductsOptionsWithConditions($ids_subtract_quantity); foreach ($ids_subtract_quantity as $id_subtract_quantity) { if ($id_subtract_quantity['show_option'] > 0) $data['ids_subtract_quantity'][] = $id_subtract_quantity['product_id']; } } // +++++ 3. в файле представления catalog\view\theme\default\template\product\category.tpl Спойлер // после блока <p class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </p> // вставить <?php if (isset($ids_subtract_quantity) && in_array($product['product_id'], $ids_subtract_quantity)) { ?> <h5>Опции есть</h5> <?php } else { ?> <h5>Опций нет!</h5> <?php } ?> 4. В итоге на дефолтном шаблоне будет выглядеть так. Змінено 9 квітня 2021 користувачем searchingman 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 10 квітня 2021 Автор Share Опубліковано: 10 квітня 2021 В 09.04.2021 в 15:04, searchingman сказал: Для ocStore 2.3.0.2.4 (дефолтный шаблон) Спасибо большое!!! Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Разное Курилка Если все опции с количеством 0 - выводим текст
Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Теперь ругается что не может найти переменную((( Notice: Undefined variable: option_exist in как сложно оказалось все Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 5 квітня 2021 Share Опубліковано: 5 квітня 2021 $data['option_exist'] 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Ну либо я не туда вставляю, или не так, или еще что то дофантазировать нужно (что пришло в голову попробовал) но при таком раскладе либо ошибка 500 либо всегда выводится текст вне зависимости от опций. возможно я окончательно запутался и тп Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 (змінено) 13 часов назад, chukcha сказал: $data['option_exist'] Это должно иметь такой вид? $data['options_exist'] = false; или как вы написали? Змінено 6 квітня 2021 користувачем Tobolskiy Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В контроллере карточки товара catalog\controller\product\product.php Спойлер После строки $data['options'] = array(); Добавляем $data['options_exist'] = false; // опций нет После строки if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) { Добавляем $data['options_exist'] = true; // есть хотя бы одна опция (вычитать со склада - Да и остаток > 0) 2. В вьюхе карточки товара catalog\view\theme\default\template\product\product.tpl Спойлер Вместо <?php if ($options) { ?> Заменяем на <?php if ($options && $options_exist) { ?> В конце блока условия, т.е. перед <?php } ?> Добавляем <?php } else { ?> <h3>Опций нет</h3> В нужных типах опций, н-р, для списка вместо <?php if ($option['type'] == 'select') { ?> вставляем <?php if ($option['type'] == 'select' && $option['product_option_value']) { ?> для переключателей вместо <?php if ($option['type'] == 'radio') { ?> вставляем <?php if ($option['type'] == 'radio' && $option['product_option_value']) { ?> для флажков вместо <?php if ($option['type'] == 'checkbox') { вставляем <?php if ($option['type'] == 'checkbox' && $option['product_option_value']) { ?> 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 57 минут назад, searchingman сказал: 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается Спасибо большое за ваше решение, работает! Спасибо за труд!!! 13 часов назад, chukcha сказал: Простите что я такой тупой))) Надіслати Поділитися на інших сайтах More sharing options... chukcha Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Простите что я такой тупой))) Цитата Чукча рыбачит на берегу Берингова пролива. Вдруг всплывает американская подводная лодка. Оттуда спрашивают: - Как проплыть к морю Лаптевых? - Норд-норд-ост. - О'кей, сэнкью, гуд бай! Через час всплывает наша подлодка. - Эй, чукча, тут не проходила американская подводная лодка? - Да. - А куда она пошла? - Норд-норд-ост. - Да ты не умничай, ты рукой покажи! Я только рукой показал Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 4 часа назад, searchingman сказал: Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 9 минут назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нет, тоже не выводятся, но в категории товаров нужно просто текст "есть опции" "нет опции" - без непосредственно самих опций. Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 3 часа назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нужно получается проверку сделать, если есть опции то один текст, если нет опций то другой. сами опции по факту в плашку товара выводить не нужно. в контроллере ничего связанного с опциями действительно не нашел Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 9 квітня 2021 Share Опубліковано: 9 квітня 2021 (змінено) В 06.04.2021 в 17:45, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Для ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В файле модели catalog\model\catalog\product.php Спойлер // в конце перед закрывающей } // добавляем /** * Получить IDs товаров для показа с условиями: * - у опции товара установлено (вычитать со склада - Да и Остаток > 0) * - у опции товара установлено (вычитать со склада - Нет)) * * @param array $product_ids , н-р, [33, 68, 84] * @return array */ public function getIdsProductsOptionsWithConditions($product_ids) { $query = $this->db->query("SELECT product_id, SUM(CASE WHEN (quantity > 0 AND subtract = 1 OR subtract = 0) THEN 1 ELSE 0 END) AS show_option FROM " . DB_PREFIX . "product_option_value WHERE product_id IN (" . implode(",", $product_ids) . ") GROUP BY product_id"); return $query->rows; } 2. В контроллере catalog\controller\product\category.php Спойлер // после $data['products'] = array(); // вставить $ids_subtract_quantity = array(); // ++++ // после foreach ($results as $result) { // вставить $ids_subtract_quantity[] = $result['product_id']; // ++++ add id product // после блока $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => ($result['minimum'] > 0) ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } //вставить // +++++ if ($ids_subtract_quantity) { $data['ids_subtract_quantity'] = array(); $ids_subtract_quantity = $this->model_catalog_product->getIdsProductsOptionsWithConditions($ids_subtract_quantity); foreach ($ids_subtract_quantity as $id_subtract_quantity) { if ($id_subtract_quantity['show_option'] > 0) $data['ids_subtract_quantity'][] = $id_subtract_quantity['product_id']; } } // +++++ 3. в файле представления catalog\view\theme\default\template\product\category.tpl Спойлер // после блока <p class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </p> // вставить <?php if (isset($ids_subtract_quantity) && in_array($product['product_id'], $ids_subtract_quantity)) { ?> <h5>Опции есть</h5> <?php } else { ?> <h5>Опций нет!</h5> <?php } ?> 4. В итоге на дефолтном шаблоне будет выглядеть так. Змінено 9 квітня 2021 користувачем searchingman 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 10 квітня 2021 Автор Share Опубліковано: 10 квітня 2021 В 09.04.2021 в 15:04, searchingman сказал: Для ocStore 2.3.0.2.4 (дефолтный шаблон) Спасибо большое!!! Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
Tobolskiy Опубліковано: 5 квітня 2021 Автор Share Опубліковано: 5 квітня 2021 Ну либо я не туда вставляю, или не так, или еще что то дофантазировать нужно (что пришло в голову попробовал) но при таком раскладе либо ошибка 500 либо всегда выводится текст вне зависимости от опций. возможно я окончательно запутался и тп Надіслати Поділитися на інших сайтах More sharing options...
Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 (змінено) 13 часов назад, chukcha сказал: $data['option_exist'] Это должно иметь такой вид? $data['options_exist'] = false; или как вы написали? Змінено 6 квітня 2021 користувачем Tobolskiy Надіслати Поділитися на інших сайтах More sharing options...
searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В контроллере карточки товара catalog\controller\product\product.php Спойлер После строки $data['options'] = array(); Добавляем $data['options_exist'] = false; // опций нет После строки if (!$option_value['subtract'] || ($option_value['quantity'] > 0)) { Добавляем $data['options_exist'] = true; // есть хотя бы одна опция (вычитать со склада - Да и остаток > 0) 2. В вьюхе карточки товара catalog\view\theme\default\template\product\product.tpl Спойлер Вместо <?php if ($options) { ?> Заменяем на <?php if ($options && $options_exist) { ?> В конце блока условия, т.е. перед <?php } ?> Добавляем <?php } else { ?> <h3>Опций нет</h3> В нужных типах опций, н-р, для списка вместо <?php if ($option['type'] == 'select') { ?> вставляем <?php if ($option['type'] == 'select' && $option['product_option_value']) { ?> для переключателей вместо <?php if ($option['type'] == 'radio') { ?> вставляем <?php if ($option['type'] == 'radio' && $option['product_option_value']) { ?> для флажков вместо <?php if ($option['type'] == 'checkbox') { вставляем <?php if ($option['type'] == 'checkbox' && $option['product_option_value']) { ?> 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается 2 Надіслати Поділитися на інших сайтах More sharing options...
Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 57 минут назад, searchingman сказал: 3. Логика работы после изменений. Если все опции с (вычитать со склада - Да и Остаток = 0), то показывается текст "Опций нет" Если у конкретного типа опций (список, флажок, переключатель) нет опций (вычитать со склада - Да и Остаток > 0), то опция не показывается. Если у конкретного типа опций (список, флажок, переключатель) есть опции (вычитать со склада - Нет), то опция показывается Спасибо большое за ваше решение, работает! Спасибо за труд!!! 13 часов назад, chukcha сказал: Простите что я такой тупой))) Надіслати Поділитися на інших сайтах More sharing options...
chukcha Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Простите что я такой тупой))) Цитата Чукча рыбачит на берегу Берингова пролива. Вдруг всплывает американская подводная лодка. Оттуда спрашивают: - Как проплыть к морю Лаптевых? - Норд-норд-ост. - О'кей, сэнкью, гуд бай! Через час всплывает наша подлодка. - Эй, чукча, тут не проходила американская подводная лодка? - Да. - А куда она пошла? - Норд-норд-ост. - Да ты не умничай, ты рукой покажи! Я только рукой показал Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 4 часа назад, searchingman сказал: Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. 1 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 9 минут назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нет, тоже не выводятся, но в категории товаров нужно просто текст "есть опции" "нет опции" - без непосредственно самих опций. Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 3 часа назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нужно получается проверку сделать, если есть опции то один текст, если нет опций то другой. сами опции по факту в плашку товара выводить не нужно. в контроллере ничего связанного с опциями действительно не нашел Надіслати Поділитися на інших сайтах More sharing options... searchingman Опубліковано: 9 квітня 2021 Share Опубліковано: 9 квітня 2021 (змінено) В 06.04.2021 в 17:45, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Для ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В файле модели catalog\model\catalog\product.php Спойлер // в конце перед закрывающей } // добавляем /** * Получить IDs товаров для показа с условиями: * - у опции товара установлено (вычитать со склада - Да и Остаток > 0) * - у опции товара установлено (вычитать со склада - Нет)) * * @param array $product_ids , н-р, [33, 68, 84] * @return array */ public function getIdsProductsOptionsWithConditions($product_ids) { $query = $this->db->query("SELECT product_id, SUM(CASE WHEN (quantity > 0 AND subtract = 1 OR subtract = 0) THEN 1 ELSE 0 END) AS show_option FROM " . DB_PREFIX . "product_option_value WHERE product_id IN (" . implode(",", $product_ids) . ") GROUP BY product_id"); return $query->rows; } 2. В контроллере catalog\controller\product\category.php Спойлер // после $data['products'] = array(); // вставить $ids_subtract_quantity = array(); // ++++ // после foreach ($results as $result) { // вставить $ids_subtract_quantity[] = $result['product_id']; // ++++ add id product // после блока $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => ($result['minimum'] > 0) ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } //вставить // +++++ if ($ids_subtract_quantity) { $data['ids_subtract_quantity'] = array(); $ids_subtract_quantity = $this->model_catalog_product->getIdsProductsOptionsWithConditions($ids_subtract_quantity); foreach ($ids_subtract_quantity as $id_subtract_quantity) { if ($id_subtract_quantity['show_option'] > 0) $data['ids_subtract_quantity'][] = $id_subtract_quantity['product_id']; } } // +++++ 3. в файле представления catalog\view\theme\default\template\product\category.tpl Спойлер // после блока <p class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </p> // вставить <?php if (isset($ids_subtract_quantity) && in_array($product['product_id'], $ids_subtract_quantity)) { ?> <h5>Опции есть</h5> <?php } else { ?> <h5>Опций нет!</h5> <?php } ?> 4. В итоге на дефолтном шаблоне будет выглядеть так. Змінено 9 квітня 2021 користувачем searchingman 2 Надіслати Поділитися на інших сайтах More sharing options... Tobolskiy Опубліковано: 10 квітня 2021 Автор Share Опубліковано: 10 квітня 2021 В 09.04.2021 в 15:04, searchingman сказал: Для ocStore 2.3.0.2.4 (дефолтный шаблон) Спасибо большое!!! Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 1
Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 4 часа назад, searchingman сказал: Вариант решения на примере ocStore 2.3.0.2.4 (дефолтный шаблон) Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Надіслати Поділитися на інших сайтах More sharing options...
searchingman Опубліковано: 6 квітня 2021 Share Опубліковано: 6 квітня 2021 1 час назад, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. 1 Надіслати Поділитися на інших сайтах More sharing options...
Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 9 минут назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нет, тоже не выводятся, но в категории товаров нужно просто текст "есть опции" "нет опции" - без непосредственно самих опций. Надіслати Поділитися на інших сайтах More sharing options...
Tobolskiy Опубліковано: 6 квітня 2021 Автор Share Опубліковано: 6 квітня 2021 3 часа назад, searchingman сказал: Если речь, про страницы категорий товаров, то в дефолтном шаблоне на страницах категорий опции для товаров не выводятся. Если у Вас выводятся, то логичнее обратиться к разработчику шаблона. нужно получается проверку сделать, если есть опции то один текст, если нет опций то другой. сами опции по факту в плашку товара выводить не нужно. в контроллере ничего связанного с опциями действительно не нашел Надіслати Поділитися на інших сайтах More sharing options...
searchingman Опубліковано: 9 квітня 2021 Share Опубліковано: 9 квітня 2021 (змінено) В 06.04.2021 в 17:45, Tobolskiy сказал: Буду благодарен если подскажете как сделать то же самое для catalog, там код немного отличается. Для ocStore 2.3.0.2.4 (дефолтный шаблон) 1. В файле модели catalog\model\catalog\product.php Спойлер // в конце перед закрывающей } // добавляем /** * Получить IDs товаров для показа с условиями: * - у опции товара установлено (вычитать со склада - Да и Остаток > 0) * - у опции товара установлено (вычитать со склада - Нет)) * * @param array $product_ids , н-р, [33, 68, 84] * @return array */ public function getIdsProductsOptionsWithConditions($product_ids) { $query = $this->db->query("SELECT product_id, SUM(CASE WHEN (quantity > 0 AND subtract = 1 OR subtract = 0) THEN 1 ELSE 0 END) AS show_option FROM " . DB_PREFIX . "product_option_value WHERE product_id IN (" . implode(",", $product_ids) . ") GROUP BY product_id"); return $query->rows; } 2. В контроллере catalog\controller\product\category.php Спойлер // после $data['products'] = array(); // вставить $ids_subtract_quantity = array(); // ++++ // после foreach ($results as $result) { // вставить $ids_subtract_quantity[] = $result['product_id']; // ++++ add id product // после блока $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => ($result['minimum'] > 0) ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } //вставить // +++++ if ($ids_subtract_quantity) { $data['ids_subtract_quantity'] = array(); $ids_subtract_quantity = $this->model_catalog_product->getIdsProductsOptionsWithConditions($ids_subtract_quantity); foreach ($ids_subtract_quantity as $id_subtract_quantity) { if ($id_subtract_quantity['show_option'] > 0) $data['ids_subtract_quantity'][] = $id_subtract_quantity['product_id']; } } // +++++ 3. в файле представления catalog\view\theme\default\template\product\category.tpl Спойлер // после блока <p class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </p> // вставить <?php if (isset($ids_subtract_quantity) && in_array($product['product_id'], $ids_subtract_quantity)) { ?> <h5>Опции есть</h5> <?php } else { ?> <h5>Опций нет!</h5> <?php } ?> 4. В итоге на дефолтном шаблоне будет выглядеть так. Змінено 9 квітня 2021 користувачем searchingman 2 Надіслати Поділитися на інших сайтах More sharing options...
Tobolskiy Опубліковано: 10 квітня 2021 Автор Share Опубліковано: 10 квітня 2021 В 09.04.2021 в 15:04, searchingman сказал: Для ocStore 2.3.0.2.4 (дефолтный шаблон) Спасибо большое!!! Надіслати Поділитися на інших сайтах More sharing options...
Recommended Posts