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

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

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

Эта тема для тех:
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) начисление баллов за отзыв


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

Изменено пользователем stebgo
  • +1 2

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


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

Жирный плюс.

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


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

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

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

 

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

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

 

вроде должно быть в /system/library/pagination.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 '';
		}
	}
}
Изменено пользователем stebgo
[spoiler]

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


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

Мультиязычные отзывы для людей, для поисковиков или и то и другое  :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

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

Изменено пользователем stebgo
  • +1 1

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


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

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

 

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

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

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


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

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

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

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

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

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

Войти

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

Войти

  • Похожий контент

    • От Bn174uk
      300.00 руб
      Скачать/Купить дополнение


      Telegram уведомления
      Модуль позволяет получать уведомления о заказах, отзывах о товаре, новых зарегистрированных  пользователей и сообщений с формы контактов в Telegram.
       
      Так же есть возможность настроить уведомление о смене статуса заказа в админке. Это будет полезно, когда на сайте работают менеджеры и хочется знать информацию как быстро они обрабатывают заказы.
       
      У кого хостинг располагается на территории России есть вероятность, что модуль не будет работать из-за блокировки telegram-а в России.

      Инструкция по настройке:

      Шаг 1:
      Зайдите в Telegram, в поиске найдите бота BotFather и начните с ним общение. Напишите боту команду /newbot - это команда для создания нового бота. BotFather в ответ попросил, чтобы Вы написали имя бота. Напишите обратным сообщением это имя (Например: Бот для уведомлений о заказах) - это имя можно потом поменять. После ввода имени BotFather запросит ввести username (публичное имя бота) оно должно иметь окончание bot (Например: cmsshopbot или cmsshop_bot); Если такое имя не занято, то в ответ получите сообщение с token вашего нового бота; Перейдите по ссылке на своего бота из сообщения либо найдите его в поиске по username (которое указали) и нажмите /start. Это надо для того, чтобы бот смог Вам писать. Без этого Вы не сможете получать уведомления. Шаг 2:
      Выберите нужную версию модуля в зависимости от Вашей версии opencart; Установите модуль через стандартный менеджер дополнений; Обновите кеш OCMOD; Шаг 3:
      После перейдите в расширения->модули и найдите "A-Telegram уведомление" активируйте его; Зайдите в настройки модуля; Укажите token(в поле "Токен бота") который выдал Вам бот BotFather; Укажите ID юзера кому должны приходить уведомления о заказах. Если нужно, чтобы приходило нескольким получателем уведомления, укажите через запятую эти ID (Например: 12222222222,22222223333,333333333); Проще всего узнать свой ID в Telegram отправив сообщение боту ShowmeidBot. Дальше отметьте галочкой поля, которые должны приходить в уведомлении и нажмите сохранить. Все, бот настроен и готов к использованию. Системные требования:
      PHP 5.3 или выше; Сurl; Техническая поддержка:

      Техническая поддержка осуществляется всем пользователям, легально купившим модуль на оф.сайтах либо у самого автора.

      В планах:
      Сделать поддержку opencart 3; Расширить функционал для получения уведомлений о новых комментариях и отзывах; Сделать более гибкую настройку полей; Добавил Bn174uk Добавлено 20.02.2018 Категория Письма, почта, рассылки, sms Системные требования Curl Сайт разработчика http://cmsshop.com.ua/ Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1  
    • От Bn174uk
      Модуль позволяет получать уведомления о заказах, отзывах о товаре, новых зарегистрированных  пользователей и сообщений с формы контактов в Telegram.
       
      Так же есть возможность настроить уведомление о смене статуса заказа в админке. Это будет полезно, когда на сайте работают менеджеры и хочется знать информацию как быстро они обрабатывают заказы.
       
      У кого хостинг располагается на территории России есть вероятность, что модуль не будет работать из-за блокировки telegram-а в России.

      Инструкция по настройке:

      Шаг 1:
      Зайдите в Telegram, в поиске найдите бота BotFather и начните с ним общение. Напишите боту команду /newbot - это команда для создания нового бота. BotFather в ответ попросил, чтобы Вы написали имя бота. Напишите обратным сообщением это имя (Например: Бот для уведомлений о заказах) - это имя можно потом поменять. После ввода имени BotFather запросит ввести username (публичное имя бота) оно должно иметь окончание bot (Например: cmsshopbot или cmsshop_bot); Если такое имя не занято, то в ответ получите сообщение с token вашего нового бота; Перейдите по ссылке на своего бота из сообщения либо найдите его в поиске по username (которое указали) и нажмите /start. Это надо для того, чтобы бот смог Вам писать. Без этого Вы не сможете получать уведомления. Шаг 2:
      Выберите нужную версию модуля в зависимости от Вашей версии opencart; Установите модуль через стандартный менеджер дополнений; Обновите кеш OCMOD; Шаг 3:
      После перейдите в расширения->модули и найдите "A-Telegram уведомление" активируйте его; Зайдите в настройки модуля; Укажите token(в поле "Токен бота") который выдал Вам бот BotFather; Укажите ID юзера кому должны приходить уведомления о заказах. Если нужно, чтобы приходило нескольким получателем уведомления, укажите через запятую эти ID (Например: 12222222222,22222223333,333333333); Проще всего узнать свой ID в Telegram отправив сообщение боту ShowmeidBot. Дальше отметьте галочкой поля, которые должны приходить в уведомлении и нажмите сохранить. Все, бот настроен и готов к использованию. Системные требования:
      PHP 5.3 или выше; Сurl; Техническая поддержка:

      Техническая поддержка осуществляется всем пользователям, легально купившим модуль на оф.сайтах либо у самого автора.

      В планах:
      Сделать поддержку opencart 3; Расширить функционал для получения уведомлений о новых комментариях и отзывах; Сделать более гибкую настройку полей;
    • От 112rub
      300.00 руб
      Скачать/Купить дополнение


      Карусель отзывов + страница со всеми отзывами для opencart \ ocStore 3
      Модуль "карусель отзывов" дает возможность вывести на любой странице карусель с последними отзывами о товарах. 
      Заголовок модуля задается в админ панели сайта
      Количество отзывов задается в админ панели сайта
      Так же есть страница со всеми отзывами
      Количество отзывов на странице задается в админ панели.

      Демо
       
       
       
      Добавил 112rub Добавлено 01.03.2018 Категория Слайдшоу, баннеры, галереи Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0 ocStore 3.0 OpenCart.Pro, ocShop  
    • От Leingard
      500.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 Категория Блоги, новости, статьи Системные требования Сайт разработчика Старая цена 500 Метод активации По запросу в ЛС Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Не проверялось  
    • От 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 УК РФ (Нарушение авторских и смежных прав)  Автор оставляет за собой право изменят условия предоставления лицензии, изменения цены и стоков продления лицензии. Все доработки, переработки и изменения функционала не входят в стоимость модуля и оплачиваются отдельно по письменной договоренности с автором.  
      Тип распространения:
      Как есть
  • Последние посетители   0 пользователей онлайн

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

×