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

Как вывести в php-файле lowPrice, highPrice, offerCount ?


Recommended Posts

Делаю разметку для категории товаров AggregateOffer, Вопрос Как вывести в php-файле lowPrice, highPrice, offerCount ? 

В контролере нашёл переменные $product_total - вроде как в ней offerCount (количество товаров в категории) 
также есть фильтр "внизу" как я понимаю из него мне нужно вытянуть "p.price-asc" и "p.price-desc".


В php файле при попытке вывести $product_total - ничего не показывает ( <p itemprop="offerCount"><?php echo $product_total; ?></p>)
в контролере он описан вот так: $product_total = $this->model_catalog_product->getTotalProducts($filter_data);

$data['sorts'][] = array(
                'text'  => $this->language->get('text_price_asc'),
                'value' => 'p.price-asc',
                'href'  => $link . '?sort=p.price&order=asc' . $url
            );

            $data['sorts'][] = array(
                'text'  => $this->language->get('text_price_desc'),
                'value' => 'p.price-desc',
                'href'  => $link . '?sort=p.price&order=desc' . $url
            );

 

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


Не передается эта переменная в tpl

 

в контроллере надо добавить после:
 

$product_total = $this->model_catalog_product->getTotalProducts($filter_data);

вот это:

$data['product_total'] = $product_total;

 

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

32 минуты назад, ukrmedsys сказал:

Делаю разметку для категории товаров AggregateOffer, Вопрос Как вывести в php-файле lowPrice, highPrice, offerCount ? 

В контролере нашёл переменные $product_total - вроде как в ней offerCount (количество товаров в категории) 
также есть фильтр "внизу" как я понимаю из него мне нужно вытянуть "p.price-asc" и "p.price-desc".


В php файле при попытке вывести $product_total - ничего не показывает ( <p itemprop="offerCount"><?php echo $product_total; ?></p>)
в контролере он описан вот так: $product_total = $this->model_catalog_product->getTotalProducts($filter_data);

$data['sorts'][] = array(
                'text'  => $this->language->get('text_price_asc'),
                'value' => 'p.price-asc',
                'href'  => $link . '?sort=p.price&order=asc' . $url
            );

            $data['sorts'][] = array(
                'text'  => $this->language->get('text_price_desc'),
                'value' => 'p.price-desc',
                'href'  => $link . '?sort=p.price&order=desc' . $url
            );

 

ВАм нужно выводить не отфильтрованное количество, и не мин-макс цену отфильтрованных товаров, а всех товаров данной категории. 

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


7 минут назад, niger сказал:

ВАм нужно выводить не отфильтрованное количество, и не мин-макс цену отфильтрованных товаров, а всех товаров данной категории. 

Да а как это сделать ? 

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


Для получения мин и макс цен всех товаров категории придется постараться.
Как-то так навскидку, в контроллере.
 

// получение минимальной цены
$filter_min_data = array(
  'filter_category_id' => $category_id,
  'sort'               => 'p.price',
  'order'              => 'ASC',
  'start'              => 0,
  'limit'              => 1
);
            
$min_products = $this->model_catalog_product->getProducts($filter_min_data);
if (!empty($min_products)) {
	$min_products = array_pop($min_products);
	if ((float)$min_products['special']) {
		$data['min_price'] = (float)$min_products['special'];
	} else {
		$data['min_price'] = (float)$min_products['price'];
	}
} else {
	$data['min_price'] = 0;
}
            
// получение максимальной цены
$filter_max_data = array(
  'filter_category_id' => $category_id,
  'sort'               => 'p.price',
  'order'              => 'DESC',
  'start'              => 0,
  'limit'              => 1
);
            
$max_products = $this->model_catalog_product->getProducts($filter_max_data);
if (!empty($max_products)) {
	$max_products = array_pop($max_products);
	if ((float)$max_products['special']) {
		$data['max_price'] = (float)$max_products['special'];
	} else {
		$data['max_price'] = (float)$max_products['price'];
	}
} else {
	$data['max_price'] = 0;
}

 

P.S. Поправил..

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

48 минут назад, Prooksius сказал:

Для получения мин и макс цен всех товаров категории придется постараться.
Как-то так навскидку, в контроллере.
 


// получение минимальной цены
$filter_min_data = array(
  'filter_category_id' => $category_id,
  'sort'               => 'p.price',
  'order'              => 'ASC',
  'start'              => 0,
  'limit'              => 1
);
            
$min_products = $this->model_catalog_product->getProducts($filter_min_data);
if (!empty($min_products)) {
	$min_products = array_pop($min_products);
	if ((float)$min_products['special']) {
		$data['min_price'] = (float)$min_products['special'];
	} else {
		$data['min_price'] = (float)$min_products['price'];
	}
} else {
	$data['min_price'] = 0;
}
            
// получение максимальной цены
$filter_max_data = array(
  'filter_category_id' => $category_id,
  'sort'               => 'p.price',
  'order'              => 'DESC',
  'start'              => 0,
  'limit'              => 1
);
            
$max_products = $this->model_catalog_product->getProducts($filter_max_data);
if (!empty($max_products)) {
	$max_products = array_pop($max_products);
	if ((float)$max_products['special']) {
		$data['max_price'] = (float)$max_products['special'];
	} else {
		$data['max_price'] = (float)$max_products['price'];
	}
} else {
	$data['max_price'] = 0;
}

 

P.S. Поправил..

на вскидку как-то так, согласен. 

Только я бы все же вынес это в отдельные методы в модели, получение минимальной и максимальной цены. Их можно успешно кешнуть и положить на недельку, а не с каждым заходом дергать запрос с кучей джоинов

Ну и спец и дисконт цена - не нужна, гугл эти данные в сниппете не каждый день обновляет. 

и Вы еще забыли привести к формату min_price и max_price, как-то так вроде 

 

$data['maxPrice'] = $this->currency->format((float)$max_products['price'], $this->session->data['currency'],'',false);

 

Но как быстрое решение и навскидку, согласен - это оно

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


Да согласен, это правильнее.
Насчет приведения форматом - не знаю, по-моему там нужна именно float price.
И наверное надо еще через tax прогонять, забыл..

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

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

Для получения мин и макс цен всех товаров категории придется постараться.
Как-то так навскидку, в контроллере.
 


// получение минимальной цены
$filter_min_data = array(
  'filter_category_id' => $category_id,
  'sort'               => 'p.price',
  'order'              => 'ASC',
  'start'              => 0,
  'limit'              => 1
);
            
$min_products = $this->model_catalog_product->getProducts($filter_min_data);
if (!empty($min_products)) {
	$min_products = array_pop($min_products);
	if ((float)$min_products['special']) {
		$data['min_price'] = (float)$min_products['special'];
	} else {
		$data['min_price'] = (float)$min_products['price'];
	}
} else {
	$data['min_price'] = 0;
}
            
// получение максимальной цены
$filter_max_data = array(
  'filter_category_id' => $category_id,
  'sort'               => 'p.price',
  'order'              => 'DESC',
  'start'              => 0,
  'limit'              => 1
);
            
$max_products = $this->model_catalog_product->getProducts($filter_max_data);
if (!empty($max_products)) {
	$max_products = array_pop($max_products);
	if ((float)$max_products['special']) {
		$data['max_price'] = (float)$max_products['special'];
	} else {
		$data['max_price'] = (float)$max_products['price'];
	}
} else {
	$data['max_price'] = 0;
}

 

P.S. Поправил..

Большое спасибо ) 

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


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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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