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

Подбор модулей

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

Подскажите, какие модули можно купить для версии ocstore 1.5.5.1.2,чтобы между не было конфликтов и была максимально простая установка, желательно без ручных правок. Интересуют следующие шаблоны:

1. Шаблон дизайна,что-то ava store или какой-то другой со схожим функционалом или еще лучше.

2. Быстрый заказ, с сохранением в базу и списанием остатков

3. Фильтр товаров,что-то типа filter pro

4. Расширенные отзывы о товарах

5. Регистрация через соцсети

6. Экспорт и импорт прайс-листов

7. Упрощенная регистрация и оформление заказов

8. Расчет доставки по городу и самовывоз

Желательно,чтобы это все можно было настроить самому за один день.

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


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

Я бы его и взял 100% :)

Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D

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


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

Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D

 

не забываем, что было пожелание:

Желательно,чтобы это все можно было настроить самому за один день.

 

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

 

А так получается, что проще для многих использовать "неферрари".

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


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

 

не забываем, что было пожелание:

 

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

 

А так получается, что проще для многих использовать "неферрари".

Сейчас даже сценарии установки есть на некоторые функции, есть автодаптер под ЛЮБУЮ тему, есть настройки блоков обертки, есть даже "форсаж" - кеширование полностью всей страницы HTML, есть OG разметка, есть МУЛЬТИЯЗЫЧНЫЙ кешируемый быстрый SITEMAP как отдельно, так и метод добавление в любой используемый, есть ... можно долго перечислять, все таки время много прошло с того момента как вы купили 4-ку... сейчас уже 17 версия - разница опять же как между копейкой и феррари :)

А описать миллиард математических вариантов использования невозможно. Зато есть примеры на 99% случаев жизни. Разбирались даже блондинки, так как это один из самых простых по установке модуль, не требующий даже vqmod при всем его функционале

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


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

Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D

 

Я твое ферари уже 3 раза разбирал с магазина и ставил жигули - и заказчики были довольны :) 

Ферари для понтов - а зачем они ? 

Жегули и в обслуживании гораздо дешевле :) 

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


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

Жегули и в обслуживании гораздо дешевле :)

Ну если вы привыкли к жигулям, то на феррари, да, тяжело ездить

И не рассказывайте сказки про "снос" тогда

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


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

А что мне рассказывать то ? 

 

на днях вот с етой темы человеку удалял 

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


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

А что мне рассказывать то ? 

 

на днях вот с етой темы человеку удалял 

arhangel  это называется просто - саботаж (особенно по отзывам). И давайте дальше не будем разводить демагогию

Ошибка в теме: https://opencartforum.com/topic/42394-univer-адаптивный-шаблон-для-ocstore/page-26#entry410867

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


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

4. тыц (бесплатно)

Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок.

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


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

Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок.

Здесь всё понятно. "Бесплатный тыц" - это vqmod допил, который просто конфликтует с другими vqmod дополнениями.

Поэтому и рекомендую "феррари", там нет никаких vqmod и допилов.

 

Видели vqmod файл "бесплатного тыц" - 9 кб кода (для справки, у кого нет квалификации - это очень много). Понятное рано или поздно произойдет конфликт с каким нибудь модулем (это вопрос времени только)

<?xml version="1.0" encoding="UTF-8"?>
<modification>
    <id>reviews-stars</id>
    <version>2.1</version>
	<vqmver>2.4.1</vqmver>
	<author>vivivor</author>
	<file name="admin/model/catalog/review.php">
        <operation>
    		<search position="replace"><![CDATA[
			    $this->db->query("INSERT INTO " . DB_PREFIX . "review SET
			]]></search>
			<add><![CDATA[
			    $this->db->query("INSERT INTO " . DB_PREFIX . "review SET addimage = '" . $this->db->escape($data['addimage']) . "', answer = '" . $this->db->escape(strip_tags($data['answer'])) . "', good = '" . $this->db->escape(strip_tags($data['good'])) . "', bads = '" . $this->db->escape(strip_tags($data['bads'])) . "', html_status = '" . (int)$data['html_status'] . "', purchased = '" . (int)$data['purchased'] . "',
			]]></add>
		</operation>
        <operation>
        	<search position="replace"><![CDATA[
			    date_added = NOW()");
			]]></search>
			<add><![CDATA[
			    date_added = '" . $this->db->escape($data['date_added']) . "'");
			]]></add>
		</operation>
        <operation>
    		<search position="replace"><![CDATA[
				$this->db->query("UPDATE " . DB_PREFIX . "review SET
			]]></search>
			<add><![CDATA[
				$this->db->query("UPDATE " . DB_PREFIX . "review SET addimage = '" . $this->db->escape($data['addimage']) . "', answer = '" . $this->db->escape(strip_tags($data['answer'])) . "', good = '" . $this->db->escape(strip_tags($data['good'])) . "', bads = '" . $this->db->escape(strip_tags($data['bads'])) . "', html_status = '" . (int)$data['html_status'] . "', purchased = '" . (int)$data['purchased'] . "',
			]]></add>
		</operation>
        <operation>
        	<search position="replace"><![CDATA[
				date_added = NOW() WHERE review_id = '" . (int)$review_id . "'");
			]]></search>
			<add><![CDATA[
				date_added = '" . $this->db->escape($data['date_added']) . "' WHERE review_id = '" . (int)$review_id . "'");
			]]></add>
		</operation>
		<operation>
			<search position="replace" error="log"><![CDATA[
			    $sql = "SELECT r.review_id,
			]]></search>
			<add><![CDATA[
			    $sql = "SELECT r.review_id, r.purchased, html_status, r.addimage,
			]]></add>
		</operation>
	</file>
	<file name="admin/controller/catalog/review.php">
		<operation>
			<search position="after" error="log"><![CDATA[
			    getList() {
			]]></search>
			<add><![CDATA[
		$query = $this->db->query("DESC ".DB_PREFIX."review good");
        	if (!$query->num_rows) {
				$this->db->query("ALTER TABLE `" . DB_PREFIX . "review` ADD `good` text COLLATE utf8_general_ci NOT NULL AFTER text;");
			}
		$query = $this->db->query("DESC ".DB_PREFIX."review bads");
        	if (!$query->num_rows) {
				$this->db->query("ALTER TABLE `" . DB_PREFIX . "review` ADD `bads` text COLLATE utf8_general_ci NOT NULL AFTER text;");
			}
		$query = $this->db->query("DESC ".DB_PREFIX."review answer");
        	if (!$query->num_rows) {
				$this->db->query("ALTER TABLE `" . DB_PREFIX . "review` ADD `answer` text COLLATE utf8_general_ci NOT NULL AFTER text;");
			}
		$query = $this->db->query("DESC ".DB_PREFIX."review purchased");
        	if (!$query->num_rows) {
				$this->db->query("ALTER TABLE `" . DB_PREFIX . "review` ADD `purchased` tinyint(1) NOT NULL AFTER text;");
			}
        $query = $this->db->query("DESC ".DB_PREFIX."review html_status");
            if (!$query->num_rows) {
				$this->db->query("ALTER TABLE `" . DB_PREFIX . "review` ADD `html_status` tinyint(1) NOT NULL AFTER text;");
			}
		$query = $this->db->query("DESC ".DB_PREFIX."review addimage");
            if (!$query->num_rows) {
				$this->db->query("ALTER TABLE `" . DB_PREFIX . "review` ADD `addimage` text NOT NULL AFTER text;");
			}
		]]></add>
		</operation>
		<operation>
			<search position="after" error="log"><![CDATA[
			    getForm() {
			]]></search>
			<add><![CDATA[
			    $this->data['entry_texts'] = $this->language->get('entry_texts');
			    $this->data['entry_bads'] = $this->language->get('entry_bads');
                $this->data['entry_goods'] = $this->language->get('entry_goods');
			    $this->data['entry_answer'] = $this->language->get('entry_answer');
			    $this->data['entry_purchased'] = $this->language->get('entry_purchased');
			    $this->data['entry_addimage'] = $this->language->get('entry_addimage');
                $this->data['entry_html_status'] = $this->language->get('entry_html_status');
                $this->data['entry_date_added'] = $this->language->get('entry_date_added');
			]]></add>
		</operation>
        <operation>
    		<search position="after" error="log"><![CDATA[
			    $this->load->model('catalog/product');
			]]></search>
			<add><![CDATA[
		if (isset($this->request->post['good'])) {
			$this->data['good'] = $this->request->post['good'];
		} elseif (!empty($review_info)) {
			$this->data['good'] = $review_info['good'];
		} else {
			$this->data['good'] = '';
		}
			
		if (isset($this->request->post['bads'])) {
			$this->data['bads'] = $this->request->post['bads'];
		} elseif (!empty($review_info)) {
			$this->data['bads'] = $review_info['bads'];
		} else {
			$this->data['bads'] = '';
		}
		
		if (isset($this->request->post['answer'])) {
			$this->data['answer'] = $this->request->post['answer'];
		} elseif (!empty($review_info)) {
			$this->data['answer'] = $review_info['answer'];
		} else {
			$this->data['answer'] = '';
		}
		if (isset($this->request->post['purchased'])) {
			$this->data['purchased'] = $this->request->post['purchased'];
		} elseif (!empty($review_info)) {
			$this->data['purchased'] = $review_info['purchased'];
		} else {
			$this->data['purchased'] = '';
		}
        if (isset($this->request->post['date_added'])) {
    		$this->data['date_added'] = $this->request->post['date_added'];
		} elseif (!empty($review_info)) {
			$this->data['date_added'] = $review_info['date_added'];
		} else {
			$this->data['date_added'] = '';
		}
		if (isset($this->request->post['addimage'])) {
        	$this->data['addimage'] = $this->request->post['addimage'];
		} elseif (!empty($review_info)) {
			$this->data['addimage'] = $review_info['addimage'];
		} else {
			$this->data['addimage'] = '';
		}
        if (isset($this->request->post['html_status'])) {
            $this->data['html_status'] = $this->request->post['html_status'];
		} elseif (!empty($review_info)) {
			$this->data['html_status'] = $review_info['html_status'];
		} else {
			$this->data['html_status'] = '';
		}
		]]></add>
		</operation>
		<operation>
			<search position="after" error="log"><![CDATA[
			    $this->data['reviews'][] = array(
			]]></search>
			<add><![CDATA[
			    'purchased'     => $result['purchased'],
			    'addimage'      => $result['addimage'],
                'html_status'   => $result['html_status'],
			]]></add>
		</operation>
	</file>
	<file name="admin/language/russian/catalog/review.php">
		<operation>
			<search position="before" error="log"><![CDATA[
			    ?>
			]]></search>
			<add><![CDATA[
			    $_['entry_texts']		= 'Комментарий:';
			    $_['entry_goods']		= 'Достоинства:';
			    $_['entry_bads']		= 'Недостатки:';
			    $_['entry_answer']		= 'Ваш ответ:';
			    $_['entry_purchased']	= 'Куплен в этом магазине:';
			    $_['entry_addimage']	= 'Ссылка на фото:';
                $_['entry_html_status'] = 'Включить html:';
                $_['entry_date_added']  = 'Дата добавления:';
			]]></add>
		</operation>
	</file>
	<file name="admin/view/template/catalog/review_list.tpl">
		<operation>
			<search position="replace" error="log" offset="1"><![CDATA[
			    <td class="left"><?php echo $review['author']; ?></td>
			]]></search>
			<add><![CDATA[
                <td class="left">
                <?php echo $review['author']; ?>
    		    <?php if ($review['purchased'] == 1) { ?><img src="../image/man-with-cart2.png" alt="<?php echo $review['author']; ?> купил(а) этот товар в нашем магазине" title="<?php echo $review['author']; ?> купил(а) этот товар в нашем магазине" /><?php } ?>
                <?php if ($review['addimage']) { ?><img src="../image/addimage.png" alt="<?php echo $review['author']; ?> добавил(а) фотографию к отзыву" title="<?php echo $review['author']; ?> добавил(а) фотографию к отзыву" /><?php } ?>
                <?php if ($review['html_status'] == 1) { ?><img src="../image/html_status.png" alt="html включен" title="html включен" /><?php } ?>
			    </td>
			    <td class="right"><img src="../catalog/view/theme/default/image/stars-<?php echo $review['rating'] . '.png'; ?>" /></td>
			]]></add>
		</operation>
	</file>
	<file name="admin/view/template/catalog/review_form.tpl">
		<operation>
			<search position="replace" offset="54" error="log"><![CDATA[
			    <td><span class="required">*</span> <?php echo $entry_text; ?></td>
			]]></search>
			<add><![CDATA[
            <td><?php echo $entry_rating; ?></td>
        	<td>
    		 <div class="rating">
                <div class="radio-div">
                    <?php if ($rating == 1) { ?>
                    <input class="radio-star" type="radio" name="rating" value="1" checked/>
                    <?php } else { ?>
                    <input class="radio-star" type="radio" name="rating" value="1" />
                    <?php } ?>
                    <?php if ($rating == 2) { ?>
                    <input class="radio-star" type="radio" name="rating" value="2" checked/>
                    <?php } else { ?>
                    <input class="radio-star" type="radio" name="rating" value="2" />
                    <?php } ?>
                    <?php if ($rating == 3) { ?>
                    <input class="radio-star" type="radio" name="rating" value="3" checked/>
                    <?php } else { ?>
                    <input class="radio-star" type="radio" name="rating" value="3" />
                    <?php } ?>
                    <?php if ($rating == 4) { ?>
                    <input class="radio-star" type="radio" name="rating" value="4" checked/>
                    <?php } else { ?>
                    <input class="radio-star" type="radio" name="rating" value="4" />
                    <?php } ?>
                    <?php if ($rating == 5) { ?>
                    <input class="radio-star" type="radio" name="rating" value="5" checked/>
                    <?php } else { ?>
                    <input class="radio-star" type="radio" name="rating" value="5" />
                    <?php } ?>
                </div>
                <div class="star-div">
                    <?php if ($rating == 1) { ?><span class="icstars-1"></span><?php }elseif ($rating == 2) { ?><span class="icstars-2"></span><?php }elseif ($rating == 3) { ?><span class="icstars-3"></span><?php }elseif ($rating == 4) { ?><span class="icstars-4"></span><?php }elseif ($rating == 5) { ?><span class="icstars-5"></span><?php }elseif ($rating == 0) { ?><span class="icstars-0"></span><?php } ?>
                </div>
            </div>
			</td>
            </tr>
            <tr><td><?php echo $entry_goods; ?></td><td><textarea name="good" cols="60" rows="8"><?php echo $good; ?></textarea></td></tr>
			<tr><td><?php echo $entry_bads; ?></td><td><textarea name="bads" cols="60" rows="8"><?php echo $bads; ?></textarea></td></tr>
            <tr><td><span class="required">*</span> <?php echo $entry_texts; ?></td><td><textarea name="text" cols="60" rows="8"><?php echo $text; ?></textarea><?php if ($error_text) { ?><span class="error"><?php echo $error_text; ?></span><?php } ?></td></tr>
            <tr><td><?php echo $entry_answer; ?></td><td><textarea name="answer" cols="60" rows="8"><?php echo $answer; ?></textarea></td></tr>
			<tr><td><?php echo $entry_addimage; ?></td><td><input type="text" name="addimage" value="<?php echo $addimage; ?>" style="width:321px;" /> <a href="<?php echo $addimage; ?>"><img src="<?php echo $addimage; ?>" style="max-width:70px;max-height:47px;position: absolute;margin-left: 10px;margin-top: -10px;" /></td></tr>
		    <tr>
                <td><?php echo $entry_purchased; ?></td>
                <td class="switch">
			    <?php if ($purchased) { ?>
			    <input type="radio" id="radio1198" name="purchased" checked value="1" />
			    <input type="radio" id="radio1199" name="purchased" value="0" />
                <label for="radio1198" class="cb-enable selected"><span>On</span></label>
                <label for="radio1199" class="cb-disable"><span>Off</span></label>
			    <?php } else { ?>
			    <input type="radio" id="radio1198" name="purchased" value="1" />
			    <input type="radio" id="radio1199" name="purchased" checked value="0" />
                <label for="radio1198" class="cb-enable"><span>On</span></label>
                <label for="radio1199" class="cb-disable selected"><span>Off</span></label>
			    <?php } ?>
			    </td>
            </tr>
            <tr>
                <td><?php echo $entry_html_status; ?></td>
                <td class="switch">
    		    <?php if ($html_status) { ?>
			    <input type="radio" id="radio1197" name="html_status" checked value="1" />
			    <input type="radio" id="radio1196" name="html_status" value="0" />
                <label for="radio1197" class="cb-enable selected"><span>On</span></label>
                <label for="radio1196" class="cb-disable"><span>Off</span></label>
			    <?php } else { ?>
			    <input type="radio" id="radio1197" name="html_status" value="1" />
			    <input type="radio" id="radio1196" name="html_status" checked value="0" />
                <label for="radio1197" class="cb-enable"><span>On</span></label>
                <label for="radio1196" class="cb-disable selected"><span>Off</span></label>
			    <?php } ?>
			    </td>
            </tr>
            <tr>
            <td><?php echo $entry_status; ?></td>
            <td class="switch">
              <?php if ($status) { ?>
                <input type="radio" id="radio1195" name="status" checked value="1" />
    		    <input type="radio" id="radio1194" name="status" value="0" />
                <label for="radio1195" class="cb-enable selected"><span>On</span></label>
                <label for="radio1194" class="cb-disable"><span>Off</span></label>
                <?php } else { ?>
                <input type="radio" id="radio1195" name="status" value="1" />
    		    <input type="radio" id="radio1194" name="status" checked value="0" />
                <label for="radio1195" class="cb-enable"><span>On</span></label>
                <label for="radio1194" class="cb-disable selected"><span>Off</span></label>
                <?php } ?>
              </select></td>
          </tr>
            <tr><td><?php echo $entry_date_added; ?></td><td><input type="text" name="date_added" value="<?php echo $date_added; ?>" class="datetime" /></td></tr>
<script src="view/javascript/jquery/ui/jquery-ui-timepicker-addon.js"></script> 
<script>$('.datetime').datetimepicker({showSecond: true,dateFormat: 'yy-mm-dd',timeFormat: 'hh:mm:ss'});</script>
<script>jQuery('.radio-star').hover(function(){var stars = jQuery(this).val();jQuery('.star-div').html('<span class="icstars-'+ stars +'"></span><i id="settext-'+ stars +'"></i>');},function(){var start = jQuery('input:radio[name=rating]:checked').val();if(typeof  start == 'undefined' ){start = 0;}jQuery('.star-div').html('<span class="icstars-'+ start +'"></span><i id="settext-'+ start +'"></i>');});jQuery('.radio-star').click(function(){jQuery('.radio-star').each(function(){jQuery(this).attr( 'checked', false );});jQuery(this).attr( 'checked', true );jQuery(this).each(function(){if(jQuery(this).attr("checked")=="checked"){var s = jQuery(this).val();jQuery('.star-div').stop().html('<span class="icstars-'+ s +'"></span><i id="settext-'+ s +'"></i>');}});});</script>
<script>
$(document).ready( function(){
$(".cb-enable").click(function(){
        var parent = $(this).parents('.switch');
        $('.cb-disable',parent).removeClass('selected');
        $(this).addClass('selected');
        $('.checkbox',parent).attr('checked', true);
    });
    $(".cb-disable").click(function(){
        var parent = $(this).parents('.switch');
        $('.cb-enable',parent).removeClass('selected');
        $(this).addClass('selected');
        $('.checkbox',parent).attr('checked', false);
    });
});
</script>
<style>
#settext-1:before{content: "Ужасно";margin-left: 7px;}
#settext-2:before{content: "Плохо";margin-left: 7px;}
#settext-3:before{content: "Средне";margin-left: 7px;}
#settext-4:before{content: "Хорошо";margin-left: 7px;}
#settext-5:before{content: "Отлично";margin-left: 7px;}
input[type='text'], textarea{color: #333;border-radius:3px;border:1px solid #CCC;box-shadow: inset 0px 2px 8px rgba(32, 74, 96, 0.2), 0px 0px 3px white;-moz-box-shadow: inset 0px 2px 8px hsla(200, 50%, 25%, 0.2), 0px 0px 3px white;-webkit-box-shadow: inset 0px 2px 8px rgba(32, 74, 96, 0.2), 0px 0px 3px white;-webkit-transition: all 200ms;-moz-transition: all 200ms;-ms-transition: all 200ms;-o-transition: all 200ms;transition: all 200ms;padding:3px !important;margin-top:2px;margin-bottom:2px;}
input:focus, textarea:focus {box-shadow: inset 0px 2px 8px rgba(255, 255, 255, 0), 0px 0px 5px #209FDF;-moz-box-shadow: inset 0px 2px 8px hsla(0, 100%, 100%, 0), 0px 0px 5px hsl(200, 75%, 50%);-webkit-box-shadow: inset 0px 2px 8px rgba(255, 255, 255, 0), 0px 0px 5px #209FDF;background-color: #FFF;outline: none;border-color: rgba(255, 255, 255, 0);}
textarea:focus,input:focus{outline:none;}
.radio-div{width:77px;float:left;margin-left:5px;}
.radio-div input[type=radio]{position:relative;margin:0 0 0 -4px;padding:0;width:16px;height: 17px;opacity:0;z-index:2;cursor:pointer;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter: alpha(opacity=0);}
.star-div{height:17px;float:left;margin:1px 0 0 -84px;}
.star-div span{width:77px;height:17px;display:inline-block;background:url(view/image/stars.png) no-repeat;}
span.icstars-0{background-position:0 0}
span.icstars-1{background-position:0 -16px}
span.icstars-2{background-position:0 -32px}
span.icstars-3{background-position:0 -48px}
span.icstars-4{background-position:0 -64px}
span.icstars-5{background-position:0 -80px}
    .switch input[type='radio']{display: none;}
    .cb-enable, .cb-disable, .cb-enable span, .cb-disable span {background: url(view/image/switch.gif) repeat-x; display: block; float: left; }
    .cb-enable span, .cb-disable span { line-height: 30px; display: block; background-repeat: no-repeat; font-weight: bold; }
    .cb-enable span { background-position: left -90px; padding: 0 10px; }
    .cb-disable span { background-position: right -180px;padding: 0 10px; }
    .cb-disable.selected { background-position: 0 -30px; }
    .cb-disable.selected span { background-position: right -210px; color: #fff; }
    .cb-enable.selected { background-position: 0 -60px; }
    .cb-enable.selected span { background-position: left -150px; color: #fff; }
    .switch label, h2 {cursor:pointer;-moz-user-select:-moz-none;-o-user-select:none;-khtml-user-select:none;-webkit-user-select:none;}
</style>
			]]></add>
		</operation>
	</file>
	<file name="catalog/controller/product/product.php">
        <operation>
    		<search position="replace" error="log" offset="13"><![CDATA[
			    $json['error'] = $this->language->get('error_name');
			]]></search>
			<add><![CDATA[
                $json['error'] = $this->language->get('error_name');
            }
            
			$text_symbol = $this->config->get('config_review_text_symbol');
            
            if (!isset($text_symbol)) {
                if ((utf8_strlen($this->request->post['text']) < 25) || (utf8_strlen($this->request->post['text']) > 1000)) {
        		    $json['error'] = $this->language->get('error_text');
			    }
            } else {
                if ((utf8_strlen($this->request->post['text']) < $text_symbol) || (utf8_strlen($this->request->post['text']) > 1000)) {
    			    $json['error'] = sprintf($this->language->get('error_text_symbol'), $text_symbol);
			    }
            }
            
            if (empty($this->request->post['rating'])) {
                $json['error'] = $this->language->get('error_rating');
            }
            
            if ($this->config->get('config_review_captcha'))  {
        	    if (empty($this->session->data['captcha']) || ($this->session->data['captcha'] != $this->request->post['captcha'])) {
			    	$json['error'] = $this->language->get('error_captcha');
			    }
            }
			]]></add>
		</operation>
        <operation>
    		<search position="replace" error="log"><![CDATA[
			$json['success'] = $this->language->get('text_success');
			]]></search>
			<add><![CDATA[
            if ($this->config->get('config_review_email')) {
            $this->language->load('mail/new_review');

            $customer_name = html_entity_decode($this->request->post['name'], ENT_QUOTES, 'UTF-8');
            $subject = "[".$this->config->get('config_name')."] ".sprintf($this->language->get('text_subject'), $customer_name);
            $review = html_entity_decode($this->request->post['text'], ENT_QUOTES, 'UTF-8');
            $review1 = html_entity_decode($this->request->post['good'], ENT_QUOTES, 'UTF-8');
            $review2 = html_entity_decode($this->request->post['bads'], ENT_QUOTES, 'UTF-8');
            $review_id = $this->model_catalog_review->getLastReview();

            $template = new Template();

            $template->data['title']            = $subject;
            $template->data['text_from']         = sprintf($this->language->get('text_from'), html_entity_decode($customer_name, ENT_QUOTES, 'UTF-8'));
            $template->data['text_review']      = $this->language->get('text_review');
            $template->data['review']           = $review;
            $template->data['review1']           = $review1;
            $template->data['review2']           = $review2;
            $template->data['text_approve']      = $this->language->get('text_approve');
            $template->data['text_approve_link']   = $this->language->get('text_approve_link');

            $template->data['store_url']         = $this->config->get('config_url');
            $template->data['store_name']         = $this->config->get('config_name');
            $template->data['approve_url']         = HTTP_SERVER. 'admin/index.php?route=catalog/review/update&review_id='.$review_id;

            $template->data['image'] = HTTP_SERVER."image/".$this->config->get('config_logo');

            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/mail/new_review.tpl')) {
                $html = $template->fetch($this->config->get('config_template') . '/template/mail/new_review.tpl');
            } else {
                $html = $template->fetch('default/template/mail/new_review.tpl');
            }

            $mail = new Mail();
            $mail->protocol = $this->config->get('config_mail_protocol');
            $mail->parameter = $this->config->get('config_mail_parameter');
            $mail->hostname = $this->config->get('config_smtp_host');
            $mail->username = $this->config->get('config_smtp_username');
            $mail->password = $this->config->get('config_smtp_password');
            $mail->port = $this->config->get('config_smtp_port');
            $mail->timeout = $this->config->get('config_smtp_timeout');

            $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8'));
            $mail->setHtml($html);

            $mail->setTo($this->config->get('config_email'));
            $mail->setFrom($this->config->get('config_email'));
            $mail->setSender($this->config->get('config_name'));
            $mail->send();
            }
            if (!$this->config->get('config_review_statusp'))  {
                $json['success'] = $this->language->get('text_success');
            } else {
                $json['success'] = $this->language->get('text_success_status');
            }
            ]]></add>
    	</operation>
		<operation>
			<search position="after" error="log"><![CDATA[
			$this->model_catalog_product->updateViewed($this->request->get['product_id']);
            ]]></search>
			<add><![CDATA[
		$this->load->model('catalog/review');
		
    	$this->data['text_on'] = $this->language->get('text_on');
		$this->data['text_no_reviews'] = $this->language->get('text_no_reviews');
        $this->data['entry_good'] = $this->language->get('entry_good');
    	$this->data['entry_bads'] = $this->language->get('entry_bads');
        $this->data['text_bads'] = $this->language->get('text_bads');
    	$this->data['text_good'] = $this->language->get('text_good');
		$this->data['text_answer'] = $this->language->get('text_answer');
		$this->data['text_comment'] = $this->language->get('text_comment');
		
		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
		} else {
			$page = 1;
		}
		
		$this->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, 50);
      	
		foreach ($results as $result) {
        if ($result['html_status'] == 1) {
        	$this->data['reviews_array'][] = array(
				'product_id' => $result['product_id'],
				'review_id'  => $result['review_id'],
        		'author'     => $result['author'],
				'text'       => html_entity_decode($result['text'], ENT_QUOTES, 'UTF-8'),
                'good'       => html_entity_decode($result['good'], ENT_QUOTES, 'UTF-8'),
    		    'bads'       => html_entity_decode($result['bads'], ENT_QUOTES, 'UTF-8'),
				'answer'     => html_entity_decode($result['answer'], ENT_QUOTES, 'UTF-8'),
				'purchased'  => $result['purchased'],
				'addimage'   => $result['addimage'],
				'rating'     => (int)$result['rating'],
        		'reviews'    => sprintf($this->language->get('text_reviews'), (int)$review_total),
        		'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
        	);
            } else {
            $this->data['reviews_array'][] = array(
    			'product_id' => $result['product_id'],
				'review_id'  => $result['review_id'],
        		'author'     => $result['author'],
				'text'       => $result['text'],
                'good'       => $result['good'],
    		    'bads'       => $result['bads'],
				'answer'     => $result['answer'],
				'purchased'  => $result['purchased'],
				'addimage'   => $result['addimage'],
				'rating'     => (int)$result['rating'],
        		'reviews'    => sprintf($this->language->get('text_reviews'), (int)$review_total),
        		'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 = 50;
		$pagination->text = $this->language->get('text_pagination');
		$pagination->url = $this->url->link('product/product/review', 'product_id=' . $this->request->get['product_id'] . '&page={page}');
		
		$this->data['pagination'] = $pagination->render();
            ]]></add>
		</operation>
	</file>
	<file name="catalog/language/russian/product/product.php">
		<operation>
			<search position="before"><![CDATA[
			?>
			]]></search>
			<add><![CDATA[
            $_['button_continue']       = 'Оставить отзыв';
    		$_['entry_good']            = 'Достоинства:';
			$_['entry_bads']            = 'Недостатки:';
            $_['entry_review']          = 'Комментарий:';
            $_['text_answer']           = 'Администратор:';
            $_['text_success_status']   = 'Спасибо за ваш отзыв. Он появится после обновления страницы';
            $_['error_text']            = 'Текст комментария должен быть от 25 до 1000 символов!';
            $_['error_text_symbol']     = 'Текст комментария должен быть от %s до 1000 символов!';
            $_['error_name']            = 'Ваше имя должно быть от 3 до 25 символов!';
            $_['entry_captcha']         = 'Код с картинки:';
    		$_['text_on']               = ' от ';
			]]></add>
		</operation>
	</file>
	<file name="catalog/model/catalog/review.php">
        <operation>
            <search position="replace"><![CDATA[
                public function addReview($product_id, $data) {
            ]]></search>
            <add><![CDATA[
                public function getLastReview(){
                    $query = $this->db->query("SELECT review_id FROM ".DB_PREFIX."review WHERE customer_id = '".$this->customer->getId()."' ORDER BY `review_id` DESC LIMIT 1");
                   return $query->row['review_id'];
                }
                public function addReview($product_id, $data) {
                if (!$this->config->get('config_review_statusp'))  {
                    $review_statusp = 0;
                } else {
                    $review_statusp = 1;
                }
            ]]></add>
        </operation>
		<operation>
    		<search position="replace" error="log"><![CDATA[
			    $this->db->query("INSERT INTO " . DB_PREFIX . "review SET
			]]></search>
			<add><![CDATA[
                $this->db->query("INSERT INTO " . DB_PREFIX . "review SET addimage = '" . $this->db->escape($data['addimage']) . "', good = '" . $this->db->escape($data['good']) . "', bads = '" . $this->db->escape($data['bads']) . "', status = '" . $review_statusp . "',
            ]]></add>
		</operation>
		<operation>
			<search position="replace" error="log"><![CDATA[
			    $query = $this->db->query("SELECT r.review_id,
			]]></search>
			<add><![CDATA[
			    $query = $this->db->query("SELECT r.review_id, r.answer, r.html_status, r.purchased, r.addimage, r.good, r.bads,
			]]></add>
		</operation>
	</file>
	<file name="catalog/view/theme/*/template/product/product.tpl">
		<operation>
			<search position="replace" offset="24" error="log"><![CDATA[
			<b><?php echo $entry_name; ?></b><br />
			]]></search>
			<add><![CDATA[
			<div id="review-form">
            <b style="display:block;float:left;width:150px;padding:4px 0 4px 0;"><?php echo $entry_name; ?></b>
            <input type="text" name="name" value="" style="margin-left:40px;"/>
			<br><br>
            <div class="rating">
                <label class="entry-rating"><?php echo $entry_rating; ?></label>
                <div class="radio-div" style="margin-left:45px;">
                    <input class="radio-star" type="radio" name="rating" value="1" />
                    <input class="radio-star" type="radio" name="rating" value="2" />
                    <input class="radio-star" type="radio" name="rating" value="3" />
                    <input class="radio-star" type="radio" name="rating" value="4" />
                    <input class="radio-star" type="radio" name="rating" value="5" />
                </div>
            <div class="star-div"><span class="icstars-0"></span></div>
            </div>
            <br><br>
			<b class="entry-b displayg"><?php echo $entry_good; ?></b>
			<textarea class="displayg" name="good" cols="40" rows="6"></textarea>
			<br class="displayg">
			<b class="entry-b displayb"><?php echo $entry_bads; ?></b>
			<textarea class="displayb" name="bads" cols="40" rows="6"></textarea>
			<br class="displayb">
			<b class="entry-b"><?php echo $entry_review; ?></b>
            <textarea name="text" cols="40" rows="6"></textarea>
            <br>
            <a id="spoilerclick" class="displayf">Добавить фото</a>
            <br>
            <div id="addimgsp" class="displayf">
                <b style="display:block;float:left;width:150px;padding:4px 0 4px 0;">Ссылка на фото:</b>
                <input type="text" name="addimage" value="" style="margin-left:40px;width: 306px;"/>
            </div>
            <div class="displayc">
            <b style="display:block;float:left;width:150px;padding:4px 0 4px 0;"><?php echo $entry_captcha; ?></b>
            <input type="text" name="captcha" value="" style="margin-left:40px;vertical-align:top;width:206px;" />
            <img src="index.php?route=product/product/captcha" alt="" id="captcha" /><br>
            </div>
            <br>
<?php if (!$this->config->get('config_review_good'))  { ?>
<style>.displayg{display:none!important;}</style>
<?php } ?>
<?php if (!$this->config->get('config_review_bad'))  { ?>
<style>.displayb{display:none!important;}</style>
<?php } ?>
<?php if (!$this->config->get('config_review_addimage'))  { ?>
<style>.displayf{display:none!important;}</style>
<?php } ?>
<?php if (!$this->config->get('config_review_captcha'))  { ?>
<style>.displayc{display:none!important;}</style>
<?php } ?>
<script>jQuery('.radio-star').hover(function(){var stars = jQuery(this).val();jQuery('.star-div').html('<span class="icstars-'+ stars +'"></span><i id="settext-'+ stars +'"></i>');},function(){var start = jQuery('input:radio[name=rating]:checked').val();if(typeof  start == 'undefined' ){start = 0;}jQuery('.star-div').html('<span class="icstars-'+ start +'"></span><i id="settext-'+ start +'"></i>');});jQuery('.radio-star').click(function(){jQuery('.radio-star').each(function(){jQuery(this).attr( 'checked', false );});jQuery(this).attr( 'checked', true );jQuery(this).each(function(){if(jQuery(this).attr("checked")=="checked"){var s = jQuery(this).val();jQuery('.star-div').stop().html('<span class="icstars-'+ s +'"></span><i id="settext-'+ s +'"></i>');}});});</script>
<script>
$(document).ready(function(){
  $('.review div:first a:last').click(function(){
    var offset1 = $('#review-title').prev().offset();
    offset1 = offset1 ? offset1.top : 10000;
    $('html, body').animate({ scrollTop: offset1 }, 'slow');
    $('#review-title').siblings('#review-form').stop(false, true).slideDown(500);
    $('#review-title').html('Скрыть форму для отзыва');
  });
  $('.review div:first a:first').click(function(){
    var offset = $('.review-list').prev().offset();
    $('html, body').animate({ scrollTop: offset.top }, 'slow');
  });
  $('#addimgsp').hide();
  $('#spoilerclick').toggle(
    function(){
      $(this).siblings('#addimgsp').stop(false, true).slideDown(500);
    },
   function(){
      $(this).siblings('#addimgsp').stop(false, true).slideUp(500);
   }
 );
  $('#review-form').hide();
  $('#review-title').before('<img src="image/review-new.png" height="22px" width="22px" alt="review icon" style="float: left;margin: -2px 3px 0 0;" />');
  $('#review-title').toggle(
    function(){
      $(this).siblings('#review-form').stop(false, true).slideDown(500);
      $(this).html('Скрыть форму для отзыва');
      var offset1 = $('#review-title').prev().offset();
        offset1 = offset1 ? offset1.top : 10000;
        $('html, body').animate({ scrollTop: offset1 }, 'slow');
    },
   function(){
      $(this).siblings('#review-form').stop(false, true).slideUp(500);
      $(this).html('Написать отзыв');
   }
 );
});
</script>
<script>
$(document).ready(function(){
    $('#captcha').click(function() {$(this).attr('src', 'index.php?route=product/product/captcha&rand='+ Math.round((Math.random() * 10000 )));});
    $('#captcha').after('<img src="image/refresh.png" style="margin:0 0 4px -16px;z-index:-1;position:relative;" />');
});
</script>
<style>
#settext-1:before{content: "Ужасно";margin-left: 7px;}
#settext-2:before{content: "Плохо";margin-left: 7px;}
#settext-3:before{content: "Средне";margin-left: 7px;}
#settext-4:before{content: "Хорошо";margin-left: 7px;}
#settext-5:before{content: "Отлично";margin-left: 7px;}
#review-title{cursor:pointer;}
.review-list .author{margin:0!important;}
.review-list .text{margin-bottom: 5px;}
#tab-review .minus {padding:0 0 8px 22px;background-image:url(image/minus.png);background-repeat: no-repeat;}
#tab-review .plus {padding:0 0 8px 22px;background-image:url(image/plus.png);background-repeat: no-repeat;}
#tab-review input[type='text']{height:17px;}
#tab-review input[type='text'], textarea{color: #333;box-shadow: inset 0px 2px 8px rgba(32, 74, 96, 0.2), 0px 0px 3px white;-moz-box-shadow: inset 0px 2px 8px hsla(200, 50%, 25%, 0.2), 0px 0px 3px white;-webkit-box-shadow: inset 0px 2px 8px rgba(32, 74, 96, 0.2), 0px 0px 3px white;-webkit-transition: all 200ms;-moz-transition: all 200ms;-ms-transition: all 200ms;-o-transition: all 200ms;transition: all 200ms;padding:3px !important;margin-top:2px;margin-bottom:2px;}
#tab-review input:focus, textarea:focus {box-shadow: inset 0px 2px 8px rgba(255, 255, 255, 0), 0px 0px 5px #209FDF;-moz-box-shadow: inset 0px 2px 8px hsla(0, 100%, 100%, 0), 0px 0px 5px hsl(200, 75%, 50%);-webkit-box-shadow: inset 0px 2px 8px rgba(255, 255, 255, 0), 0px 0px 5px #209FDF;background-color: #FFF;outline: none;border-color: rgba(255, 255, 255, 0);}
#tab-review .entry-b{display:block;float:left;width:150px;padding:47px 0 53px 0;}
#tab-review textarea{height:108px;min-height:108px;min-width:306px;max-width:540px;margin-left:40px;}
#tab-review textarea:focus,input:focus{outline:none;}
#tab-review #captcha{margin-top:2px;;cursor:pointer;padding-right:18px;}
#tab-review > div .radio-div {width: 77px;float: left;margin-left: 5px;}
#tab-review > div .radio-div input[type=radio] {position:relative;margin:0 0 0 -4px;padding:0;width:16px;height: 17px;opacity:0;z-index:2;cursor:pointer;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter: alpha(opacity=0);}
#tab-review .star-div{height:17px;float:left;margin:1px 0 0 -84px;}
#tab-review .entry-rating{cursor:default;display:block;float:left;width:150px;padding:4px 0 4px 0;font-weight:bold;}
.star-div span{width:77px;height:17px;display:inline-block;background: url(image/stars.png) no-repeat;}
span.icstars-0{background-position:0 0}
span.icstars-1{background-position:0 -16px}
span.icstars-2{background-position:0 -32px}
span.icstars-3{background-position:0 -48px}
span.icstars-4{background-position:0 -64px}
span.icstars-5{background-position:0 -80px}
</style>
<style>.vot_updown2{float:right;font-size: 13px !important;} #yesvot{color: #298705;font-size: 13px;} #novot{color: red;font-size: 13px;}</style>
<script src="catalog/controller/voting/voting.js" type="text/javascript"></script>
			]]></add>
		</operation>
		<operation>
            <search position="after" error="log"><![CDATA[
        		id="button-review"
			]]></search>
			<add><![CDATA[
			</div>
			]]></add>
        </operation>
		<operation>
			<search position="after" error="log"><![CDATA[
			$('input[name=\'name\']').val('');
			]]></search>
			<add><![CDATA[				
			$('textarea[name=\'good\']').val('');
			$('textarea[name=\'bads\']').val('');
			$('input[name=\'addimage\']').val('');
			]]></add>
		</operation>
        <operation>
    		<search position="replace" offset="10" error="log"><![CDATA[
			$('#review .pagination a').live('click', function() {
			]]></search>
			<add><![CDATA[
			]]></add>
		</operation>
		<operation>
			<search position="replace" error="log"><![CDATA[
			data: 'name=' + encodeURIComponent($('input[name=\'name\']').val()) + '&text=' + encodeURIComponent($('textarea[name=\'text\']').val()) + '&rating=' + encodeURIComponent($('input[name=\'rating\']:checked').val() ? $('input[name=\'rating\']:checked').val() : '') + '&captcha=' + encodeURIComponent($('input[name=\'captcha\']').val()),
			]]></search>
			<add><![CDATA[
			data: 'name=' + encodeURIComponent($('input[name=\'name\']').val()) + '&addimage=' + encodeURIComponent($('input[name=\'addimage\']').val()) + '&good=' + encodeURIComponent($('textarea[name=\'good\']').val()) + '&bads=' + encodeURIComponent($('textarea[name=\'bads\']').val()) + '&text=' + encodeURIComponent($('textarea[name=\'text\']').val()) + '&rating=' + encodeURIComponent($('input[name=\'rating\']:checked').val() ? $('input[name=\'rating\']:checked').val() : '') + '&captcha=' + encodeURIComponent($('input[name=\'captcha\']').val()),
			]]></add>
		</operation>
        <operation>
    		<search position="replace" error="log"><![CDATA[
			<div id="review"></div>
            ]]></search>
			<add><![CDATA[
			<div id="review">
    		 <?php if ($reviews_array) { ?>
                <?php foreach ($reviews_array as $review) { ?>
                <div class="review-list">
                  <div class="author">
				  <b><?php echo $review['author']; ?></b> <?php echo $text_on; ?> <?php echo $review['date_added']; ?>
				  <?php if ($review['purchased'] == 1) { ?>
					<img src="image/man-with-cart2.png" alt="<?php echo $review['author']; ?> купил(а) этот товар в нашем магазине" title="<?php echo $review['author']; ?> купил(а) этот товар в нашем магазине" width="14px" height="11px" />
				  <?php } ?>
				  </div>
                  <div class="rating"><img src="catalog/view/theme/default/image/stars-<?php echo $review['rating'] . '.png'; ?>" alt="<?php echo $review['reviews']; ?>" /></div>
                  <br/>
    		<?php if ($review['good']) { ?>
			<br/>
			<div class="plus"><?php echo preg_replace("/\s\s+/", "<br>", $review['good']); ?></div>
			<?php } ?>
			<?php if ($review['bads']) { ?>
			<br/>
			<div class="minus"><?php echo preg_replace("/\s\s+/", "<br>", $review['bads']); ?></div>
			<?php } ?>
			<?php if ($review['text']) { ?>
			<br/>
			<div class="text"><?php echo preg_replace('/\s\s+/', "<br>", $review['text']); ?></div>
			<?php } ?>
            <?php if ($review['addimage']) { ?>
            <div class="addimage"><a href="<?php echo $review['addimage']; ?>" class="colorbox"><img src="<?php echo $review['addimage']; ?>" style="max-width:150px;max-height:100px;" /></a></div>
            <?php } ?>
            <?php if ($review['answer']) { ?>
    		<br/><div class="answer" style="margin-left: 25px; padding: 5px; background: #F7F4EA; font-style: italic;"><?php echo '<b>'.$text_answer.'</b> '.preg_replace('/\s\s+/', "<br>", $review['answer']); ?></div>
			<?php } ?>
			<div class="vot_updown2" id="vt_<?php echo $review['review_id']; ?>_<?php echo $review['product_id']; ?>_<?php echo $review['rating']; ?>"></div>
                </div>
                <?php } ?>
                <div class="pagination"><?php echo $pagination; ?></div>
                <?php } else { ?>
                <div class="content"><?php echo $text_no_reviews; ?></div>
                <?php } ?>
			</div>
            ]]></add>
		</operation>
	</file>
    <file name="system/library/captcha.php">
    <operation>
    <search position="replace" offset="1" error="log"><![CDATA[
    protected $width = 35;
    ]]></search>
    <add><![CDATA[
    protected $width = 25;
    protected $height = 100;
    ]]></add>
    </operation>
    <operation>
    <search position="replace" offset="3" error="log"><![CDATA[
    imagefilledrectangle($image, 0, 0, $width, 0, $black);
    ]]></search>
    <add><![CDATA[
    $grey = imagecolorallocate($image, 204, 204, 204);
    imagefilledrectangle($image, 0, 0, $width, 0, $grey);
    imagefilledrectangle($image, $width - 1, 0, $width - 1, $height - 1, $grey);
    imagefilledrectangle($image, 0, 0, 0, $height - 1, $grey);
    imagefilledrectangle($image, 0, $height - 1, $width, $height - 1, $grey);
    ]]></add>
    </operation>
    </file>
    <file name="admin/view/template/setting/setting.tpl">
        <operation>
         <search position="after"><![CDATA[
         <div id="tab-option">
         ]]></search>
         <add><![CDATA[
         <h2>Отзывы</h2>
          <table class="form">
            <tr>
              <td>Поле недостатков</td>
              <td><?php if ($config_review_bad) { ?>
                <input type="radio" name="config_review_bad" value="1" checked="checked" />Да
                <input type="radio" name="config_review_bad" value="0" />Нет
                <?php } else { ?>
                <input type="radio" name="config_review_bad" value="1" />Да
                <input type="radio" name="config_review_bad" value="0" checked="checked" />Нет
                <?php } ?></td>
            </tr>
            <tr>
              <td>Поле достоинств</td>
              <td><?php if ($config_review_good) { ?>
                <input type="radio" name="config_review_good" value="1" checked="checked" />Да
                <input type="radio" name="config_review_good" value="0" />Нет
                <?php } else { ?>
                <input type="radio" name="config_review_good" value="1" />Да
                <input type="radio" name="config_review_good" value="0" checked="checked" />Нет
                <?php } ?></td>
            </tr>
            <tr>
              <td>Поле фото</td>
              <td><?php if ($config_review_addimage) { ?>
                <input type="radio" name="config_review_addimage" value="1" checked="checked" />Да
                <input type="radio" name="config_review_addimage" value="0" />Нет
                <?php } else { ?>
                <input type="radio" name="config_review_addimage" value="1" />Да
                <input type="radio" name="config_review_addimage" value="0" checked="checked" />Нет
                <?php } ?></td>
            </tr>
            <tr>
              <td>Поле капчи</td>
              <td><?php if ($config_review_captcha) { ?>
                <input type="radio" name="config_review_captcha" value="1" checked="checked" />Да
                <input type="radio" name="config_review_captcha" value="0" />Нет
                <?php } else { ?>
                <input type="radio" name="config_review_captcha" value="1" />Да
                <input type="radio" name="config_review_captcha" value="0" checked="checked" />Нет
                <?php } ?></td>
            </tr>
            <tr>
              <td>Автопубликация отзывов</td>
              <td><?php if ($config_review_statusp) { ?>
                <input type="radio" name="config_review_statusp" value="1" checked="checked" />Да
                <input type="radio" name="config_review_statusp" value="0" />Нет
                <?php } else { ?>
                <input type="radio" name="config_review_statusp" value="1" />Да
                <input type="radio" name="config_review_statusp" value="0" checked="checked" />Нет
                <?php } ?></td>
            </tr>
            <tr>
              <td>Оповещение о новом отзыве по e-mail</td>
              <td><?php if ($config_review_email) { ?>
                <input type="radio" name="config_review_email" value="1" checked="checked" />Да
                <input type="radio" name="config_review_email" value="0" />Нет
                <?php } else { ?>
                <input type="radio" name="config_review_email" value="1" />Да
                <input type="radio" name="config_review_email" value="0" checked="checked" />Нет
                <?php } ?></td>
            </tr>
            <tr>
              <td>Мин длина комментария</td>
              <td>
                <?php if (empty($config_review_text_symbol)) { ?>
                <input type="text" name="config_review_text_symbol" value="25" size="3" />
                <?php } else { ?>
                <input type="text" name="config_review_text_symbol" value="<?php echo $config_review_text_symbol; ?>" size="3" />
                <?php } ?>
              </td>
            </tr>
          </table>
         ]]></add>
        </operation>
    </file>
    <file name="admin/controller/setting/setting.php">
        <operation>
        <search position="before"><![CDATA[
         if (isset($this->request->post['config_catalog_limit'])) {
         ]]></search>
         <add><![CDATA[
         if (isset($this->request->post['config_review_good'])) {
            $this->data['config_review_good'] = $this->request->post['config_review_good'];
		 } else {
			$this->data['config_review_good'] = $this->config->get('config_review_good');
		 }
         if (isset($this->request->post['config_review_bad'])) {
            $this->data['config_review_bad'] = $this->request->post['config_review_bad'];
		 } else {
			$this->data['config_review_bad'] = $this->config->get('config_review_bad');
		 }
         if (isset($this->request->post['config_review_addimage'])) {
            $this->data['config_review_addimage'] = $this->request->post['config_review_addimage'];
		 } else {
			$this->data['config_review_addimage'] = $this->config->get('config_review_addimage');
		 }
         if (isset($this->request->post['config_review_captcha'])) {
            $this->data['config_review_captcha'] = $this->request->post['config_review_captcha'];
		 } else {
			$this->data['config_review_captcha'] = $this->config->get('config_review_captcha');
		 }
         if (isset($this->request->post['config_review_statusp'])) {
            $this->data['config_review_statusp'] = $this->request->post['config_review_statusp'];
    	 } else {
			$this->data['config_review_statusp'] = $this->config->get('config_review_statusp');
		 }
         if (isset($this->request->post['config_review_email'])) {
            $this->data['config_review_email'] = $this->request->post['config_review_email'];
         } else {
			$this->data['config_review_email'] = $this->config->get('config_review_email');
		 }
         if (isset($this->request->post['config_review_text_symbol'])) {
            $this->data['config_review_text_symbol'] = $this->request->post['config_review_text_symbol'];
         } else {
    		$this->data['config_review_text_symbol'] = $this->config->get('config_review_text_symbol');
		 }
         ]]></add>
        </operation>
    </file>
 </modification>

Как вы думаете какая вероятность конфликта в стольких изменениях кода opencart ;) ?

После этого еще кто-то хочет "бесплатный тыц" ?

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


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

4. тыц (бесплатно)

 

А что мне рассказывать то ? 

 

Кстати, для информации: "теперяшний" автор этого модуля для своих проектов и коммерческих проектов своих клиентов, почему то использует не свой "бесплатный тыц", а "феррари" ;)

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


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

А мне "феррари" уж очень нравится )) 

Я правда еще до конца не разобралась во всем функционале, но сколько вопросов сразу решено одним модулем, это просто сказка ))

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


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

мод может и полезный, но вот это

<search position="replace" offset="54" error="log">

убило :ugeek:

 

впрочем, как говорится - дареному коню.. ;)

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

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


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

мод может и полезный, но вот это

<search position="replace" offset="54" error="log">

убило :ugeek:

 

впрочем, как говорится - дареному коню.. ;)

Дык нельзя принимать в стойло "буйного" коня :)

Рано или поздно такой код (куча replace)  vqmod положит не только отзывы, но и весь сайт

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


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

Спорить с тобой тяжело очень - Все равно останусь при своем мнении 

И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать 

 

Так что я все равно буду при своем мнении

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


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

Спорить с тобой тяжело очень - Все равно останусь при своем мнении 

И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать 

 

Так что я все равно буду при своем мнении

 

А здесь и спора нет никакого.

Ничего, с опытом придет понимание

 

И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать

 

Так, это вообще будет катастрофа :) Больше такого никому не говорите

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

Идем быстро учить мат. часть ;)

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


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

А здесь и спора нет никакого.

Ничего, с опытом придет понимание

 

 

Так, это вообще будет катастрофа :) Больше такого никому не говорите

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

Идем быстро учить мат. часть ;)

 

Если я сам буду делать - непереживай я привяжусь - окей !!

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


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

Если я сам буду делать

 

"Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте)  про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав).

Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы"  и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам

Надо думать стратегически а не тактически в этом вопросе.

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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