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

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

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

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

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


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

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



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 } ?>
         

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


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

В каком месте вызывается метод review()?

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


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

В итоге не определена переменная 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

 

 

Жду ответов

 

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

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


Ссылка на сообщение
Поделиться на другие сайты
public function review() {

на

public function index() {

замените

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


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

заключила всё в  function index()

не понятно как сделать

получаем отзывы о товаре по его id - хоть 20 

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


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

в вашем случае отзывы будут о конкретном товаре $this->request->get['product_id']

получилось? или ошибки сыпет?

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


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

вписываю до $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

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

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


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

на какой странице этот модуль расположен?

product_id будет только на странице товара

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


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

модуль на главной странице, вышеназванный код находится в цикле foreach ($products as $product_id) {..........Ъ

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


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

о_О новые подробности, код в цикле.

а $products откуда берутся ?

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


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

Контроллер (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 пользователей онлайн

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

×

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

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