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

Вывод товаров в модуле Latest, из определённых категорий.

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

Доброго времени!

Реализовал на сайте вывод последних поступлений - на отдельную страницу. Но тянет туда этот модуль latest всё вподряд, что добавлялось недавно. Не могу добиться ,чтобы он из определённых категорий выводил товары, или вообще только определённо  из одной  категории.

Что правильного надо подправить/добавить в этом latest.tpl и latest.php ?

Изменено пользователем andrus

Поделиться сообщением


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

правильным решением будет написать для него свою модель, а не использовать готовые варианты

Поделиться сообщением


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

1. Найти в файле catalog\model\catalog\product.php  функцию: public function getLatestProducts

2. В ней найти сам запарос:

$query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= '" . $this->NOW . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$limit);

3. Поменять код на:

$query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.status = '1' AND p.date_available <= '" . $this->NOW . "' AND p2c.category_id = '47' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$limit);

где p2c.category = '47' - id категории на выбор (в данном случае - 47)

 

P.S. Можно сделать по передаче 2-го аргумента при вызове функции, в зависимости от category_id, тоесть в зависимости от того, в какой категории находишся, в той и выводит "последние".

Поделиться сообщением


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

правильным решением будет написать для него свою модель, а не использовать готовые варианты

Я там делал все по принципу создания страницы "Акции" (special). Или же другим путём :/

Есть отдельная директория "latest" в controller/ и template/. Ну вот к примеру в controller лежит latest.php с таким кодом:

 

<?php  
class ControllerLatestLatest extends Controller {
	public function index() {
		$this->document->setTitle($this->data['title'] = "Здесь тайтл страницы");
		$this->document->setDescription($this->data['description'] = "Здесь дискрипшн свой ");
		$this->data['heading_title'] = $this->config->get('config_title');
	
		
		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/latest/latest.tpl')) {
			$this->template = $this->config->get('config_template') . '/template/latest/latest.tpl';
			$this->data['template'] = $this->config->get('config_template');
		} else {
			$this->template = 'default/template/latest/latest.tpl';
		}

		$this->children = array(
			'common/column_left',
			'common/column_right',
			'common/content_top',
			'common/content_bottom',
			'common/footer',
			'common/header'
		);							
		$this->response->setOutput($this->render());
	}
}
?>

А как делать через model - я фиг его знает :/

 

 

 

Baco, благодарю за наводку, так как не высмотрел за сегодня, где же поменять вручную этот "category_id" =)

Так действительно работает. Но получается, что это значение переменной навсегда останется таким в этом product.php. И если вывести на новой странице новые поступления из второй/другой категории, то... получим снова товары из указанной вручную (category_id = '47' ). ?

 

Мудрённая просто затея там у меня: вывести надо  последние товары для двух главных категорий товаров- но каждый вывод делается на отдельной странице (новой созданной вообще, не находится в "категории" или "производителе").

Изменено пользователем andrus

Поделиться сообщением


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

Если в модели соотв., вместо AND p2c.category_id = '47' вписать AND p2c.category_id IN ('47','52') то можно вполне без проблем получить последние с 2-х категорий, главное правильно передать аргумент и обработать "выхлоп".

 

Поменять вручную ... вопрос конечно интересный, либо в запросе самом менять, если нужно последние с 2-х категорий стабильно, либо выставить "config", но это уже другая песня и тут без бутылки пива - не разобраться  :wink:

Поделиться сообщением


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

Если в модели соотв., вместо AND p2c.category_id = '47' вписать AND p2c.category_id IN ('47','52') то можно вполне без проблем получить последние с 2-х категорий, главное правильно передать аргумент и обработать "выхлоп".

 

Поменять вручную ... вопрос конечно интересный, либо в запросе самом менять, если нужно последние с 2-х категорий стабильно, либо выставить "config", но это уже другая песня и тут без бутылки пива - не разобраться  :wink:

Окей, благодарю за ответ. Пока что не разобрался. Но нагуглил следующее... Смотрю тут вообще попахивает функционалом модуля https://opencartforum.com/files/file/432-jv-products-in-module-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2-%D0%B8%D0%B7-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C/

8-)  кароче то что надо ,что доктор прописал и на следующие варианты вывода последних, в каком хочешь виде. 

Изменено пользователем andrus

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 03.08.2015 в 18:50, Baco сказал:

1. Найти в файле catalog\model\catalog\product.php  функцию: public function getLatestProducts

2. В ней найти сам запарос:


$query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= '" . $this->NOW . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$limit);

3. Поменять код на:


$query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.status = '1' AND p.date_available <= '" . $this->NOW . "' AND p2c.category_id = '47' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$limit);

где p2c.category = '47' - id категории на выбор (в данном случае - 47)

 

Пробую изменить вывод Latest по определённым категориям, как описано выше - не получается... выводится всё без изменений.

Вот сам код:

$query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.status = '1' AND p.date_available <= '" . $this->NOW . "' AND p2c.category_id = '3' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$limit);

Что нет так ? Ещё где-то изменения необходимо вносить ?

Поделиться сообщением


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

Кэш модификаций сбрасывали?

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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

×

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

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