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

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

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

Эта тема для тех:
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

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


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

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

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

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

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

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

Войти

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

Войти

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

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


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

      Основные возможности
       
      Редактор BB кодов WysiBB Смайлы Добавление видео(Youtube) Загрузка фотографий и аватара Большой выбор полей и управление ими Сортировка отзывов по дате и оценкам Ссылка с призывом оставить отзыв в письме с заказом Комментирование отзыва администратором сайта Показ отзывов на выбранном языке сайта Описание и мета-теги для страницы Captcha  
      Совместим с Opencart: 2.1.0.1 - 3.0.3.1
      Совместим с ocStore: 2.1.0.1 - 2.3.0.2.3

      Демонстрация

      Страница с отзывами: Перейти на сайт
      Модуль: Перейти на сайт
      Список отзывов в панели управления: Перейти на сайт
      Настройки: Перейти на сайт

      Доступ в Панель управления

      Логин - demo
      Пароль — demo
       
      Внимание!
      Модуль позволяет загружать файлы на сервер, поэтому данная возможность является потенциальным местом для взлома вашего сайта. Злоумышленники могут осуществлять попытки загрузить файл содержащий вредоносный код.
       
      Автор модуля сделал защиту от вредоносных файлов, но при этом нет 100% гарантии защиты от этого.
      Добавил seregin Добавлено 09.03.2016 Категория Модули Системные требования Сайт разработчика http://seregin-pro.ru/ Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Не проверялось Обращение к серверу разработчика Нет  
    • От seregin
      Модуль добавляет возможность покупателям оставлять отзывы о сайте. Имеется множество параметров для настройки модуля. Покупатели могут писать длинные сообщения и оценивать ваш сайт.

      Основные возможности
       
      Редактор BB кодов WysiBB Смайлы Добавление видео(Youtube) Загрузка фотографий и аватара Большой выбор полей и управление ими Сортировка отзывов по дате и оценкам Ссылка с призывом оставить отзыв в письме с заказом Комментирование отзыва администратором сайта Показ отзывов на выбранном языке сайта Описание и мета-теги для страницы Captcha  
      Совместим с Opencart: 2.1.0.1 - 3.0.3.1
      Совместим с ocStore: 2.1.0.1 - 2.3.0.2.3

      Демонстрация

      Страница с отзывами: Перейти на сайт
      Модуль: Перейти на сайт
      Список отзывов в панели управления: Перейти на сайт
      Настройки: Перейти на сайт

      Доступ в Панель управления

      Логин - demo
      Пароль — demo
       
      Внимание!
      Модуль позволяет загружать файлы на сервер, поэтому данная возможность является потенциальным местом для взлома вашего сайта. Злоумышленники могут осуществлять попытки загрузить файл содержащий вредоносный код.
       
      Автор модуля сделал защиту от вредоносных файлов, но при этом нет 100% гарантии защиты от этого.
    • От 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
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1
      1.5.3.1 ocStore 2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1
      1.5.3.1
      1.5.2.1
      1.5.1.3 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х Обращение к серверу разработчика  
    • От 112rub
      300.00 руб
      Скачать/Купить дополнение


      Карусель отзывов + страница со всеми отзывами для opencart \ ocStore 3
      Модуль позволяет вам отображать на любой странице карусель с последними отзывами. Так же есть страница со всеми отзывами.
      Все настройки модуля выполняются с панели администратора.
      Настройки:
      1. карусель
      1.1 заголовок карусели
      1.2 количество отзывов в карусели
      2. страница
      2.1 количество отзывов на странице
      2.2 meta-title
      2.3 meta_description
      2.4 meta_keyword
       
      Есть модификатор который добавит пункт "все отзывы" в главное меню 
      п.с
      для установки на версию opencart 2.3 необходимо включить ftp в настройках сайта или установить фикс

      Демо
       
       
       
      Добавил 112rub Добавлено 01.03.2018 Категория Слайдшоу, баннеры, галереи Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3 ocStore 3.0
      2.3 OpenCart.Pro, ocShop  
    • От 112rub
      Модуль позволяет вам отображать на любой странице карусель с последними отзывами. Так же есть страница со всеми отзывами.
      Все настройки модуля выполняются с панели администратора.
      Настройки:
      1. карусель
      1.1 заголовок карусели
      1.2 количество отзывов в карусели
      2. страница
      2.1 количество отзывов на странице
      2.2 meta-title
      2.3 meta_description
      2.4 meta_keyword
       
      Есть модификатор который добавит пункт "все отзывы" в главное меню 
      п.с
      для установки на версию opencart 2.3 необходимо включить ftp в настройках сайта или установить фикс

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

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

×

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

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