Nash Posted April 3, 2023 at 11:17 AM Share Posted April 3, 2023 at 11:17 AM Добрый день! Нужна помощь! Есть в магазине много-много атрибутов больше 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 Quote Link to comment Share on other sites More sharing options...
AlexDW Posted April 3, 2023 at 12:01 PM Share Posted April 3, 2023 at 12:01 PM вообще, затея пихать все данные товара на вывод в каталогах - так себе пробуйте добавить индекс на attribute_group_id в таблице attribute переделайте выборку атрибутов с учетом статуса думайте над лимитом выборки и кешированием результатов 1 Quote модули для удобной работы с Opencart Link to comment Share on other sites More sharing options...
halfhope Posted April 5, 2023 at 05:45 PM Share Posted April 5, 2023 at 05:45 PM Добрый) Есть вариант получения опций и аттрибутов одним запросом. Код от версии к версии может отличаться, так что, возможно, потребуется адаптация. https://shth.ru/оптимизация/оптимизация-опций-и-аттрибутов-в-opencart-901/ 1 Quote Телеграмм - halfhope. Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.