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

stebgo    4

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

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

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


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

Жирный плюс.

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


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

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

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

 

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

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

 

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

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

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


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

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

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

 
в файле /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]

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


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

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

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


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

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

 

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

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

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


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

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

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

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

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

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

Войти

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

Войти


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

    • От Seofisher
      Хочу сделать отправку купона с страницы отзыва (review_form).
      Email автора отзыва уже есть в таблице oc_review
       
      Примерно как я это представляю.
      Делаю поле для воода купона, и все необходимое для записи его в таблицу.
      2) Жму кнопку отправить купон. Купон отправляется на email автора отзыва. Код купона должен сохранятся в oc_review
      Email сообщение не просто строка текста, а сверстанный шаблон.
      Сложнее всего для меня понять как сделать отправку email еще и по нажатию button.
      Так же не понимаю на счет купона. он должен первый сохранится в базу и от туда извлекаться для отправки или это должен быть POST..
       
      Прошу подкинуть ваших комментариев которые мне помогут это реализовать 
    • От Leingard

      300.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 отзывов.  
       
      Небольшой бонус: Первым 10 покупателям модуля скидка -40%
      Добавил Leingard Добавлено 23.01.2018 Категория Модули Системные требования Сайт разработчика Старая цена 500 Метод активации По запросу в ЛС Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Не проверялось  
    • От avseredyuk

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


      Уведомления в Telegram / Telegram Notification
      Модуль уведомлений о новых заказах, отзывах и вопросах в Telegram.
      Преимущества:
      работает на Telegram Bot Api
      может писать уведомления как одному, так и нескольким пользователям Telegram'a
      позволяет гибко настроить формат сообщений-уведомлений
      сам определяет chat_id диалога Telegram'a

      Работает на 1.5.x / 2.x
      Добавил avseredyuk Добавлено 23.09.2016 Категория Письма, почта, рассылки, sms Системные требования cURL Сайт разработчика Старая цена Метод активации Ioncube Loader OpenCart ocStore OpenCart.Pro, ocShop  
    • От Raganele
      Помогите советом. Как перенести отзывы с сайта версии 1.5 на опенкарт 2.3?
      Все остальное переносила импорт-експорт.
      Остались только статьи и отзывы. Их не получается.
      Пробовала через phpadmin sql файлами.. файл вытащила - почистила.. а когда вставляю обратно phpadmin пишет ошибки.
      В чем может быть проблема? как мне перенести отзывы - помогите пожалуйста.
    • От 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 отзывов.  
       
      Небольшой бонус: Первым 10 покупателям модуля скидка -40%
  • Последние посетители   0 пользователей онлайн

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