Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Recommended Posts

 

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

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". Понимаю что делаю не правильно, но знаний не хватает, понять где и что делаю не так. Прошу указать что нет так делаю, заранее спасибо.

Link to post
Share on other sites

Или не там добавили, или не там выводите. Вы записали минимальную цену для каждой дочерней категории текущей родительской (те которые выводятся над товарами, как правило), а в 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

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

Edited by Raino
Link to post
Share on other sites

Огромное вам спасибо, ошибка действительно была в контроллере

Link to post
Share on other sites

Снова прошу вашей помощи, решил вывести мин. цену не в категориях а через модуль: 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);
	}
}

 

Link to post
Share on other sites

  • 3 weeks later...

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

 

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

 

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

'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

Link to post
Share on other sites

  • 3 months later...

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

Edited by fedot
Link to post
Share on other sites

  • 3 weeks later...
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 модификаторы обновляю. что моет быть не так? Задача в том, чтобы на странице категории вывести минимальные цены для дочек текущей.

Link to post
Share on other sites

  • 7 months later...
В 19.10.2017 в 02:01, VladimirV сказал:

Огромное вам спасибо, ошибка действительно была в контроллере

 

Link to post
Share on other sites

  • 9 months later...

Как допилить запрос чтобы минимальное число было больше 0(нуля)?

Link to post
Share on other sites

  • 3 months later...

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

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

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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Similar Content

    • By igorfelix
      Здравствуйте, подскажите, а можно ли ограничить вывод, например товаров с ценой меньше 500 руб и с остатком меньше 10 шт. 
      Именно используя только category.php
       
      в model/product.php в "public function getProduct($product_id) ... AND p.status = '1' .. { не подходит вариант.
      в category.tpl  "<?php foreach ($products as $product) { ?> <?php if ($product['stock']>0 ){ ?>" тоже не подходит. 
    • By kostya242
      Есть категория водонагревателей https://aqua-shop.by/tekhnika-dlya-doma/vodonagrevateli/.
       
      В ней выводятся ссылки на подкатегории: 
       
       
      Если зайти в любую подкатегорию, например, водонагреватели Ballu https://aqua-shop.by/tekhnika-dlya-doma/vodonagrevateli/vodonagrevateli-ballu/, вверху уже отсутствует список имеющихся подкатегорий.
       
      Задача: выводить список имеющихся подкатегорий при переходе на любую из них. 
    • By toporchillo
      Скачать/Купить дополнение Занавеска Категорий
      Поддерживаемые версии OpenCart: 1.5.1, 1.5.2, 1.5.3, 1.5.4, 1.5.5.1
      Меню категорий с картинками в виде занавески. Выглядит примерно так: http://toporchillo.myjino.ru/os1541/ (внизу страницы)
      Установка:
      Скопируйте содержимое папки "upload" в папку с OpenCart. В админке установите
      и настройте модуль "Занавеска Категорий".
      Добавил toporchillo Добавлено 24.01.2013 Категория Модули  
    • By foruss
      Скачать/Купить дополнение Модуль категорий до 4 уровня вложенности
      Описание:
      Данный модуль позволяет показывать до 4-х уровней вложенности. Работают активные меню, хлебные крошки, а так же подсчет товаров.
      Версии на которых тестировалось:
      Opencart 1.5.3.1;Opencart 1.5.4.1;
      На остальных версиях пока не проверял.

      Для установки достаточно загрузить в корень все из папки Upload.
      Если у вас альтернативный от стандартного шаблон:
      Из архива по пути catalog>view>theme>default>template>module>И сюда запишите файл на сервере
      catalog>view>theme>ВАШ ШАБЛОН>template>module>

      По умолчанию в файле отключен подсчет принудительно. Чтобы его включить, откройте файл catalog>controller>module>category.php
      и на 6 строчке замените значение false на true.
      Готов внести любые изменения в данный модуль на функционал
      Добавил foruss Добавлено 18.02.2013 Категория Модули  
    • By snastik
      Скачать/Купить дополнение Стена Категорий в категориях
      Это продолжение модуля Стена Категорий для главной страницы
      разработан специально для вывода в категориях
      Работает на всей линейке 1.5.x
      В административной части модуля настраивается:
      Выбор категорий для вывода в меню
      Ограничение категорий
      Размер изображения
      Схема отображения
      Расположение
      Статус
      Всплывающий блок
      Порядок сортировки
      Смотрите Демо http://modules.oclab...ategory&path=25
      При установке модуль не заменяет файлов и работает без VQMOD
      В комплекте Русский и Английский язык
      Другие мои модули
      Добавил snastik Добавлено 13.02.2013 Категория Модули  
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.