katilina

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

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

katilina    161

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

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


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

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



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

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


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

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

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


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

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

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


Ссылка на сообщение
Поделиться на другие сайты
chukcha    928
$this->response->setOutput($this->render());

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

 

 

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

 

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

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


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

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

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


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

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

 

 

index(){

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

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

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

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

}

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

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

 

}

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


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

В идеале 

 

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

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

 

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

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

}

 

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

 

 

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

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

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

}

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


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

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

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

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


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

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

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

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


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

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

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

Цикл по товарам идёт при определённом наборе 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']))
        	);
      	}			

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


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

код в 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';        }

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

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


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

Да, в лог смотрю, естественно, ошибка 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() тут не работает . При имеющемся наборе советов я пока никуда не продвинулась...

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


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

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

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

 

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

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

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

{цикл}

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

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

  data[products][] = array

    review

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

{/цикл}

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

рендерим

 

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

 

 

Жду ответов

 

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

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


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

на

public function index() {

замените

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


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

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

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

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

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


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

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

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

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


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

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

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

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


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

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

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

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


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

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

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


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

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

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

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


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

Контроллер (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 } ?>

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


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

Спасибо огромное, всё работает

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


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

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

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

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

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

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

Войти

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

Войти


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

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