Nash Опубликовано 3.04.2023 в 11:17 Поделиться Опубликовано 3.04.2023 в 11:17 Добрый день! Нужна помощь! Есть в магазине много-много атрибутов больше 1000шт в разных группах. Необходимо вывести определенные атрибуты (3-5 шт) на странице категории. В админке, в товаре, реализовано поле "статус атрибута" в виде чекбокса, по которому в шаблоне мы выводим определенные атрибуты. Но на витрине магазина (28000 товаров), происходят жуткие лаги, долго грузится страница. Реализован вывод атрибутов на витрине следующим образом: В контроллере category.php, в массиве products: 'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']), В модели Product.php добавлено поле status public function getProductAttributes($product_id) { $product_attribute_group_data = array(); $product_attribute_group_query = $this->db->query("SELECT ag.attribute_group_id, agd.name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id) WHERE pa.product_id = '" . (int)$product_id . "' AND agd.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY ag.attribute_group_id ORDER BY ag.sort_order, agd.name"); foreach ($product_attribute_group_query->rows as $product_attribute_group) { $product_attribute_data = array(); $product_attribute_query = $this->db->query("SELECT a.attribute_id, a.image, ad.name, pa.text, pa.status FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE pa.product_id = '" . (int)$product_id . "' AND a.attribute_group_id = '" . (int)$product_attribute_group['attribute_group_id'] . "' AND ad.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pa.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY a.sort_order, ad.name"); $this->load->model('tool/image'); foreach ($product_attribute_query->rows as $product_attribute) { $product_attribute_data[] = array( 'attribute_id' => $product_attribute['attribute_id'], 'name' => $product_attribute['name'], 'image' => $product_attribute['image'] ? $this->model_tool_image->resize($product_attribute['image'], 100, 100) : false, 'text' => $product_attribute['text'], 'status' => $product_attribute['status'] ); } $product_attribute_group_data[] = array( 'attribute_group_id' => $product_attribute_group['attribute_group_id'], 'name' => $product_attribute_group['name'], 'attribute' => $product_attribute_data ); } return $product_attribute_group_data; } в шаблоне tpl <?php if($product['attribute_groups']) { ?> <div class="prod_atr" itemprop="description"> <?php foreach($product['attribute_groups'] as $attribute_group) { if(!strpos($attribute_group['name'], "—")) {?> <?php foreach($attribute_group['attribute'] as $attribute) { if(($attribute['status']) != 0 ){ ?> <div class="atr_item"> <div class="name_atr"><?php echo $attribute['name']; ?>:</div> <div class="text_atr"><?php echo $attribute['text']; ?></div> </div> <?php } } } }?> </div> <?php } ?> как можно оптимизировать вывод атрибутов в категории? 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
AlexDW Опубликовано 3.04.2023 в 12:01 Поделиться Опубликовано 3.04.2023 в 12:01 вообще, затея пихать все данные товара на вывод в каталогах - так себе пробуйте добавить индекс на attribute_group_id в таблице attribute переделайте выборку атрибутов с учетом статуса думайте над лимитом выборки и кешированием результатов 1 Цитата модули для удобной работы с Opencart Ссылка на комментарий Поделиться на другие сайты Поделиться
halfhope Опубликовано 5.04.2023 в 17:45 Поделиться Опубликовано 5.04.2023 в 17:45 Добрый) Есть вариант получения опций и аттрибутов одним запросом. Код от версии к версии может отличаться, так что, возможно, потребуется адаптация. https://shth.ru/оптимизация/оптимизация-опций-и-аттрибутов-в-opencart-901/ 1 Цитата Телеграмм - halfhope. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.