Перейти к содержанию

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


Рекомендуемые сообщения

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

 

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

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

 

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

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

 

Ссылка на комментарий
Поделиться на другие сайты

Добрый)

 

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

 

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

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...