Jump to content

Recommended Posts

Здравствуйте :)

Эта тема для тех:
1) кого не устраивают стандартные отзывы товаров с ajax в opencart 2 и ocStrore 2
2) кому не подходят, не нравятся, или нет желания покупать готовые решения отзывов для товаров
3) кто хочет немного погеммороится с кодом, но понять как все это работает и что можно сделать под свои запросы.
4) для истинных программистов-альтруистов готовых безвозмездно помочь советом и кодом.

! Я очень плохо знаю PHP, HTML, CSS, javascript
! Любой код написанный мной может содержать ошибки, являться говнокодом, снижать безопасность и т. д.
! Комментарии делаю для своего магазина (ocStore 2.1.0.2) на который планирую переходить с версии 1,5 - по этому рассматриваю, тестирую, настраиваю код только для этой версии ocSrore.
! Я надеюсь на помощь - для этого и создал тему.
 

Комментарии без ajax для opencart / ocstore 2.1.0.2


В файле /catalog/controller/product/product.php

найти

$this->model_catalog_product->updateViewed($this->request->get['product_id']);

и после нее вставить следующее

$this->load->model('catalog/review');
 
$data['text_no_reviews'] = $this->language->get('text_no_reviews');
 
if (isset($this->request->get['review_page'])) {
$page = $this->request->get['review_page'];
} else {
$page = 1;
}
 
$data['reviews_array'] = 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) {
$data['reviews_array'][] = array(
'author'     => $result['author'],
'text'       => nl2br($result['text']),
'rating'     => (int)$result['rating'],
'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
);
}
 
$pagination = new Pagination();
$pagination->total = $review_total;
$pagination->page = $page;
$pagination->limit = 5;
                $pagination->text = $this->language->get('text_pagination');
$pagination->url = $this->url->link('product/product', $url . '&product_id=' . $this->request->get['product_id']. '&review_page={page}');
                
                                                    
                
$data['pagination'] = $pagination->render();
 
$data['results'] = sprintf($this->language->get('text_pagination'), ($review_total) ? (($page - 1) * 5) + 1 : 0, ((($page - 1) * 5) > ($review_total - 5)) ? $review_total : ((($page - 1) * 5) + 5), $review_total, ceil($review_total / 5));
 
                // http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html
if ($page == 1) {
   $this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');
} elseif ($page == 2) {
   $this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'prev');
} else {
   $this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']) . '&review_page='. ($page - 1), 'prev');
}
                        $limit = 5;
if ($limit && ceil($review_total / $limit) > $page) {
   $this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']) . '&review_page='. ($page + 1), 'next');
                        }

 
Что тут, откуда и для чего


кусок кода для вставки взят из функции public function review() и немного отредактирован.
функция находится чуть ниже в этом же файле. эта функция вызывается из шаблона с помощью ajax. Если код выше не работает в вашей версии opencart можете отредактировать код из функции и вставить его.

важно заменить код из функции

$data['reviews'] = array();

на

$data['reviews_array'] = array();

точнее везде в этом коде заменить reviews на reviews_array
так как переменная reviews уже используется в шаблоне для отображений рейтинг / просмотр и добавления отзыва.
-----------------------------
дальше нужно изменить ссылку для пагинации
это

$pagination->url = $this->url->link('product/product/review', 'product_id=' . $this->request->get['product_id'] . '&page={page}');

заменить на это

$pagination->url = $this->url->link('product/product', $url . '&product_id=' . $this->request->get['product_id']. '&review_page={page}');

или просто убрать /review - теперь при клике на кнопки навигации вызываться будет на шаблон отзывов а шаблон продукту с review_page=****
-----------------------------

Изменить количество отображаемых отзывов можно заменив все 5 на нужное вам число.

-----------------------------

Даем поисковикам понять что это одна статья/товар разбитый на страницы

Этот кусок кода я спер в /catalog/controller/product/category.php строка 362

// http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html
if ($page == 1) {
   $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'], 'SSL'), 'canonical');
} elseif ($page == 2) {
   $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'], 'SSL'), 'prev');
} else {
   $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page - 1), 'SSL'), 'prev');
}
 
if ($limit && ceil($product_total / $limit) > $page) {
   $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page + 1), 'SSL'), 'next');
}

заменив
 
page на review_page
 
и

'product/category', 'path=' . $category_info['category_id'],

на

'product_id=' . $this->request->get['product_id']),

эту часть 'SSL'), убрал так как ее нет в /catalog/controller/product/product.php (у меня в 230 строке) то есть в файле который мы редактируем, то есть эта ссылка больше не нужна и в 230 строке я ее закомментировал //
 
--------------------
В коде,  в некоторых местах я изменил page на review_page - если оставить page то появляются косяки с хлебными крошками. более простого способа не нашел.  если есть желание можете заменить на свой вариант.
 



Находим и удаляем или закомментируем //

$this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');

так как это появилось в наших отзывах и изменяется от условий.
 

На этом с файлом /catalog/controller/product/product.php закончили

 

-----------------------------------------------------------------------------------------------

 

 
в файле /system/library/pagination.php
 
после строки 

$num_pages = ceil($total / $limit);

вставить

$pages = array("review_page={page}", "page={page}");

review_page можно заменить на то что вы хотите и изменили в контроллере и шаблоне
 
далее находим такие строки

$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_first . '</a></li>';
$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_prev . '</a></li>';
$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $i . '</a></li>';

и заменяем в них 

'page={page}'

на 

$pages

в итоге получим такой код в файле /system/library/pagination.php

<?php
class Pagination {
	public $total = 0;
	public $page = 1;
	public $limit = 20;
	public $num_links = 8;
	public $url = '';
	public $text_first = '|<';
	public $text_last = '>|';
	public $text_next = '>';
	public $text_prev = '<';

	public function render() {
		$total = $this->total;

		if ($this->page < 1) {
			$page = 1;
		} else {
			$page = $this->page;
		}

		if (!(int)$this->limit) {
			$limit = 10;
		} else {
			$limit = $this->limit;
		}

		$num_links = $this->num_links;
		$num_pages = ceil($total / $limit);
                
                $pages = array("review_page={page}", "page={page}");

		$this->url = str_replace('%7Bpage%7D', '{page}', $this->url);

		$output = '<ul class="pagination">';

		if ($page > 1) {
			$tmp_url = str_replace('&', '&', $this->url);
			$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $this->text_first . '</a></li>';
			if ($page == 2){
				$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $this->text_prev . '</a></li>';
			}else{
				$output .= '<li><a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a></li>';
			}
		}

		if ($num_pages > 1) {
			if ($num_pages <= $num_links) {
				$start = 1;
				$end = $num_pages;
			} else {
				$start = $page - floor($num_links / 2);
				$end = $page + floor($num_links / 2);

				if ($start < 1) {
					$end += abs($start) + 1;
					$start = 1;
				}

				if ($end > $num_pages) {
					$start -= ($end - $num_pages);
					$end = $num_pages;
				}
			}

			for ($i = $start; $i <= $end; $i++) {
				if ($page == $i) {
					$output .= '<li class="active"><span>' . $i . '</span></li>';
				} else {
					if ($i == 1){
						$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $i . '</a></li>';
					}else{
						$output .= '<li><a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a></li>';
					}
				}
			}
		}

		if ($page < $num_pages) {
			$output .= '<li><a href="' . str_replace('{page}', $page + 1, $this->url) . '">' . $this->text_next . '</a></li>';
			$output .= '<li><a href="' . str_replace('{page}', $num_pages, $this->url) . '">' . $this->text_last . '</a></li>';
		}

		$output .= '</ul>';

		if ($num_pages > 1) {
			return $output;
		} else {
			return '';
		}
	}
}

можете просто заменить содержимое файла на этот код


 
Открываем файл шаблона ( если по умолчанию то /catalog/view/theme/default/template/product/product.tpl)

находим 

<div id="review"></div>

или то место куда ajax вставляет отзывы

и вставляем в этот div

<?php if ($reviews_array) { ?>
                <?php foreach ($reviews_array as $review) { ?>
                <table class="table table-striped table-bordered">
                  <tr>                  
                    <td style="width: 50%;"><strong><?php echo $review['author']; ?></strong></td>
                    <td class="text-right"><?php echo $review['date_added']; ?></td>
                  </tr>
                  <tr>
                    <td colspan="2"><p><?php echo $review['text']; ?></p>
                      <?php for ($i = 1; $i <= 5; $i++) { ?>
                      <?php if ($review['rating'] < $i) { ?>
                      <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span>
                      <?php } else { ?>
                      <span class="fa fa-stack"><i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i></span>
                      <?php } ?>
                      <?php } ?></td>
                  </tr>
                </table>
                <div itemprop="review" itemscope itemtype="http://schema.org/Review">
                    <meta itemprop="itemReviewed" content="<?php echo $heading_title; ?>" >
                    <meta itemprop="author" content="<?php echo $review['author']; ?>" >
                    <meta itemprop="datePublished" content="<?php                          
                          $date1 = strtotime($review['date_added']); 
                          $new_date = date('Y-m-d', $date1);
                          echo $new_date; 
                          ?>">
                    <div itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
                      <meta itemprop="worstRating" content = "1"/>
                      <meta itemprop="ratingValue" content="<?php echo $review['rating']?>"/>
                      <meta itemprop="bestRating" content = "5"/>
                    </div>
                    <meta itemprop="description" content="<?php echo $review['text']; ?>" />
                </div>
                <?php } ?>
                <div class="text-right"><?php echo $pagination; ?></div>
                <?php } else { ?>
                <p><?php echo $text_no_reviews; ?></p>
                <?php } ?>

тут есть мои костыли


валидатор от яндекса ругался на формат даты, ему нужен Y-m-d
 
использовал такой костыль
 

<meta itemprop="datePublished" content="<?php                          
                          $date1 = strtotime($review['date_added']); 
                          $new_date = date('Y-m-d', $date1);
                          echo $new_date; 
                          ?>">

теперь гугл и яндекс валидаторы такую дату понимают.

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

<meta itemprop="itemReviewed" content="<?php echo $heading_title; ?>" > 

или

<meta itemprop="name" content="<?php echo $heading_title; ?>" >

на itemprop="name" валидаторы ругались что нет itemReviewed
может их совместно использовать надо?


Удаляем обработку ajax, находим почти в самом низу кода:

 $('#review').delegate('.pagination a', 'click', function(e) {
           e.preventDefault();
           $('#review').fadeOut('slow');
           $('#review').load(this.href);
           $('#review').fadeIn('slow');
      });
      $('#review').load('index.php?route=product/product/review&product_id=<?php echo $product_id; ?>'); 

можно вместо него вставить:
 

$(document).ready(function() {
<?php if(isset($_GET['review_page'])){ ?> 
$('a[href=\'#tab-review\']').trigger('click'); 
var scrollTop = $('#tab-review').offset().top;
$(document).scrollTop(scrollTop);
<?php } ?>
});

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


---------------------------------------------------------------------------------------------------------------------
Вот и все
--------------

Большая часть материала взята с сайта http://cmykon.com.ua/opencart/otzyvy-bez-ajax-ili-seo-otzyvy-v-opencart/
не работает в opencart 2.1.0.2

В планах:
1) вывод отзывов в зависимости от текущего языка
2) начисление баллов за отзыв


Буду благодарен за исправления ошибок и костылей.

Edited by stebgo
  • +1 2

Share this post


Link to post
Share on other sites

Жирный плюс.

Share this post


Link to post
Share on other sites

есть один косяк - при переходе на вторую и далее страницу отзывов из ссылки на 1 страницу удаляется только page=1

на ссылке остаётся висеть ?review_

 

помогите с этим разобраться.

где происходит удаление page для первой страницы? 

 

вроде должно быть в /system/library/pagination.php но сейчас нет времени разбираться, только ночью :) 

если кто найдет решение, напишите.

Share this post


Link to post
Share on other sites

Косяк исправил, добавил в первый пост

описание исправлений

 
в файле /system/library/pagination.php
 
после строки 

$num_pages = ceil($total / $limit);

вставить

$pages = array("review_page={page}", "page={page}");

review_page можно заменить на то что вы хотите и изменили в контроллере и шаблоне
 
далее находим такие строки

$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_first . '</a></li>';
$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_prev . '</a></li>';
$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $i . '</a></li>';

и заменяем в них 

'page={page}'

на 

$pages

в итоге получим такой код в файле /system/library/pagination.php
 

<?php
class Pagination {
	public $total = 0;
	public $page = 1;
	public $limit = 20;
	public $num_links = 8;
	public $url = '';
	public $text_first = '|<';
	public $text_last = '>|';
	public $text_next = '>';
	public $text_prev = '<';

	public function render() {
		$total = $this->total;

		if ($this->page < 1) {
			$page = 1;
		} else {
			$page = $this->page;
		}

		if (!(int)$this->limit) {
			$limit = 10;
		} else {
			$limit = $this->limit;
		}

		$num_links = $this->num_links;
		$num_pages = ceil($total / $limit);
                
                $pages = array("review_page={page}", "page={page}");

		$this->url = str_replace('%7Bpage%7D', '{page}', $this->url);

		$output = '<ul class="pagination">';

		if ($page > 1) {
			$tmp_url = str_replace('&', '&', $this->url);
			$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $this->text_first . '</a></li>';
			if ($page == 2){
				$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $this->text_prev . '</a></li>';
			}else{
				$output .= '<li><a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a></li>';
			}
		}

		if ($num_pages > 1) {
			if ($num_pages <= $num_links) {
				$start = 1;
				$end = $num_pages;
			} else {
				$start = $page - floor($num_links / 2);
				$end = $page + floor($num_links / 2);

				if ($start < 1) {
					$end += abs($start) + 1;
					$start = 1;
				}

				if ($end > $num_pages) {
					$start -= ($end - $num_pages);
					$end = $num_pages;
				}
			}

			for ($i = $start; $i <= $end; $i++) {
				if ($page == $i) {
					$output .= '<li class="active"><span>' . $i . '</span></li>';
				} else {
					if ($i == 1){
						$output .= '<li><a href="' . str_replace('&', '&', rtrim( str_replace($pages, '', $tmp_url), '?&')) . '">' . $i . '</a></li>';
					}else{
						$output .= '<li><a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a></li>';
					}
				}
			}
		}

		if ($page < $num_pages) {
			$output .= '<li><a href="' . str_replace('{page}', $page + 1, $this->url) . '">' . $this->text_next . '</a></li>';
			$output .= '<li><a href="' . str_replace('{page}', $num_pages, $this->url) . '">' . $this->text_last . '</a></li>';
		}

		$output .= '</ul>';

		if ($num_pages > 1) {
			return $output;
		} else {
			return '';
		}
	}
}
Edited by stebgo
[spoiler]

Share this post


Link to post
Share on other sites

Мультиязычные отзывы для людей, для поисковиков или и то и другое  :ph34r:

 

В общем сделал два варианта:

 

Описание, принцип работы, +/ -

1 вариант) В базе данных в таблицу отзывов добавил поле "язык" которое заполняется на основании текущего языка магазина в момент отправки отзыва. 

На основании данных из этого поля загружаются отзывы для текущего языка.

минусы

а) в табе отзывов и там где звездочки - указывается общее кол-во отзывов для всех языков (это легко исправить и выводить кол-во только для текущего языка) 

B) покупателям нужно как то объяснить что для того чтобы увидеть отзывы на другом языке нужно переключить язык магазина

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

 

2 вариант) Сделан на основе первого варианта. Только в див как и раньше подгружаются отзывы через ajax который я удалил ранее  :-D

плюсы:

Поисковики видят отзывы с разметкой и для каждого языка отдельно. Люди видят все отзывы и имеют более удобную навигацию по ним. Можно использовать разного рода улучшайзеры которые заточены под стандартный шаблон отзывов.

минусы

Я так до конца и не понял понимает ли поисковик, что какой то текст, рассчитанный для него, хотят заменить яваскриптом на непонятно что и как это влияет на качество индексации страницы. 

 

 

В общем буду использовать у себя второй вариант, пусть мои блондинистые покупательницы не будут иметь проблем с обзором всех хороших отзывов на всех языках сразу.

 

вариант 1

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

1) phpMyAdmin

 

Открываем вашу базу в phpMyAdmin или в том что вы используете, находим таблицу (префикс вашей таблицы)_review

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

language

не знаю какие параметры более правильно указать, себе сделал int(5)

 

2) Модель

 

Открываем файл /catalog/model/catalog/review.php

 

находим в начале кода

$this->db->query("INSERT INTO " . DB_PREFIX . "review SET author = '" . $this->db->escape($data['name']) . "', customer_id = '" . (int)$this->customer->getId() . "', product_id = '" . (int)$product_id . "', text = '" . $this->db->escape($data['text']) . "', rating = '" . (int)$data['rating'] . "', date_added = NOW()");

и меняем ее на 

$this->db->query("INSERT INTO " . DB_PREFIX . "review SET author = '" . $this->db->escape($data['name']) . "', customer_id = '" . (int)$this->customer->getId() . "', product_id = '" . (int)$product_id . "', text = '" . $this->db->escape($data['text']) . "', rating = '" . (int)$data['rating'] . "', date_added = NOW()");

тут добавлена запись языка в поле которое добавили в таблицу.

 

------------------------------------------------------------------------------------------------------------------------------

В конце кода, перед последним закрывающим знаком вставляем две функции

 public function getReviewsByProductId2($product_id, $start = 0, $limit = 20) {
		if ($start < 0) {
			$start = 0;
		}

		if ($limit < 1) {
			$limit = 20;
		}

		$query = $this->db->query("SELECT r.review_id, r.author, r.rating, r.text, p.product_id, pd.name, p.price, p.image, r.date_added FROM " . DB_PREFIX . "review r LEFT JOIN " . DB_PREFIX . "product p ON (r.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id = '" . (int)$product_id . "' AND p.date_available <= NOW() AND p.status = '1' AND r.status = '1' AND r.language = '" . (int)$this->config->get('config_language_id') . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY r.date_added DESC LIMIT " . (int)$start . "," . (int)$limit);

		return $query->rows;
	}

public function getTotalReviewsByProductId2($product_id) {
		$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r LEFT JOIN " . DB_PREFIX . "product p ON (r.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE p.product_id = '" . (int)$product_id . "' AND p.date_available <= NOW() AND p.status = '1' AND r.status = '1' AND r.language = '" . (int)$this->config->get('config_language_id') . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'");

		return $query->row['total'];
	}

что это

это копии существующих в этом файле функций с добавлением в них 

 AND r.language = '" . (int)$this->config->get('config_language_id') . "'

для вывода кол-ва и отзывов только для текущего языка

-------------------------------------------------------------------------------------------------------------------------------------------------

 

3) controller

 

Открываем файл /catalog/controller/product/product.php

и, если вы делали отзывы по моему рецепту, найдите в коде, который вы вставили, следующее

$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);

и замените его на это

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

$results = $this->model_catalog_review->getReviewsByProductId2($this->request->get['product_id'], ($page - 1) * 5, 5);

изменились только названия функций на те что мы добавили в модель getTotalReviewsByProductId2 и getReviewsByProductId2

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

На этом первый вариант закончен. он требует доработки проблем описанных в начале поста, но в принципе уже работает.

 

дальше вариант 2

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Возвращаем ajax для отзывов без ajax  :ugeek: 

 

 

Открываем шаблон товара (по умолчанию тут  /catalog/view/theme/default/template/product/product.tpl)

 

И возвращаем обратно

$('#review').delegate('.pagination a', 'click', function(e) {
           e.preventDefault();
           $('#review').fadeOut('slow');
           $('#review').load(this.href);
           $('#review').fadeIn('slow');
      });
      $('#review').load('index.php?route=product/product/review&product_id=<?php echo $product_id; ?>'); 

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

 

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

 

PS

Знающие люди! гляньте глазом, может такую ересь нельзя на реальный магазин ставить ..... напишите что подправить. 

Edited by stebgo
  • +1 1

Share this post


Link to post
Share on other sites

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

 

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

Edited by stebgo

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By Leingard
      Все мы хотим, чтоб в нашем магазине  покупали как можно больше товаров! Увеличение конверсии - главная цель каждого владельца магазина. Данный модуль создан как раз для этой цели.
      При помощи функционала данного модуля, Вы сможете наполнить Ваши товары интересными отзывами, которые окажут положительное влияние на клиента и обеспечат дополнительный стимул заказать именно у Вас.
       
      Возможности:
      Выбор товаров в которые добавлять отзывы Кнопка "Добавить положительные отзывы" - добавит в список отзывы из встроенной базы Неограниченное количество отзывов, которые можно добавить как в один товар, так и в несколько Укажите имена пользователей и отзывы добавятся от их имени. (Можно указать всего 1 имя). Диапазон дат - позволяет добавить отзывы равномерно, между выбранными промежутками, что создаст видимость постоянно добавления отзывов Возможность выбрать оценку, с которой добавятся отзывы Возможность выбрать статус добавляемых отзывов  
      Демо: 
      Админка: http://gameshara.ru/module/admin/ (demo, demo) Фронт: http://gameshara.ru/module/index.php?route=product/product&product_id=43  
      Активация:
      Напишите автору модуля после покупки: https://opencartforum.com/profile/17442-leingard/  
      Дополнительно:
      Отзывы добавляются в случайном порядке и не дублируются в выбранных товарах. Т.е. если у Вас выбрано 2 товара и 10 отзывов, то в каждый товар попадёт по 5 отзывов.  
      Лицензия:
      Модуль продается с лицензией на сайт. Одна покупка = Один домен Покупая копию модуля вы получаете право на использование. Распространения модуль платно или бесплатно нарушает лицензию и грозит обнулением покупки, а так же уголовной ответственность предусмотренной статей 146 УК РФ (Нарушение авторских и смежных прав)  Автор оставляет за собой право изменят условия предоставления лицензии, изменения цены и стоков продления лицензии. Все доработки, переработки и изменения функционала не входят в стоимость модуля и оплачиваются отдельно по письменной договоренности с автором.  
      Тип распространения:
      Как есть
    • By Leingard
      650.00 руб
      Скачать/Купить дополнение


      FakeReviews PRO - генерация отзывов для товаров
      Все мы хотим, чтоб в нашем магазине  покупали как можно больше товаров! Увеличение конверсии - главная цель каждого владельца магазина. Данный модуль создан как раз для этой цели.
      При помощи функционала данного модуля, Вы сможете наполнить Ваши товары интересными отзывами, которые окажут положительное влияние на клиента и обеспечат дополнительный стимул заказать именно у Вас.
       
      Возможности:
      Выбор товаров в которые добавлять отзывы Кнопка "Добавить положительные отзывы" - добавит в список отзывы из встроенной базы Неограниченное количество отзывов, которые можно добавить как в один товар, так и в несколько Укажите имена пользователей и отзывы добавятся от их имени. (Можно указать всего 1 имя). Диапазон дат - позволяет добавить отзывы равномерно, между выбранными промежутками, что создаст видимость постоянно добавления отзывов Возможность выбрать оценку, с которой добавятся отзывы Возможность выбрать статус добавляемых отзывов  
      Демо: 
      Админка: http://gameshara.ru/module/admin/ (demo, demo) Фронт: http://gameshara.ru/module/index.php?route=product/product&product_id=43  
      Активация:
      Напишите автору модуля после покупки: https://opencartforum.com/profile/17442-leingard/  
      Дополнительно:
      Отзывы добавляются в случайном порядке и не дублируются в выбранных товарах. Т.е. если у Вас выбрано 2 товара и 10 отзывов, то в каждый товар попадёт по 5 отзывов.  
      Лицензия:
      Модуль продается с лицензией на сайт. Одна покупка = Один домен Покупая копию модуля вы получаете право на использование. Распространения модуль платно или бесплатно нарушает лицензию и грозит обнулением покупки, а так же уголовной ответственность предусмотренной статей 146 УК РФ (Нарушение авторских и смежных прав)  Автор оставляет за собой право изменят условия предоставления лицензии, изменения цены и стоков продления лицензии. Все доработки, переработки и изменения функционала не входят в стоимость модуля и оплачиваются отдельно по письменной договоренности с автором.  
      Тип распространения:
      Как есть Добавил Leingard Добавлено 23.01.2018 Категория Блоги, новости, статьи Системные требования Метод активации По запросу в ЛС Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      Не проверялось Обращение к серверу разработчика Да Старая цена 800  
    • By LiteDeveloper
      Всем привет, подскажите как на странице категории выводить количество отзывов у товаров ? 
    • By xprolance
      390.00 руб
      Скачать/Купить дополнение


      Расширенные отзывы о товарах
      Модуль, расширяющий возможности встроенного модуля отзывов о товарах.
       
      Данная доработка добавляет дополнительные поля:
      Плюсы и Минусы  Срок использования Ответ администратора на отзывы  
      Дополнительные возможности позволяют:
      Менять тип аватара на буквы имени, стандартный юзерпик или отключать и то и другое Оценивать полезность отзывов пользователями магазина Отключать вывод даты отзывов  
      Плюс ко всему модуль получил редизайн ранее унылого вида списка отзывов и самой формы, не вызывающие доверия и какого-либо интереса к просмотру и написанию отзывов у покупателей.
       
      Протестировано на стандартном шаблоне. На нестандартных шаблонах может потребоваться адаптация.
      Первая адаптация под ваш шаблон бесплатна, при наличии доступов к сайту и серверу.
       
      =================
       
      Для работы модуля необходимо php 5.5 и выше + включённый ionCube Loader на хостинге
      Если вы не знаете состояние этих параметров, то скачайте модификатор и следуйте инструкции.
       
      Ключ активации модуля можно получить через личное сообщение, указав домен, где будет использоваться модуль.
      Тестовый домен может быть только поддоменом основного сайта или папка на локальном сервере без точки в названии.
       
      Закодирован только контроллер настроек модуля. Соединение с внешним сервером не используется.
      Недействительный ключ активации к ошибкам в работе сайта не приводит.
       
      Всем сайтам, уличённым в установке нелегальной копии будет отказано в поддержке по 
      всем модулям автора, также они будут лишены обновлений. То есть покупая один модуль и 
      установив бесплатно другой - вы теряете поддержку по обоим.
       
      Поэтому, если вы заказчик и подбираете модули для своего сайта, то просите у вашего 
      разработчика отчёт о покупке модуля, без этой информации по запросу автора вы также 
      не сможете получать поддержку и обновления.
       
      Автор предоставляет модуль в том виде, в котором он представлен. Доработки, 
      дополнения, расширение функционала модуля на заказ автор не выполняет. Исключение 
      составляют только найденные ошибки, некорректная работа модуля по месту установки и 
      возможный учёт пожеланий для будущих версий.
       
      История версий
       
       
      Добавил xprolance Добавлено 10.10.2016 Категория Прочее Системные требования php 5.5 и выше, ionCube Loader Метод активации По запросу в ЛС Ioncube Loader Требуется OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Не проверялось Обращение к серверу разработчика Нет Старая цена 0  
    • By xprolance
      Модуль, расширяющий возможности встроенного модуля отзывов о товарах.
       
      Данная доработка добавляет дополнительные поля:
      Плюсы и Минусы  Срок использования Ответ администратора на отзывы  
      Дополнительные возможности позволяют:
      Менять тип аватара на буквы имени, стандартный юзерпик или отключать и то и другое Оценивать полезность отзывов пользователями магазина Отключать вывод даты отзывов  
      Плюс ко всему модуль получил редизайн ранее унылого вида списка отзывов и самой формы, не вызывающие доверия и какого-либо интереса к просмотру и написанию отзывов у покупателей.
       
      Протестировано на стандартном шаблоне. На нестандартных шаблонах может потребоваться адаптация.
      Первая адаптация под ваш шаблон бесплатна, при наличии доступов к сайту и серверу.
       
      =================
       
      Для работы модуля необходимо php 5.5 и выше + включённый ionCube Loader на хостинге
      Если вы не знаете состояние этих параметров, то скачайте модификатор и следуйте инструкции.
       
      Ключ активации модуля можно получить через личное сообщение, указав домен, где будет использоваться модуль.
      Тестовый домен может быть только поддоменом основного сайта или папка на локальном сервере без точки в названии.
       
      Закодирован только контроллер настроек модуля. Соединение с внешним сервером не используется.
      Недействительный ключ активации к ошибкам в работе сайта не приводит.
       
      Всем сайтам, уличённым в установке нелегальной копии будет отказано в поддержке по 
      всем модулям автора, также они будут лишены обновлений. То есть покупая один модуль и 
      установив бесплатно другой - вы теряете поддержку по обоим.
       
      Поэтому, если вы заказчик и подбираете модули для своего сайта, то просите у вашего 
      разработчика отчёт о покупке модуля, без этой информации по запросу автора вы также 
      не сможете получать поддержку и обновления.
       
      Автор предоставляет модуль в том виде, в котором он представлен. Доработки, 
      дополнения, расширение функционала модуля на заказ автор не выполняет. Исключение 
      составляют только найденные ошибки, некорректная работа модуля по месту установки и 
      возможный учёт пожеланий для будущих версий.
       
      История версий
       
       
  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.