DenKuzmin Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 Добавил вывод опций в каталог. Вывожу их вот так: Спойлер <div class="options"> <?php if ($product['options']) { ?> <div id="option_<?php echo $product['product_id']; ?>"> <?php foreach ($product['options'] as $option) { ?> <?php if ($option['type'] == 'radio') { ?> <?php if ($option['option_id'] == '11') { ?> <div id="option-<?php echo $option['product_option_id']; ?>" class="option"> <?php foreach ($option['product_option_value'] as $option_value) { ?> <div class="option-value hidden"> <input type="radio" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option_value['product_option_value_id']; ?>" id="option-value-<?php echo $option_value['product_option_value_id']; ?>" data-optprice="<?php echo number_format(preg_replace("/\..+$/", "", $option_value['price']), 0, '', '') ?>" /> <label for="option-value-<?php echo $option_value['product_option_value_id']; ?>" name="<?php echo $option_value['name']; ?>"> <?php echo $option_value['name']; ?> </label> </div> <?php } ?> </div> <?php } ?> <?php } ?> <?php } ?> </div> <?php } ?> </div> В контроллере добавил: $options = $this->model_catalog_product->getProductOptions($result['product_id']); И в контроллере в $data['products'][] = array( добавил: 'options' => $options, Проблем в том, что при переходе в категорию жёстко долго грузится страница. Может минуту висеть. В чём проблема? Помогите. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
spectre Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 потому что видимо много товаров и это прям больной запрос вам нужно получать опции более простым способом Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 16 минут назад, spectre сказал: потому что видимо много товаров и это прям больной запрос вам нужно получать опции более простым способом Вроде этого? Спойлер $options = array(); foreach ($this->model_catalog_product->getProductOptions($this->request->get['product_id']) as $option) { $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$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']) { $oprice = $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 { $oprice = false; } $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $option_value['image'] ? $this->model_tool_image->resize($option_value['image'], 100, 100) : '', 'price' => $oprice, 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 13 минут назад, DenKuzmin сказал: Вроде этого? Это Вы уже что-то совсем не то делаете. Сама getProductOptions всё это уже возвращает. 42 минуты назад, DenKuzmin сказал: Проблем в том, что при переходе в категорию жёстко долго грузится страница. Может минуту висеть. В чём проблема? Помогите. А сколько у Вас товаров в этой категории. И в среднем сколько опций на товар? 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 7 минут назад, nogocuHoBuk сказал: А сколько у Вас товаров в этой категории. И в среднем сколько опций на товар? Где-то 48 товаров на листе. Всего около 350 в категории. В каждом товаре примерно 5 групп опций. В группах от 6 до 40 опций. 8 минут назад, nogocuHoBuk сказал: Это Вы уже что-то совсем не то делаете. Сама getProductOptions всё это уже возвращает. Делаю по аналогии в файле product.php Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 5 минут назад, DenKuzmin сказал: Где-то 48 товаров на листе. Всего около 350 в категории. В каждом товаре примерно 5 групп опций. В группах от 6 до 40 опций. Общее количество в категории не играет роли. Запрос ограничен количеством на странице. А если уменьшить количество товаров до 12, например? Просто 48 товаров, обход циклом. В цикле 5 групп опций, да по 6-20 опций. Делать "по аналогии" - равносильно прямому запросу. Это не ускорит выполнение. Нужно как-то оптимизировать сам запрос и написать свою функцию получения опций с фильтром (к примеру пропустить какие-то, ) типа: MygetProductOptions($result['product_id'],$filter); ну а в фильтре уже указывать группы опций, или прямо задать какие именно опции нужны. 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 Только что, nogocuHoBuk сказал: Нужно как-то оптимизировать сам запрос и написать свою функцию получения опций с фильтрами (к примеру пропустить какие-то) Мне по сути нужна только одна группа опций с id= 11 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 9 минут назад, nogocuHoBuk сказал: А если уменьшить количество товаров до 12, например? Уменьшил до 12 на страницу. Стало быстрее примерно в 2,5 раза. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 26 минут назад, DenKuzmin сказал: Мне по сути нужна только одна группа опций с id= 11 В catalog/model/catalog/product.php полностью копируете функцию getProductOptions() В скопированной функции переименовываете название на MygetProductOptions и после $product_id добавляете ещё один параметр - $option_id можно с дефолтным значением: Получится так: public function MygetProductOptions($product_id,$option_id = 11) { А в строке запроса, где $product_option_query = ... добавляете фильтр по опции, т.е. перед po.product_id ставите проверку Получится примерно так: было WHERE po.product_id стало: WHERE o.option_id = '" . (int)$option_id . "' AND po.product_id Итоговая функция: public function MygetProductOptions($product_id, $option_id = 11) { $product_option_data = array(); $product_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE o.option_id = '" . (int)$option_id . "' AND po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order"); foreach ($product_option_query->rows as $product_option) { $product_option_value_data = array(); $product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY ov.sort_order"); foreach ($product_option_value_query->rows as $product_option_value) { $product_option_value_data[] = array( 'product_option_value_id' => $product_option_value['product_option_value_id'], 'option_value_id' => $product_option_value['option_value_id'], 'name' => $product_option_value['name'], 'image' => $product_option_value['image'], 'quantity' => $product_option_value['quantity'], 'subtract' => $product_option_value['subtract'], 'price' => $product_option_value['price'], 'price_prefix' => $product_option_value['price_prefix'], 'weight' => $product_option_value['weight'], 'weight_prefix' => $product_option_value['weight_prefix'] ); } $product_option_data[] = array( 'product_option_id' => $product_option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $product_option['option_id'], 'name' => $product_option['name'], 'type' => $product_option['type'], 'value' => $product_option['value'], 'required' => $product_option['required'] ); } return $product_option_data; } Ну и теперь в контроллере вызывайте вместо $options = $this->model_catalog_product->getProductOptions($result['product_id']); нужно заменить на $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); А если нужно сменить в запросе группу, то так: $options = $this->model_catalog_product->MygetProductOptions($result['product_id'],12); Т.е. запрос будет по группе 12 2 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 50 минут назад, nogocuHoBuk сказал: А в строке запроса, где $product_option_query = У меня нет $product_option_query в product.php osstore 2.3 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 4 минуты назад, DenKuzmin сказал: У меня нет $product_option_query в product.php точно тут смотрите? 55 минут назад, nogocuHoBuk сказал: В catalog/model/catalog/product.php 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 21 минуту назад, nogocuHoBuk сказал: точно тут смотрите? Блин, не там смотрел. В контроллер так? Спойлер $options = array(); foreach ($this->model_catalog_product->MygetProductOptions($result['product_id']) as $option) { $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$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']) { $oprice = $this->currency->format($this->tax->calculate($option_value['price'], $result['tax_class_id'], $this->config->get('config_tax') ? 'P' : false), $this->session->data['currency']); } else { $oprice = false; } $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $option_value['image'] ? $this->model_tool_image->resize($option_value['image'], 100, 100) : '', 'price' => $oprice, 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 11 минут назад, DenKuzmin сказал: В контроллер так? Я ж понятия не имею как Вы всё выводите и что обрабатываете. По кускам кода сложно "догадаться" Для начала верните как было у Вас в первом посте т.е. 2 часа назад, DenKuzmin сказал: В контроллере добавил: $options = $this->model_catalog_product->getProductOptions($result['product_id']); И в контроллере в $data['products'][] = array( добавил: 'options' => $options, Проблем в том, что при переходе в категорию жёстко долго грузится страница. Может минуту висеть. В чём проблема? Помогите. Только вместо $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Только эти правки увеличат скорость обработки (учитывая сколько у Вас групп опций и самих опций в каждом товаре), как минимум раз в 10. 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 6 минут назад, nogocuHoBuk сказал: $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Заработало. Спасибо большое! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы оставить комментарий Создать аккаунт Зарегистрируйтесь для получения аккаунта. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите здесь. Войти сейчас Поделиться Больше способов поделиться... Подписчики 4 Перейти к списку тем Похожие публикации [Поддержка] OAP PRO - AJAX опции как отдельные товары с автоматической связкой Автор: Speaker12, 22 октября 2023 опции варианты (и ещё 7) Теги: опции варианты комплекты серии группы модели связи ajax товары 16 ответов 1 116 просмотров Speaker12 В пятницу в 09:55 OAP PRO - AJAX опции как отдельные товары с автоматической связкой Автор: Speaker12, 22 октября 2023 опции варианты (и ещё 7) Теги: опции варианты комплекты серии группы модели связи ajax товары 0 комментариев 20 425 просмотров Speaker12 30 августа 2023 [Поддержка] OAP - опції як окремий товар 1 2 Автор: Speaker12, 13 июня 2023 опции варианты (и ещё 5) Теги: опции варианты комплекты товар цвет серии модели 36 ответов 2 586 просмотров Speaker12 18 февраля Универсальный массовый редактор товаров OpenCart! Найти и заменить! ChatGPT OpenAI. MULTIEDIT. Автор: Sha, 15 марта 2017 batch chat gpt (и ещё 101) Теги: batch chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart 0 комментариев 49 231 просмотр Sha 15 марта 2017 [Поддержка] Универсальный массовый редактор товаров OpenCart! Найти и заменить! ChatGPT OpenAI. MULTIEDIT. 1 2 3 4 10 Автор: Sha, 16 марта 2017 batch chat gpt (и ещё 101) Теги: batch chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart 240 ответов 43 884 просмотра COBECTb11 22 марта Сейчас на странице 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Поддержка и ответы на вопросы Помощь программистам и разработчикам Жёстко виснет сайт при переходе в категорию. Помогите разобраться. Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Deals – адаптивный универсальный шаблон Автор: octemplates Динамичесткая инфострока в шапке + позиция в макете для opencart\ocstore 2x, 3x Автор: Lito911 Единицы Измерения Товара Автор: RoS Opencart Product Search by Image Автор: slavoglo Простой массовый редактор цен. Fast Price Edit Автор: Sha × Уже зарегистрированы? Войти Регистрация Раздел покупок Назад Приобретенные дополнения Ваши счета Список желаний Альтернативные контакты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Документация История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Где покупать модули? Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности. Я принимаю
DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 16 минут назад, spectre сказал: потому что видимо много товаров и это прям больной запрос вам нужно получать опции более простым способом Вроде этого? Спойлер $options = array(); foreach ($this->model_catalog_product->getProductOptions($this->request->get['product_id']) as $option) { $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$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']) { $oprice = $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 { $oprice = false; } $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $option_value['image'] ? $this->model_tool_image->resize($option_value['image'], 100, 100) : '', 'price' => $oprice, 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 13 минут назад, DenKuzmin сказал: Вроде этого? Это Вы уже что-то совсем не то делаете. Сама getProductOptions всё это уже возвращает. 42 минуты назад, DenKuzmin сказал: Проблем в том, что при переходе в категорию жёстко долго грузится страница. Может минуту висеть. В чём проблема? Помогите. А сколько у Вас товаров в этой категории. И в среднем сколько опций на товар? 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 7 минут назад, nogocuHoBuk сказал: А сколько у Вас товаров в этой категории. И в среднем сколько опций на товар? Где-то 48 товаров на листе. Всего около 350 в категории. В каждом товаре примерно 5 групп опций. В группах от 6 до 40 опций. 8 минут назад, nogocuHoBuk сказал: Это Вы уже что-то совсем не то делаете. Сама getProductOptions всё это уже возвращает. Делаю по аналогии в файле product.php Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 5 минут назад, DenKuzmin сказал: Где-то 48 товаров на листе. Всего около 350 в категории. В каждом товаре примерно 5 групп опций. В группах от 6 до 40 опций. Общее количество в категории не играет роли. Запрос ограничен количеством на странице. А если уменьшить количество товаров до 12, например? Просто 48 товаров, обход циклом. В цикле 5 групп опций, да по 6-20 опций. Делать "по аналогии" - равносильно прямому запросу. Это не ускорит выполнение. Нужно как-то оптимизировать сам запрос и написать свою функцию получения опций с фильтром (к примеру пропустить какие-то, ) типа: MygetProductOptions($result['product_id'],$filter); ну а в фильтре уже указывать группы опций, или прямо задать какие именно опции нужны. 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 Только что, nogocuHoBuk сказал: Нужно как-то оптимизировать сам запрос и написать свою функцию получения опций с фильтрами (к примеру пропустить какие-то) Мне по сути нужна только одна группа опций с id= 11 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 9 минут назад, nogocuHoBuk сказал: А если уменьшить количество товаров до 12, например? Уменьшил до 12 на страницу. Стало быстрее примерно в 2,5 раза. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 26 минут назад, DenKuzmin сказал: Мне по сути нужна только одна группа опций с id= 11 В catalog/model/catalog/product.php полностью копируете функцию getProductOptions() В скопированной функции переименовываете название на MygetProductOptions и после $product_id добавляете ещё один параметр - $option_id можно с дефолтным значением: Получится так: public function MygetProductOptions($product_id,$option_id = 11) { А в строке запроса, где $product_option_query = ... добавляете фильтр по опции, т.е. перед po.product_id ставите проверку Получится примерно так: было WHERE po.product_id стало: WHERE o.option_id = '" . (int)$option_id . "' AND po.product_id Итоговая функция: public function MygetProductOptions($product_id, $option_id = 11) { $product_option_data = array(); $product_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE o.option_id = '" . (int)$option_id . "' AND po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order"); foreach ($product_option_query->rows as $product_option) { $product_option_value_data = array(); $product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY ov.sort_order"); foreach ($product_option_value_query->rows as $product_option_value) { $product_option_value_data[] = array( 'product_option_value_id' => $product_option_value['product_option_value_id'], 'option_value_id' => $product_option_value['option_value_id'], 'name' => $product_option_value['name'], 'image' => $product_option_value['image'], 'quantity' => $product_option_value['quantity'], 'subtract' => $product_option_value['subtract'], 'price' => $product_option_value['price'], 'price_prefix' => $product_option_value['price_prefix'], 'weight' => $product_option_value['weight'], 'weight_prefix' => $product_option_value['weight_prefix'] ); } $product_option_data[] = array( 'product_option_id' => $product_option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $product_option['option_id'], 'name' => $product_option['name'], 'type' => $product_option['type'], 'value' => $product_option['value'], 'required' => $product_option['required'] ); } return $product_option_data; } Ну и теперь в контроллере вызывайте вместо $options = $this->model_catalog_product->getProductOptions($result['product_id']); нужно заменить на $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); А если нужно сменить в запросе группу, то так: $options = $this->model_catalog_product->MygetProductOptions($result['product_id'],12); Т.е. запрос будет по группе 12 2 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 50 минут назад, nogocuHoBuk сказал: А в строке запроса, где $product_option_query = У меня нет $product_option_query в product.php osstore 2.3 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 4 минуты назад, DenKuzmin сказал: У меня нет $product_option_query в product.php точно тут смотрите? 55 минут назад, nogocuHoBuk сказал: В catalog/model/catalog/product.php 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 21 минуту назад, nogocuHoBuk сказал: точно тут смотрите? Блин, не там смотрел. В контроллер так? Спойлер $options = array(); foreach ($this->model_catalog_product->MygetProductOptions($result['product_id']) as $option) { $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$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']) { $oprice = $this->currency->format($this->tax->calculate($option_value['price'], $result['tax_class_id'], $this->config->get('config_tax') ? 'P' : false), $this->session->data['currency']); } else { $oprice = false; } $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $option_value['image'] ? $this->model_tool_image->resize($option_value['image'], 100, 100) : '', 'price' => $oprice, 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 11 минут назад, DenKuzmin сказал: В контроллер так? Я ж понятия не имею как Вы всё выводите и что обрабатываете. По кускам кода сложно "догадаться" Для начала верните как было у Вас в первом посте т.е. 2 часа назад, DenKuzmin сказал: В контроллере добавил: $options = $this->model_catalog_product->getProductOptions($result['product_id']); И в контроллере в $data['products'][] = array( добавил: 'options' => $options, Проблем в том, что при переходе в категорию жёстко долго грузится страница. Может минуту висеть. В чём проблема? Помогите. Только вместо $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Только эти правки увеличат скорость обработки (учитывая сколько у Вас групп опций и самих опций в каждом товаре), как минимум раз в 10. 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 6 минут назад, nogocuHoBuk сказал: $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Заработало. Спасибо большое! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы оставить комментарий Создать аккаунт Зарегистрируйтесь для получения аккаунта. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите здесь. Войти сейчас Поделиться Больше способов поделиться... Подписчики 4 Перейти к списку тем Похожие публикации [Поддержка] OAP PRO - AJAX опции как отдельные товары с автоматической связкой Автор: Speaker12, 22 октября 2023 опции варианты (и ещё 7) Теги: опции варианты комплекты серии группы модели связи ajax товары 16 ответов 1 116 просмотров Speaker12 В пятницу в 09:55 OAP PRO - AJAX опции как отдельные товары с автоматической связкой Автор: Speaker12, 22 октября 2023 опции варианты (и ещё 7) Теги: опции варианты комплекты серии группы модели связи ajax товары 0 комментариев 20 425 просмотров Speaker12 30 августа 2023 [Поддержка] OAP - опції як окремий товар 1 2 Автор: Speaker12, 13 июня 2023 опции варианты (и ещё 5) Теги: опции варианты комплекты товар цвет серии модели 36 ответов 2 586 просмотров Speaker12 18 февраля Универсальный массовый редактор товаров OpenCart! Найти и заменить! ChatGPT OpenAI. MULTIEDIT. Автор: Sha, 15 марта 2017 batch chat gpt (и ещё 101) Теги: batch chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart 0 комментариев 49 231 просмотр Sha 15 марта 2017 [Поддержка] Универсальный массовый редактор товаров OpenCart! Найти и заменить! ChatGPT OpenAI. MULTIEDIT. 1 2 3 4 10 Автор: Sha, 16 марта 2017 batch chat gpt (и ещё 101) Теги: batch chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart 240 ответов 43 884 просмотра COBECTb11 22 марта Сейчас на странице 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Поддержка и ответы на вопросы Помощь программистам и разработчикам Жёстко виснет сайт при переходе в категорию. Помогите разобраться. Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Deals – адаптивный универсальный шаблон Автор: octemplates Динамичесткая инфострока в шапке + позиция в макете для opencart\ocstore 2x, 3x Автор: Lito911 Единицы Измерения Товара Автор: RoS Opencart Product Search by Image Автор: slavoglo Простой массовый редактор цен. Fast Price Edit Автор: Sha × Уже зарегистрированы? Войти Регистрация Раздел покупок Назад Приобретенные дополнения Ваши счета Список желаний Альтернативные контакты Форум Новости ocStore Назад Официальный сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Скачать ocStore Документация История версий ocStore Блоги Модули Шаблоны Назад Бесплатные шаблоны Платные шаблоны Где покупать модули? Услуги FAQ OpenCart.Pro Назад Демо Купить Сравнение × Создать... Важная информация На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности. Я принимаю
DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 7 минут назад, nogocuHoBuk сказал: А сколько у Вас товаров в этой категории. И в среднем сколько опций на товар? Где-то 48 товаров на листе. Всего около 350 в категории. В каждом товаре примерно 5 групп опций. В группах от 6 до 40 опций. 8 минут назад, nogocuHoBuk сказал: Это Вы уже что-то совсем не то делаете. Сама getProductOptions всё это уже возвращает. Делаю по аналогии в файле product.php Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 5 минут назад, DenKuzmin сказал: Где-то 48 товаров на листе. Всего около 350 в категории. В каждом товаре примерно 5 групп опций. В группах от 6 до 40 опций. Общее количество в категории не играет роли. Запрос ограничен количеством на странице. А если уменьшить количество товаров до 12, например? Просто 48 товаров, обход циклом. В цикле 5 групп опций, да по 6-20 опций. Делать "по аналогии" - равносильно прямому запросу. Это не ускорит выполнение. Нужно как-то оптимизировать сам запрос и написать свою функцию получения опций с фильтром (к примеру пропустить какие-то, ) типа: MygetProductOptions($result['product_id'],$filter); ну а в фильтре уже указывать группы опций, или прямо задать какие именно опции нужны. 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 Только что, nogocuHoBuk сказал: Нужно как-то оптимизировать сам запрос и написать свою функцию получения опций с фильтрами (к примеру пропустить какие-то) Мне по сути нужна только одна группа опций с id= 11 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 9 минут назад, nogocuHoBuk сказал: А если уменьшить количество товаров до 12, например? Уменьшил до 12 на страницу. Стало быстрее примерно в 2,5 раза. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 26 минут назад, DenKuzmin сказал: Мне по сути нужна только одна группа опций с id= 11 В catalog/model/catalog/product.php полностью копируете функцию getProductOptions() В скопированной функции переименовываете название на MygetProductOptions и после $product_id добавляете ещё один параметр - $option_id можно с дефолтным значением: Получится так: public function MygetProductOptions($product_id,$option_id = 11) { А в строке запроса, где $product_option_query = ... добавляете фильтр по опции, т.е. перед po.product_id ставите проверку Получится примерно так: было WHERE po.product_id стало: WHERE o.option_id = '" . (int)$option_id . "' AND po.product_id Итоговая функция: public function MygetProductOptions($product_id, $option_id = 11) { $product_option_data = array(); $product_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE o.option_id = '" . (int)$option_id . "' AND po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order"); foreach ($product_option_query->rows as $product_option) { $product_option_value_data = array(); $product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY ov.sort_order"); foreach ($product_option_value_query->rows as $product_option_value) { $product_option_value_data[] = array( 'product_option_value_id' => $product_option_value['product_option_value_id'], 'option_value_id' => $product_option_value['option_value_id'], 'name' => $product_option_value['name'], 'image' => $product_option_value['image'], 'quantity' => $product_option_value['quantity'], 'subtract' => $product_option_value['subtract'], 'price' => $product_option_value['price'], 'price_prefix' => $product_option_value['price_prefix'], 'weight' => $product_option_value['weight'], 'weight_prefix' => $product_option_value['weight_prefix'] ); } $product_option_data[] = array( 'product_option_id' => $product_option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $product_option['option_id'], 'name' => $product_option['name'], 'type' => $product_option['type'], 'value' => $product_option['value'], 'required' => $product_option['required'] ); } return $product_option_data; } Ну и теперь в контроллере вызывайте вместо $options = $this->model_catalog_product->getProductOptions($result['product_id']); нужно заменить на $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); А если нужно сменить в запросе группу, то так: $options = $this->model_catalog_product->MygetProductOptions($result['product_id'],12); Т.е. запрос будет по группе 12 2 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 50 минут назад, nogocuHoBuk сказал: А в строке запроса, где $product_option_query = У меня нет $product_option_query в product.php osstore 2.3 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 4 минуты назад, DenKuzmin сказал: У меня нет $product_option_query в product.php точно тут смотрите? 55 минут назад, nogocuHoBuk сказал: В catalog/model/catalog/product.php 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 21 минуту назад, nogocuHoBuk сказал: точно тут смотрите? Блин, не там смотрел. В контроллер так? Спойлер $options = array(); foreach ($this->model_catalog_product->MygetProductOptions($result['product_id']) as $option) { $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$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']) { $oprice = $this->currency->format($this->tax->calculate($option_value['price'], $result['tax_class_id'], $this->config->get('config_tax') ? 'P' : false), $this->session->data['currency']); } else { $oprice = false; } $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $option_value['image'] ? $this->model_tool_image->resize($option_value['image'], 100, 100) : '', 'price' => $oprice, 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 11 минут назад, DenKuzmin сказал: В контроллер так? Я ж понятия не имею как Вы всё выводите и что обрабатываете. По кускам кода сложно "догадаться" Для начала верните как было у Вас в первом посте т.е. 2 часа назад, DenKuzmin сказал: В контроллере добавил: $options = $this->model_catalog_product->getProductOptions($result['product_id']); И в контроллере в $data['products'][] = array( добавил: 'options' => $options, Проблем в том, что при переходе в категорию жёстко долго грузится страница. Может минуту висеть. В чём проблема? Помогите. Только вместо $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Только эти правки увеличат скорость обработки (учитывая сколько у Вас групп опций и самих опций в каждом товаре), как минимум раз в 10. 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 6 минут назад, nogocuHoBuk сказал: $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Заработало. Спасибо большое! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы оставить комментарий Создать аккаунт Зарегистрируйтесь для получения аккаунта. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите здесь. Войти сейчас Поделиться Больше способов поделиться... Подписчики 4 Перейти к списку тем Похожие публикации [Поддержка] OAP PRO - AJAX опции как отдельные товары с автоматической связкой Автор: Speaker12, 22 октября 2023 опции варианты (и ещё 7) Теги: опции варианты комплекты серии группы модели связи ajax товары 16 ответов 1 116 просмотров Speaker12 В пятницу в 09:55 OAP PRO - AJAX опции как отдельные товары с автоматической связкой Автор: Speaker12, 22 октября 2023 опции варианты (и ещё 7) Теги: опции варианты комплекты серии группы модели связи ajax товары 0 комментариев 20 425 просмотров Speaker12 30 августа 2023 [Поддержка] OAP - опції як окремий товар 1 2 Автор: Speaker12, 13 июня 2023 опции варианты (и ещё 5) Теги: опции варианты комплекты товар цвет серии модели 36 ответов 2 586 просмотров Speaker12 18 февраля Универсальный массовый редактор товаров OpenCart! Найти и заменить! ChatGPT OpenAI. MULTIEDIT. Автор: Sha, 15 марта 2017 batch chat gpt (и ещё 101) Теги: batch chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart 0 комментариев 49 231 просмотр Sha 15 марта 2017 [Поддержка] Универсальный массовый редактор товаров OpenCart! Найти и заменить! ChatGPT OpenAI. MULTIEDIT. 1 2 3 4 10 Автор: Sha, 16 марта 2017 batch chat gpt (и ещё 101) Теги: batch chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart 240 ответов 43 884 просмотра COBECTb11 22 марта Сейчас на странице 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Поддержка и ответы на вопросы Помощь программистам и разработчикам Жёстко виснет сайт при переходе в категорию. Помогите разобраться. Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Deals – адаптивный универсальный шаблон Автор: octemplates Динамичесткая инфострока в шапке + позиция в макете для opencart\ocstore 2x, 3x Автор: Lito911 Единицы Измерения Товара Автор: RoS Opencart Product Search by Image Автор: slavoglo Простой массовый редактор цен. Fast Price Edit Автор: Sha
DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 Только что, nogocuHoBuk сказал: Нужно как-то оптимизировать сам запрос и написать свою функцию получения опций с фильтрами (к примеру пропустить какие-то) Мне по сути нужна только одна группа опций с id= 11 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 9 минут назад, nogocuHoBuk сказал: А если уменьшить количество товаров до 12, например? Уменьшил до 12 на страницу. Стало быстрее примерно в 2,5 раза. Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 26 минут назад, DenKuzmin сказал: Мне по сути нужна только одна группа опций с id= 11 В catalog/model/catalog/product.php полностью копируете функцию getProductOptions() В скопированной функции переименовываете название на MygetProductOptions и после $product_id добавляете ещё один параметр - $option_id можно с дефолтным значением: Получится так: public function MygetProductOptions($product_id,$option_id = 11) { А в строке запроса, где $product_option_query = ... добавляете фильтр по опции, т.е. перед po.product_id ставите проверку Получится примерно так: было WHERE po.product_id стало: WHERE o.option_id = '" . (int)$option_id . "' AND po.product_id Итоговая функция: public function MygetProductOptions($product_id, $option_id = 11) { $product_option_data = array(); $product_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE o.option_id = '" . (int)$option_id . "' AND po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order"); foreach ($product_option_query->rows as $product_option) { $product_option_value_data = array(); $product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY ov.sort_order"); foreach ($product_option_value_query->rows as $product_option_value) { $product_option_value_data[] = array( 'product_option_value_id' => $product_option_value['product_option_value_id'], 'option_value_id' => $product_option_value['option_value_id'], 'name' => $product_option_value['name'], 'image' => $product_option_value['image'], 'quantity' => $product_option_value['quantity'], 'subtract' => $product_option_value['subtract'], 'price' => $product_option_value['price'], 'price_prefix' => $product_option_value['price_prefix'], 'weight' => $product_option_value['weight'], 'weight_prefix' => $product_option_value['weight_prefix'] ); } $product_option_data[] = array( 'product_option_id' => $product_option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $product_option['option_id'], 'name' => $product_option['name'], 'type' => $product_option['type'], 'value' => $product_option['value'], 'required' => $product_option['required'] ); } return $product_option_data; } Ну и теперь в контроллере вызывайте вместо $options = $this->model_catalog_product->getProductOptions($result['product_id']); нужно заменить на $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); А если нужно сменить в запросе группу, то так: $options = $this->model_catalog_product->MygetProductOptions($result['product_id'],12); Т.е. запрос будет по группе 12 2 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 50 минут назад, nogocuHoBuk сказал: А в строке запроса, где $product_option_query = У меня нет $product_option_query в product.php osstore 2.3 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 4 минуты назад, DenKuzmin сказал: У меня нет $product_option_query в product.php точно тут смотрите? 55 минут назад, nogocuHoBuk сказал: В catalog/model/catalog/product.php 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 21 минуту назад, nogocuHoBuk сказал: точно тут смотрите? Блин, не там смотрел. В контроллер так? Спойлер $options = array(); foreach ($this->model_catalog_product->MygetProductOptions($result['product_id']) as $option) { $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$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']) { $oprice = $this->currency->format($this->tax->calculate($option_value['price'], $result['tax_class_id'], $this->config->get('config_tax') ? 'P' : false), $this->session->data['currency']); } else { $oprice = false; } $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $option_value['image'] ? $this->model_tool_image->resize($option_value['image'], 100, 100) : '', 'price' => $oprice, 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 11 минут назад, DenKuzmin сказал: В контроллер так? Я ж понятия не имею как Вы всё выводите и что обрабатываете. По кускам кода сложно "догадаться" Для начала верните как было у Вас в первом посте т.е. 2 часа назад, DenKuzmin сказал: В контроллере добавил: $options = $this->model_catalog_product->getProductOptions($result['product_id']); И в контроллере в $data['products'][] = array( добавил: 'options' => $options, Проблем в том, что при переходе в категорию жёстко долго грузится страница. Может минуту висеть. В чём проблема? Помогите. Только вместо $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Только эти правки увеличат скорость обработки (учитывая сколько у Вас групп опций и самих опций в каждом товаре), как минимум раз в 10. 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 6 минут назад, nogocuHoBuk сказал: $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Заработало. Спасибо большое! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы оставить комментарий Создать аккаунт Зарегистрируйтесь для получения аккаунта. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите здесь. Войти сейчас Поделиться Больше способов поделиться... Подписчики 4 Перейти к списку тем Похожие публикации [Поддержка] OAP PRO - AJAX опции как отдельные товары с автоматической связкой Автор: Speaker12, 22 октября 2023 опции варианты (и ещё 7) Теги: опции варианты комплекты серии группы модели связи ajax товары 16 ответов 1 116 просмотров Speaker12 В пятницу в 09:55 OAP PRO - AJAX опции как отдельные товары с автоматической связкой Автор: Speaker12, 22 октября 2023 опции варианты (и ещё 7) Теги: опции варианты комплекты серии группы модели связи ajax товары 0 комментариев 20 425 просмотров Speaker12 30 августа 2023 [Поддержка] OAP - опції як окремий товар 1 2 Автор: Speaker12, 13 июня 2023 опции варианты (и ещё 5) Теги: опции варианты комплекты товар цвет серии модели 36 ответов 2 586 просмотров Speaker12 18 февраля Универсальный массовый редактор товаров OpenCart! Найти и заменить! ChatGPT OpenAI. MULTIEDIT. Автор: Sha, 15 марта 2017 batch chat gpt (и ещё 101) Теги: batch chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart 0 комментариев 49 231 просмотр Sha 15 марта 2017 [Поддержка] Универсальный массовый редактор товаров OpenCart! Найти и заменить! ChatGPT OpenAI. MULTIEDIT. 1 2 3 4 10 Автор: Sha, 16 марта 2017 batch chat gpt (и ещё 101) Теги: batch chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart 240 ответов 43 884 просмотра COBECTb11 22 марта Сейчас на странице 0 пользователей Нет пользователей, просматривающих эту страницу. Последние темы Последние дополнения Последние новости Вся активность Главная Поддержка и ответы на вопросы Помощь программистам и разработчикам Жёстко виснет сайт при переходе в категорию. Помогите разобраться.
DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 50 минут назад, nogocuHoBuk сказал: А в строке запроса, где $product_option_query = У меня нет $product_option_query в product.php osstore 2.3 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 4 минуты назад, DenKuzmin сказал: У меня нет $product_option_query в product.php точно тут смотрите? 55 минут назад, nogocuHoBuk сказал: В catalog/model/catalog/product.php 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 21 минуту назад, nogocuHoBuk сказал: точно тут смотрите? Блин, не там смотрел. В контроллер так? Спойлер $options = array(); foreach ($this->model_catalog_product->MygetProductOptions($result['product_id']) as $option) { $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$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']) { $oprice = $this->currency->format($this->tax->calculate($option_value['price'], $result['tax_class_id'], $this->config->get('config_tax') ? 'P' : false), $this->session->data['currency']); } else { $oprice = false; } $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $option_value['image'] ? $this->model_tool_image->resize($option_value['image'], 100, 100) : '', 'price' => $oprice, 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 11 минут назад, DenKuzmin сказал: В контроллер так? Я ж понятия не имею как Вы всё выводите и что обрабатываете. По кускам кода сложно "догадаться" Для начала верните как было у Вас в первом посте т.е. 2 часа назад, DenKuzmin сказал: В контроллере добавил: $options = $this->model_catalog_product->getProductOptions($result['product_id']); И в контроллере в $data['products'][] = array( добавил: 'options' => $options, Проблем в том, что при переходе в категорию жёстко долго грузится страница. Может минуту висеть. В чём проблема? Помогите. Только вместо $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Только эти правки увеличат скорость обработки (учитывая сколько у Вас групп опций и самих опций в каждом товаре), как минимум раз в 10. 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 6 минут назад, nogocuHoBuk сказал: $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Заработало. Спасибо большое! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы оставить комментарий Создать аккаунт Зарегистрируйтесь для получения аккаунта. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите здесь. Войти сейчас Поделиться Больше способов поделиться... Подписчики 4 Перейти к списку тем Похожие публикации [Поддержка] OAP PRO - AJAX опции как отдельные товары с автоматической связкой Автор: Speaker12, 22 октября 2023 опции варианты (и ещё 7) Теги: опции варианты комплекты серии группы модели связи ajax товары 16 ответов 1 116 просмотров Speaker12 В пятницу в 09:55 OAP PRO - AJAX опции как отдельные товары с автоматической связкой Автор: Speaker12, 22 октября 2023 опции варианты (и ещё 7) Теги: опции варианты комплекты серии группы модели связи ajax товары 0 комментариев 20 425 просмотров Speaker12 30 августа 2023 [Поддержка] OAP - опції як окремий товар 1 2 Автор: Speaker12, 13 июня 2023 опции варианты (и ещё 5) Теги: опции варианты комплекты товар цвет серии модели 36 ответов 2 586 просмотров Speaker12 18 февраля Универсальный массовый редактор товаров OpenCart! Найти и заменить! ChatGPT OpenAI. MULTIEDIT. Автор: Sha, 15 марта 2017 batch chat gpt (и ещё 101) Теги: batch chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart 0 комментариев 49 231 просмотр Sha 15 марта 2017 [Поддержка] Универсальный массовый редактор товаров OpenCart! Найти и заменить! ChatGPT OpenAI. MULTIEDIT. 1 2 3 4 10 Автор: Sha, 16 марта 2017 batch chat gpt (и ещё 101) Теги: batch chat gpt pro атрибуты опции массовое редактирование editor products скидки мета мета-теги пакетное редактирование товаров админка групповое массовое массовая продукты быстрое изменение добавление добавить цена цены опций акции управление статус обработка категорий премиум групповая скидка товар стоимость валюта прайс price акция категория корзина продажа продажи баллы отзывы статьи галерея заказ быстрый обновление цены ocmod atribute модели автодополнение снипеты скорость модуль блоки форма product наполнение интернетмагазина обновление товар опции в категории универсальный рекомендуем opencart фильтр filter регистрация опция изменить товары категории производители українською українська chatgpt chatbots multi multiedit search replace replacer find search and replace find and replace edit seo faq seo faq filter products filter opencart filter for brands filter for products filter pro filteroc ocfilter oc filter open openai opencart ai ai opencart 240 ответов 43 884 просмотра COBECTb11 22 марта Сейчас на странице 0 пользователей Нет пользователей, просматривающих эту страницу.
DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 21 минуту назад, nogocuHoBuk сказал: точно тут смотрите? Блин, не там смотрел. В контроллер так? Спойлер $options = array(); foreach ($this->model_catalog_product->MygetProductOptions($result['product_id']) as $option) { $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$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']) { $oprice = $this->currency->format($this->tax->calculate($option_value['price'], $result['tax_class_id'], $this->config->get('config_tax') ? 'P' : false), $this->session->data['currency']); } else { $oprice = false; } $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $option_value['image'] ? $this->model_tool_image->resize($option_value['image'], 100, 100) : '', 'price' => $oprice, 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
nogocuHoBuk Опубликовано: 1 ноября 2021 Поделиться Опубликовано: 1 ноября 2021 11 минут назад, DenKuzmin сказал: В контроллер так? Я ж понятия не имею как Вы всё выводите и что обрабатываете. По кускам кода сложно "догадаться" Для начала верните как было у Вас в первом посте т.е. 2 часа назад, DenKuzmin сказал: В контроллере добавил: $options = $this->model_catalog_product->getProductOptions($result['product_id']); И в контроллере в $data['products'][] = array( добавил: 'options' => $options, Проблем в том, что при переходе в категорию жёстко долго грузится страница. Может минуту висеть. В чём проблема? Помогите. Только вместо $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Только эти правки увеличат скорость обработки (учитывая сколько у Вас групп опций и самих опций в каждом товаре), как минимум раз в 10. 1 Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 6 минут назад, nogocuHoBuk сказал: $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Заработало. Спасибо большое! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться... Создайте аккаунт или войдите в него для комментирования Вы должны быть пользователем, чтобы оставить комментарий Создать аккаунт Зарегистрируйтесь для получения аккаунта. Это просто! Зарегистрировать аккаунт Войти Уже зарегистрированы? Войдите здесь. Войти сейчас Поделиться Больше способов поделиться... Подписчики 4
DenKuzmin Опубликовано: 1 ноября 2021 Автор Поделиться Опубликовано: 1 ноября 2021 6 минут назад, nogocuHoBuk сказал: $options = $this->model_catalog_product->getProductOptions($result['product_id']); будет $options = $this->model_catalog_product->MygetProductOptions($result['product_id']); Заработало. Спасибо большое! Ссылка на комментарий Поделиться на других сайтах Больше способов поделиться...
Рекомендованные сообщения