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

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    86

Жирный плюс.

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


Ссылка на сообщение
Поделиться на другие сайты
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

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


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

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

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

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

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

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

Войти

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

Войти


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

    • От avseredyuk

      300.00 руб
      View File


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

      Работает на 1.5.x / 2.x
      Submitter avseredyuk Submitted 09/23/2016 Category Email Marketing & SMS Integration Системные требования cURL Сайт разработчика Старая цена Метод активации Ioncube Loader OpenCart ocStore OpenCart.Pro, ocShop  
    • От Nannco
      Подскажите в какой колонке можно посмотреть отзывы о товаре в phpMyAdmin?
       
      Собственно когда отвечаешь в "Админке" на отзыв (от администратора), по умолчанию установлено автор ответа "Administrator" - мне надо его переименовать. 
       
      Модуль "Ответ на комментарии" 
    • От markimax

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


      SEO CMS TOP 2: Блог | Новости | Отзывы | Галерея | Формы
       
        
      Логин / пароль:
      demo / demo
      Документация и описание
      Более 10`000 интернет магазинов выбрали модуль для работы
      Модуль делает из opencart полноценную CMS
      Модуль адаптирован (сетка верстки) под ЛЮБУЮ тему,
      даже самую не стандартную, выполненную согласно
      требованиям разработчиков opencart
      (есть автоадаптер тем в один клик)
      Факт: использование модуля повышает место в выдаче поиска поисковиков
      (модуль оптимизирован под seo)
      Версии с которыми совместим данный модуль: все версии и сборки на базе opencart OpenCart:1.5.x,2.x, 2.1.x, 2.2.x, 2.3.x ocStore: 1.5.x, 2.1.x, 2.3.x Модуль Блог версии 3.* Поддерживаемые языковые расширения в комплекте: Russian English Рекомендую SEO CMS mod for Image Compressor & Watermark 1.1.0
      Добавляет суперсжатие JPEG, PNG и watermark для модуля
       
      IMGeneratorSeoSCT - Генератор сео текстов и описаний для SEO CMS TOP 2 (синонимайз)   Чем данный модуль лучше других: Не перезаписываетсистемных файлов Opencart Не требует и не использует VQmod Не требует и не использует OCMOD Не требует и не использует ioncube Легкая установка Полное кеширование виджетов Работает со всеми известными SEO модулями ( SEO PRO , SEO Pack PRO, seo url, cached ...) Имеет свой SEO виджет Гибкая настройка Большое количество виджетов "Видимость" блогов и записей для разных групп покупателей Реализация галереи Реализация отзывов Реализация html вставок Возможность ответов на комментарий Слежение и оповещение о новых комментариях к записи по e-mail Возможности опросов Поддержка отзывов с возможностью вывода html и редактирования bbcode в визуальном редакторе RSS Sitemap (для категорий блога, записей, отзывах о магазине, галерей, опросов, faq и т.п.) Древовидное представление комментариев Отзывы для товаров с ответами в виде дерева и рейтингом каждого комментария Редактирование даты отзывов товара Отзывы индексируются всеми поисковиками Рейтинги комментариев Вывод списка отзывов товарови записей (кешируемый), с различными гибкими настройками Скорость Кеширование SEO виджета Расширенные возможности кеширования Что можно реализовать на базе модуля: Новости Блоги Статьи Галереи Отзывы Акции FAQ Голосования / Опросы (с пользовательскими вариантами ответов) Вставки HTML Баннеры ... (дополните сами, архитектура гибкая...) Возможности: Неограниченное количество записей "Видимость" блогов и записей для разных групп покупателей Поддержка мультимагазинов Дата начала публикации и дата окончания публикации записей Краткий и полноценный анонс записи (CKEditor) Поддержка мультиязычности Поддержка SEO Pro и всех известных SEO модулей Возможности кратких SEO ссылок Настройки закрытия SEO ссылки слешем Отдельные настройки для категорий (блогов) Древовидное представление комментариев Возможность ответа на комментарий Рейтинг комментария Ввод символов капчи мышкой Возможность редактирования записи из frontend сайта Ссылки записей (статей) на продукты Похожие записи (статьи) Неограниченная вложенность и представление категорий (блогов) Настройки шаблонов, отдельно для виджетов и категорий Настройки шаблонов для списков, записей, комментариев Настройки для "обрезания" описаний по количеству символов, по количеству слов, по количеству предложений Поиск по записям RSS Вывод списка записей (новостей) в любой колонке и схеме, с индивидуальными настройками Отзывы для товаров с ответами в виде дерева и рейтингом каждого комментария ... Демо модуля: http://oc2.opencartadmin.com Административная часть: http://oc2.opencartadmin.com/admin/index.php?route=module/blog Логин: demo Пароль: demo   Инструкция по установке модуля в архиве "ЕСЛИ ЧТО-ТО ДОЛГО НЕ ПОЛУЧАЕТСЯ - ПРОЧТИТЕ НАКОНЕЦ ИНСТРУКЦИЮ!" Закон Мерфи   Техническая поддержка Установка Требования Обновление Глоссарий Детальная инструкция к модулю SEO CMS  
      https://opencartforum.com/files/file/2636-инструкция-к-модулю-seo-cms-pro/ Документация Лицензия Все права на модуль принадлежат разработчикам opencartadmin.com Условия использования лицензии: один домен - одна лицензия (покупка продукта для каждого домена). Условия использования лицензии - "на владельца". Далее... Для XDS Coloring Theme в "коробке" модуля уже идут адаптированные шаблоны Для MoneyMaker 2 в "коробке" модуля уже идут адаптированные шаблоны Советую обратить внимание на Виджет "Уведомления" для модуля SEO CMS и ckeditor в категориях и записях для SEO CMS TOP 2 от разработчика klaos27   А также на модуль
      HYPER Positions - 71 позиция модулей \ 24 блока Добавил markimax Добавлено 24.03.2015 Категория Блоги, новости, статьи Системные требования PHP 5.3 или выше Сайт разработчика https://opencartadmin.com/index.php?route=account/download Старая цена 1490 Метод активации Через официальный сайт дополнения Ioncube Loader Нет OpenCart 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.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.х  
    • От markimax
       
        
      Логин / пароль:
      demo / demo
      Документация и описание
      Более 10`000 интернет магазинов выбрали модуль для работы
      Модуль делает из opencart полноценную CMS
      Модуль адаптирован (сетка верстки) под ЛЮБУЮ тему,
      даже самую не стандартную, выполненную согласно
      требованиям разработчиков opencart
      (есть автоадаптер тем в один клик)
      Факт: использование модуля повышает место в выдаче поиска поисковиков
      (модуль оптимизирован под seo)
      Версии с которыми совместим данный модуль: все версии и сборки на базе opencart OpenCart:1.5.x,2.x, 2.1.x, 2.2.x, 2.3.x ocStore: 1.5.x, 2.1.x, 2.3.x Модуль Блог версии 3.* Поддерживаемые языковые расширения в комплекте: Russian English Рекомендую SEO CMS mod for Image Compressor & Watermark 1.1.0
      Добавляет суперсжатие JPEG, PNG и watermark для модуля
       
      IMGeneratorSeoSCT - Генератор сео текстов и описаний для SEO CMS TOP 2 (синонимайз)   Чем данный модуль лучше других: Не перезаписываетсистемных файлов Opencart Не требует и не использует VQmod Не требует и не использует OCMOD Не требует и не использует ioncube Легкая установка Полное кеширование виджетов Работает со всеми известными SEO модулями ( SEO PRO , SEO Pack PRO, seo url, cached ...) Имеет свой SEO виджет Гибкая настройка Большое количество виджетов "Видимость" блогов и записей для разных групп покупателей Реализация галереи Реализация отзывов Реализация html вставок Возможность ответов на комментарий Слежение и оповещение о новых комментариях к записи по e-mail Возможности опросов Поддержка отзывов с возможностью вывода html и редактирования bbcode в визуальном редакторе RSS Sitemap (для категорий блога, записей, отзывах о магазине, галерей, опросов, faq и т.п.) Древовидное представление комментариев Отзывы для товаров с ответами в виде дерева и рейтингом каждого комментария Редактирование даты отзывов товара Отзывы индексируются всеми поисковиками Рейтинги комментариев Вывод списка отзывов товарови записей (кешируемый), с различными гибкими настройками Скорость Кеширование SEO виджета Расширенные возможности кеширования Что можно реализовать на базе модуля: Новости Блоги Статьи Галереи Отзывы Акции FAQ Голосования / Опросы (с пользовательскими вариантами ответов) Вставки HTML Баннеры ... (дополните сами, архитектура гибкая...) Возможности: Неограниченное количество записей "Видимость" блогов и записей для разных групп покупателей Поддержка мультимагазинов Дата начала публикации и дата окончания публикации записей Краткий и полноценный анонс записи (CKEditor) Поддержка мультиязычности Поддержка SEO Pro и всех известных SEO модулей Возможности кратких SEO ссылок Настройки закрытия SEO ссылки слешем Отдельные настройки для категорий (блогов) Древовидное представление комментариев Возможность ответа на комментарий Рейтинг комментария Ввод символов капчи мышкой Возможность редактирования записи из frontend сайта Ссылки записей (статей) на продукты Похожие записи (статьи) Неограниченная вложенность и представление категорий (блогов) Настройки шаблонов, отдельно для виджетов и категорий Настройки шаблонов для списков, записей, комментариев Настройки для "обрезания" описаний по количеству символов, по количеству слов, по количеству предложений Поиск по записям RSS Вывод списка записей (новостей) в любой колонке и схеме, с индивидуальными настройками Отзывы для товаров с ответами в виде дерева и рейтингом каждого комментария ... Демо модуля: http://oc2.opencartadmin.com Административная часть: http://oc2.opencartadmin.com/admin/index.php?route=module/blog Логин: demo Пароль: demo   Инструкция по установке модуля в архиве "ЕСЛИ ЧТО-ТО ДОЛГО НЕ ПОЛУЧАЕТСЯ - ПРОЧТИТЕ НАКОНЕЦ ИНСТРУКЦИЮ!" Закон Мерфи   Техническая поддержка Установка Требования Обновление Глоссарий Детальная инструкция к модулю SEO CMS  
      https://opencartforum.com/files/file/2636-инструкция-к-модулю-seo-cms-pro/ Документация Лицензия Все права на модуль принадлежат разработчикам opencartadmin.com Условия использования лицензии: один домен - одна лицензия (покупка продукта для каждого домена). Условия использования лицензии - "на владельца". Далее... Для XDS Coloring Theme в "коробке" модуля уже идут адаптированные шаблоны Для MoneyMaker 2 в "коробке" модуля уже идут адаптированные шаблоны Советую обратить внимание на Виджет "Уведомления" для модуля SEO CMS и ckeditor в категориях и записях для SEO CMS TOP 2 от разработчика klaos27   А также на модуль
      HYPER Positions - 71 позиция модулей \ 24 блока
    • От Grinya
      Доброго времени суток, господа. Уже много раз поднимали эту тему, но конкретного ответа не нашлось. Как реализовать кнопку отзывов о магазине в меню сайта. Версия opencart 2.3

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

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