Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

[Решено] Минимальная цена в категории


VladimirV
 Поделиться

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

 

Доброго времени суток. Хочу вывести минимальную цену в категорию, что то делаю не так, прошу вашей помощи.

ocStore 2.3.0.2.2

в catalog>model>catalog>product добавил:

public function getMinPriceFromCategory($category_id) {
        $query = $this->db->query("SELECT LEAST(p.price,IFNULL(ps.price, p.price)) min_price FROM `" . 
        	DB_PREFIX . "category` c RIGHT JOIN `" . 
        	DB_PREFIX . "product_to_category` p2c ON p2c.category_id = c.category_id RIGHT JOIN `" . 
            DB_PREFIX . "product` p ON p2c.product_id = p.product_id LEFT JOIN `" . 
            DB_PREFIX . "product_special` ps ON p.product_id = ps.product_id AND ps.date_end >= NOW() AND ps.date_start <= NOW()
            WHERE c.category_id = " . (int)$category_id . " AND p.status = 1 AND c.status = 1
            ORDER BY min_price
            LIMIT 0,1
        ");
        
        if ($query->num_rows) {
			return $query->row['min_price'];
		} else {
			return 0;
		}

    }

в cotroller>product>category, после  $data['categories'][] = array(   добавил:

'min_price' => $this->model_catalog_product->getMinPriceFromCategory($result['category_id']),

в шаблоне category.tpl:

<?php echo $min_price; ?>

Итог: "Undefined variable: min_price". Понимаю что делаю не правильно, но знаний не хватает, понять где и что делаю не так. Прошу указать что нет так делаю, заранее спасибо.

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


Кеш модификаторов?

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

Или не там добавили, или не там выводите. Вы записали минимальную цену для каждой дочерней категории текущей родительской (те которые выводятся над товарами, как правило), а в tpl обращаетесь к ней, как будто хотели вывести это значение для родительской.

Соответственно, если хотите вывести мин. цену для каждой дочки, то в шаблоне нужно выводить например так:

<?php foreach ($categories as $category) { ?>
	<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?><span><?php echo $category['min_price']; ?></span></a></li>
<?php } ?>

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

 

Если же нужно выводить мин цену только для текущей категории, то тогда в контроллере надо ее задавать иначе:

$data['min_price'] = $this->model_catalog_product->getMinPriceFromCategory($category_id);

и потом уже выводить в тпльке через $min_price

Само собой в функции в модели не должно быть ошибок (ее код не смотрел).

Изменено пользователем Raino
Ссылка на комментарий
Поделиться на других сайтах


Снова прошу вашей помощи, решил вывести мин. цену не в категориях а через модуль: ksl_OC_category, подскажите что нужно дописать в контроллере. Сейчас выводит: Notice: Undefined variable: category_id in /home/ih506839/public_html/catalog/controller/extension/module/categoryKsl.php on line 112

Вот сам контроллер:

<?php
class ControllerExtensionModuleCategoryKsl extends Controller {
	public function index() {
	
		//Определяем текущую категорию (path из GET запроса)
		if (isset($this->request->get['path'])) {
			$parts = explode('_', (string)$this->request->get['path']);
		} else {
			$parts = array();
		}
		if (isset($parts[0])) {
			$data['category_id'] = $parts[0]; //родительская
		} else {
			$data['category_id'] = 0;
		}
		if (isset($parts[1])) {
			$data['child_id'] = $parts[1]; //дочерняя
		} else {
			$data['child_id'] = 0;
		}

		if($data['child_id']) $data['category_id'] = null;

		$this->load->model('catalog/category');
		$this->load->model('catalog/product');
		$data['categories'] = array();
		$categories = $this->model_catalog_category->getCategories(0);

		//Загружаем модель которая работает с таблицей настроек модулей (oc_setting)
		$this->load->model('setting/setting');

		//Получаем значение - показывать ли изображения
		$category_images = $this->model_setting_setting->getSetting('categoryKsl')['categoryKsl_images'];
		//Получаем значение - размеры изображений
		$category_images_height = $this->model_setting_setting->getSetting('categoryKsl')['categoryKsl_img_height'];
		$category_images_weight = $this->model_setting_setting->getSetting('categoryKsl')['categoryKsl_img_weight'];

		//Для дочерних категорий
		$category_children = $this->model_setting_setting->getSetting('categoryKsl')['categoryKsl_children'];
		$category_child_images = $this->model_setting_setting->getSetting('categoryKsl')['categoryKsl_child_images'];
		$category_child_images_height = $this->model_setting_setting->getSetting('categoryKsl')['categoryKsl_child_img_height'];
		$category_child_images_weight = $this->model_setting_setting->getSetting('categoryKsl')['categoryKsl_child_img_weight'];

		//Массив категорий, которые не нужно выводить
		if(isset($this->model_setting_setting->getSetting('categoryKsl')['categoryKsl_checkbox'])){
			$categoryKsl_checkbox = $this->model_setting_setting->getSetting('categoryKsl')['categoryKsl_checkbox'];
		} else $categoryKsl_checkbox = null;

		foreach ($categories as $category) {

			//Пропускаем, если в настройках указано отключить данную категорию
			if (isset($categoryKsl_checkbox[$category['category_id']])) {
				continue;				
			}
			$children_data = array();

			if ($category_children) {

				$children = $this->model_catalog_category->getCategories($category['category_id']);

				foreach($children as $child) {
					//Пропускаем, если в настройках указано отключить данную категорию
					if (isset($categoryKsl_checkbox[$child['category_id']])) {
						continue;				
					}
			
					$filter_data = array('filter_category_id' => $child['category_id'], 'filter_sub_category' => true);

					//Работа с изображениями			
					if ($category_child_images && is_file(DIR_IMAGE . $child['image'])) {
						$this->load->model('tool/image');
						//метод создает изображения указанного размера
						$image = $this->model_tool_image->resize($child['image'], $category_child_images_weight, $category_child_images_height);
					} else {
						$image = '';
					}
			
					$children_data[] = array(
						'category_id' => $child['category_id'],
						'name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
						'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id']),
						'image' => $image,
					);
				}
			}
			
			$filter_data = array(
				'filter_category_id'  => $category['category_id'],
				'filter_sub_category' => true
			);



			//Работа с изображениями			
			if ($category_images && is_file(DIR_IMAGE . $category['image'])) {
				$this->load->model('tool/image');
				//метод создает изображения указанного размера
				$image = $this->model_tool_image->resize($category['image'], $category_images_weight, $category_images_height);
			} else {
				$image = '';
			}
			
			$data['categories'][] = array(
				'category_id' => $category['category_id'],
				'name'        => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
				'children'    => $children_data,
				'href'        => $this->url->link('product/category', 'path=' . $category['category_id']),
				'image' => $image,
			);
		}	

		$data['min_price'] = $this->model_catalog_product->getMinPriceFromCategory($category_id);

		//Добавляем свои стили
		$this->document->addStyle('catalog/view/theme/default/stylesheet/categoryKSL.css');
		
		return $this->load->view('extension/module/categoryKsl', $data);
	}
}

 

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


  • 3 недели спустя...

Здравствуйте!

 

Делал вывод минимальной цены по аналогии, однако возникла проблема - у некоторых товаров в категориях указана цена, отличающая от валюты по-умолчанию (в моем случае рубли). На фронте везде выводится в рублях, независимо от кода валюты, однако никак не осилю конвертацию минимальной цены в категории в рубли. Прошу помочь.

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


@Padlik  зачем выводить минимальную если самому товару можно её и задавать?
 

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


У меня задача - рядом с названиями категорий в списке этих самых категорий выводить минимальную стоимость товара из данной категории.

Сам вывод сделал, выводится стоимость самого дешевого товара из категории, однако, без форматирования в рубли. Не могу понять, куда воткнуть конвертацию минимальной цены.

 

В модели продукта в массиве получения продукта делаю                

'min_price'          => $this->currency->convert($result['min_price'], $this->currency->getCodeOrDefault($query->row['currency_id']), $this->config->get('config_currency')),

 

- не работает.

 

Выглядит сейчас так как на картинке, однако, Цена от - не рублевая, а в той валюте, в которой указана в админке. В списке товаров конвертация работает, но не хочет работать именно с минимальной ценой.

2017-11-10_153301.jpg

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


  • 3 месяца спустя...

Всем привет, прошу помощи, возникла проблема в следующем - вывожу мин цену в подкатегории - от <?php echo (int)$subcategory['min_price']; ?> - выводится, отлично, но буз учета скидок в товаре, во всем целом массиве субкатегорий с $subcategory нет ничего похожего на $special. Подскажите пож-та как вывести мин цену с учетом скидок

Изменено пользователем fedot
Ссылка на комментарий
Поделиться на других сайтах


  • 3 недели спустя...
On 18.10.2017 at 9:39 PM, VladimirV said:

 

Доброго времени суток. Хочу вывести минимальную цену в категорию, что то делаю не так, прошу вашей помощи.

ocStore 2.3.0.2.2

в catalog>model>catalog>product добавил:


public function getMinPriceFromCategory($category_id) {
        $query = $this->db->query("SELECT LEAST(p.price,IFNULL(ps.price, p.price)) min_price FROM `" . 
        	DB_PREFIX . "category` c RIGHT JOIN `" . 
        	DB_PREFIX . "product_to_category` p2c ON p2c.category_id = c.category_id RIGHT JOIN `" . 
            DB_PREFIX . "product` p ON p2c.product_id = p.product_id LEFT JOIN `" . 
            DB_PREFIX . "product_special` ps ON p.product_id = ps.product_id AND ps.date_end >= NOW() AND ps.date_start <= NOW()
            WHERE c.category_id = " . (int)$category_id . " AND p.status = 1 AND c.status = 1
            ORDER BY min_price
            LIMIT 0,1
        ");
        
        if ($query->num_rows) {
			return $query->row['min_price'];
		} else {
			return 0;
		}

    }

в cotroller>product>category, после  $data['categories'][] = array(   добавил:


'min_price' => $this->model_catalog_product->getMinPriceFromCategory($result['category_id']),

в шаблоне category.tpl:


<?php echo $min_price; ?>

Итог: "Undefined variable: min_price". Понимаю что делаю не правильно, но знаний не хватает, понять где и что делаю не так. Прошу указать что нет так делаю, заранее спасибо.

И так, в модель и контроллер вношу как в этом сообщении, в шаблоне вывожу рядом с именем дочерней категории 

<?php echo $category['min_price']; ?>

Однако, переменная не определяется. версия движка opencart 2.3 модификаторы обновляю. что моет быть не так? Задача в том, чтобы на странице категории вывести минимальные цены для дочек текущей.

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


  • 7 месяцев спустя...
  • 9 месяцев спустя...
  • 3 месяца спустя...

Выводится 0 вместо минимальной цены.

Подскажите в чем проблема?

Всё сделал как написано. Ошибок нет, просто 0 вместо мин. цены.

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


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.