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

[Решено] Вывод отзывов о товаре в рекомендуемых


Recommended Posts

Добрый день, помогите, пожалуйста с задачей. В контроллере модуля Рекомендуемые не могу правильно вписать нужные переменные для вывода отзывов о товаре. Понимаю, что обращаюсь за готовым решением, но хотя бы натолкните на правильный путь.

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

В контроллер модуля Рекомендуемые вставляю код



public function review() {
    	$this->language->load('product/product');
		
		$this->load->model('catalog/review');
		
		$this->data['reviews'] = array();
		
		$review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);
			
		$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);
      		
		foreach ($results as $result) {
        	$this->data['reviews'][] = array(
        		'author'     => $result['author'],
				'text'       => $result['text'],
				'rating'     => (int)$result['rating'],
        		'reviews'    => sprintf($this->language->get('text_reviews'), (int)$review_total),
        		'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
        	);
      	}			
		
		$this->response->setOutput($this->render());
	}

в модуле вывожу 




<?php if ($reviews) { ?>
 <?php foreach ($reviews as $review) { ?>

  <div class="author"><span><?php echo $review['author']; ?></span> <?php echo $text_on; ?> <b><?php echo $review['date_added']; ?></b></div>
  <div class="text"><?php echo $review['text']; ?></div>

<?php } ?> 
<?php } ?>
         
Надіслати
Поділитися на інших сайтах

В итоге не определена переменная reviews. В каком месте надо вызывать метод review() тогда? делаю по аналогии с выводом отзывов в карточке товара. Что-то упустила

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

$this->response->setOutput($this->render());

Объясните что вы делаете?

 

 

В каком месте надо вызывать метод review()

 

Перед загрузкой шаблона

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

Вот в этом месте понимать перестала, поэтому и обратилась за помощью. Как перед загрузкой шаблона вызвать метод review() ? Пыталаюсь сделать по аналогии вывода отзывов в карточке товара

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

Я не совсем понимаю, куда эти отзывы должны попасть

 

 

index(){

Получили товар

Цикл по товарам{

  получаем отзывы

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

}

вызываем шаблон

Рендеринг шаблона

 

}

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

В идеале 

 

Цикл по товарам{

получаем отзывы

 

выбираем последний отзыв (подключаем модель, где определена функция выборки последнего отзыва)

заполняем массив продуктов ( в массив вносим автора и последний отзыв)

}

 

Но можно реализовать так:

 

 

Цикл по товарам{

получаем отзывы

заполняем массив продуктов ( в него массив отзывов)

}

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

Существует модуль вывода последних/ случайных отзывов http://www.opencart.com/index.php?route=extension/extension/info&extension_id=4971&filter_search=reviews

Мне он показался не очень удобным. Необходимо выводить отзывы у заданных товаров. 

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

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

в товаре review() для ajax вызова, у вас же как я понимаю обычный запрос, к тому же $page не определена, а вы ее используете.

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

Новый модуль написать, по-моему, задача сложнее, чем отредактировать имеющийся. Мне всего-то надо внедрить отзывы в товары, которые я выбираю в модуле.

Из-за нехватки базовых знаний это мне сделать сложно.

Цикл по товарам идёт при определённом наборе id этих товаров.

Т.е надо в цикл загрузить массив отзывов и выбрать по id отзывы конкретного товара. Как это сделать синаксически?

 

Вот тут ошибочный код, знаю, $page убрала

 

$review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);

$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id']);



$this->load->model('catalog/review');
		
		$this->data['reviews'] = array();
		
		$review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);
			
		$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id']);
      		
		foreach ($results as $result) {
        	$this->data['reviews'][] = array(
        		'author'     => $result['author'],
				'text'       => $result['text'],
				'rating'     => (int)$result['rating'],
        		'reviews'    => sprintf($this->language->get('text_reviews'), (int)$review_total),
        		'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
        	);
      	}			

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

код в index перенесли?

не мешало бы проверку на product_id добавить.

кстати getReviewsByProductId с одним параметром product_id вернет первые 20 отзывов

 

перед

 $this->response->setOutput($this->render());

следует указать шаблон который будет рендерится

        if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/featured.tpl')) {            $this->template = $this->config->get('config_template') . '/template/module/featured.tpl';        } else {            $this->template = 'default/template/module/featured.tpl';        }

вы в лог ошибок смотрите когда пишите?

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

Да, в лог смотрю, естественно, ошибка Undefined variable: reviews

при таком раскладе

public function review() {    	$this->language->load('product/product');				$this->load->model('catalog/review');				$this->data['reviews'] = array();				$review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);					$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id']);      				foreach ($results as $result) {        	$this->data['reviews'][] = array(        		'author'     => $result['author'],				'text'       => $result['text'],				'rating'     => (int)$result['rating'],        		'reviews'    => sprintf($this->language->get('text_reviews'), (int)$review_total),        		'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))        	);      	}				if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/kleosunfeatured.tpl')) {			$this->template = $this->config->get('config_template') . '/template/module/kleosunfeatured.tpl';		} else {			$this->template = 'default/template/module/kleosunfeatured.tpl';		}							$this->response->setOutput($this->render());	}

Но как мы выяснили метод revew() тут не работает . При имеющемся наборе советов я пока никуда не продвинулась...

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

Странно..я же все показал...

Существует готовый модуль вывода товаров (не имеет значения какой, хоть новых)

 

Делаем выборку товаров (подключаем модель products)  - Здесь ясно?

Далее готовим данные для шаблона.

Для этого нужен цикл по выбранным товарам - Здесь понятно?

{цикл}

  получаем отзывы о товаре по его id - хоть 20, хоть последний, хоть случайный, все зависит от запросов (здесь не обязательно использовать метод review(), достаточно воспользоваться существующимим методами модели - Здесь понятно?

 полученный массив укладываем в

  data[products][] = array

    review

    информация о товаре (смотреть как реализовано в исходнике

{/цикл}

вызываем нужный шаблон

рендерим

 

Соответственно в шаблоне обрабатываем элемент массива review

 

 

Жду ответов

 

В принципе уже все расписано

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

вписываю до $this->data['products'][] = array(

$this->data['reviews'] = array();
		
		$review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);
			
		$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id']);
      		
		foreach ($results as $result) {
        	$this->data['reviews'][] = array(
        		'author'     => $result['author'],
				'text'       => $result['text'],
				'rating'     => (int)$result['rating'],
        		'reviews'    => sprintf($this->language->get('text_reviews'), (int)$review_total),
        		'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
        	);
      	}

Получаю ошибку  Undefined index: product_id

Извините, у меня бывает, полное затмение :)

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

Контроллер (module/featured.php):

Перед

foreach ($products as $product_id) {
добавить:
$this->load->model('catalog/review');

Перед
$this->data['products'][] = array(
добавить:
$reviews = $this->model_catalog_review->getReviewsByProductId($product_id);

После
'href'         => $this->url->link('product/product', 'product_id=' . $product_info['product_id']),
добавить:
'reviews'    => $reviews


Шаблон (module/featured.tpl):

После
<div class="cart"><input type="button" value="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" /></div>
добавить:
<?php if ($product['reviews']) { ?>
        <?php foreach ($product['reviews'] as $review) { ?>
          <br />
          <span><?php echo $review['author']; ?></span><br />
          <b><?php echo $review['date_added']; ?></b><br />
          <?php echo $review['text']; ?>

        <?php } ?>
      <?php } ?>
  • +1 1
Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Вхід

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

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

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

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

Important Information

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