Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Вывод атрибутов


Recommended Posts

Добрый день, есть модель:  

 public function getAttrbyProductId($product_id, $attribute_id) {
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "' AND attribute_id = '" . (int)$attribute_id . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'");

        if ($query->num_rows) {
            return $query->row['text'];
        } else {
            return false;
        }
    }

В контроллере создаю массив:
              

 $getAttrs = array();

                $mileage = $this->model_catalog_product->getAttrbyProductId($result['product_id'], 17);
                $fuel = $this->model_catalog_product->getAttrbyProductId($result['product_id'], 21);
                $engine = $this->model_catalog_product->getAttrbyProductId($result['product_id'], 23);

                $getAttrs = [
                        'mileage' => $mileage,
                        'fuel' => $fuel,
                        'engine' => $engine,
                ];

Подключаю

 $data['products'][] = array(

'attr'      => $getAttrs,

);

В итоге в шаблоне категорий вывожу удобно в нужном месте нужный атрибут <?php echo $product['attr']['fuel']; ?>

Цель: создать массив с понятными ключами, для вывода нужных атрибутов в верстке по каждому товару, по итогу сейчас все работает, но смущает что отсылает 1 запрос на 1 атрибут, в массиве может быть и 30 атрибутов, а это 30 запросов на каждый товар, а если на странице 10 товаров, то это прилично + запросов и нагрузка... Подскажите пожалуйста, как можно оптимизировать подобную затею, чтобы укладываться в идеале в 1 запрос, или хотя бы 2-3, если это реально конечно... Заранее спасибо!

Надіслати
Поділитися на інших сайтах


10 часов назад, AndreLisif сказал:

но смущает что отсылает 1 запрос на 1 атрибут, в массиве может быть и 30 атрибутов, а это 30 запросов на каждый товар, а если на странице 10 товаров, то это прилично

так доставайте одним запросом, в чем проблема?

есть стандартyый метод

 $this->model_catalog_product->getProductAttributes($product_id);

 

  • +1 1
Надіслати
Поділитися на інших сайтах

1 час назад, fanatic сказал:

так доставайте одним запросом, в чем проблема?

есть стандартyый метод


 $this->model_catalog_product->getProductAttributes($product_id);

 

Спасибо, не знал о данном методе, теперь все гуд)

Надіслати
Поділитися на інших сайтах


24 минуты назад, halfhope сказал:

Вот еще (в комментариях правильный код):

И индексы добавить не забудьте (indexer)

 

Круто, спасибо большое за подсказку!

  • +1 1
Надіслати
Поділитися на інших сайтах


	public function getProductAttr($getAttr){
		$getCustomAttr = array();

		if($getAttr){
			foreach ($getAttr as $ak => $getAttr) {
				foreach ($getAttr['attribute'] as $k => $attr) {
					if($attr['attribute_id'] == 17){
						$getCustomAttr['mileage'] = $attr['text'];
					}
					if($attr['attribute_id'] == 21){
						$getCustomAttr['fuel'] = $attr['text'];
					}
					if($attr['attribute_id'] == 23){
						$getCustomAttr['engine'] = $attr['text'];
					}
				}
			}
		}

		return $getCustomAttr;

	}

Я написал такую функцию , теперь передаю
 

$getAttr = $this->model_catalog_product->getProductAttributes($result['product_id']);

$data['products'][] = array(

'attr'      => $this->custom->getProductAttr($getAttr),

);

В итоге в 1 месте создал массив атрибутов с понятными для себя ключами, и могу юзать в любом нужном месте просто вызвав функцию в контроллере, а в шаблоне вывести в нужном месте конкретный атрибут , например <?php echo $product['attr']['engine']; ?> , и + благодаря getProductAttributes все это посылает мало запросов, спасибо!

Змінено користувачем AndreLisif
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.