Jump to content

Атрибуты в категории тормозят загрузку страницы


Nash
 Share

Recommended Posts

Добрый день! Нужна помощь!
Есть в магазине много-много атрибутов больше 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 } ?>

 

как можно оптимизировать вывод атрибутов в категории?

Link to comment
Share on other sites

вообще, затея пихать все данные товара на вывод в каталогах - так себе

 

пробуйте добавить индекс на attribute_group_id в таблице attribute

 

переделайте выборку атрибутов с учетом статуса

думайте над лимитом выборки и кешированием результатов

 

Link to comment
Share on other sites

Добрый)

 

Есть вариант получения опций и аттрибутов одним запросом. Код от версии к версии может отличаться, так что, возможно, потребуется адаптация.

 

https://shth.ru/оптимизация/оптимизация-опций-и-аттрибутов-в-opencart-901/

Телеграмм - halfhope. 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...