geritch Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 Подскажите, какие модули можно купить для версии ocstore 1.5.5.1.2,чтобы между не было конфликтов и была максимально простая установка, желательно без ручных правок. Интересуют следующие шаблоны: 1. Шаблон дизайна,что-то ava store или какой-то другой со схожим функционалом или еще лучше. 2. Быстрый заказ, с сохранением в базу и списанием остатков 3. Фильтр товаров,что-то типа filter pro 4. Расширенные отзывы о товарах 5. Регистрация через соцсети 6. Экспорт и импорт прайс-листов 7. Упрощенная регистрация и оформление заказов 8. Расчет доставки по городу и самовывоз Желательно,чтобы это все можно было настроить самому за один день. Надіслати Поділитися на інших сайтах More sharing options...
markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 4. https://opencartforum.com/files/file/2371-oc-2-seo-cms-pro-2-блог-новости-отзывы-галерея-формы/ Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 Я бы его и взял 100% :) Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D Надіслати Поділитися на інших сайтах More sharing options... sitecreator Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D не забываем, что было пожелание: Желательно,чтобы это все можно было настроить самому за один день. При всем к вам уважении, markimax, я так и не разобрался с большинством возможностей вашего замечательного модуля. Документацию бы к нему подробную с множеством примеров на самые разные случаи жизни. Возможно, что она уже есть и я просто отстал от жизни. А так получается, что проще для многих использовать "неферрари". Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 не забываем, что было пожелание: При всем к вам уважении, markimax, я так и не разобрался с большинством возможностей вашего замечательного модуля. Документацию бы к нему подробную с множеством примеров на самые разные случаи жизни. Возможно, что она уже есть и я просто отстал от жизни. А так получается, что проще для многих использовать "неферрари". Сейчас даже сценарии установки есть на некоторые функции, есть автодаптер под ЛЮБУЮ тему, есть настройки блоков обертки, есть даже "форсаж" - кеширование полностью всей страницы HTML, есть OG разметка, есть МУЛЬТИЯЗЫЧНЫЙ кешируемый быстрый SITEMAP как отдельно, так и метод добавление в любой используемый, есть ... можно долго перечислять, все таки время много прошло с того момента как вы купили 4-ку... сейчас уже 17 версия - разница опять же как между копейкой и феррари :) А описать миллиард математических вариантов использования невозможно. Зато есть примеры на 99% случаев жизни. Разбирались даже блондинки, так как это один из самых простых по установке модуль, не требующий даже vqmod при всем его функционале Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D Я твое ферари уже 3 раза разбирал с магазина и ставил жигули - и заказчики были довольны :) Ферари для понтов - а зачем они ? Жегули и в обслуживании гораздо дешевле :) Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 ...Жегули и в обслуживании гораздо дешевле :) Ну если вы привыкли к жигулям, то на феррари, да, тяжело ездить И не рассказывайте сказки про "снос" тогда Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял arhangel это называется просто - саботаж (особенно по отзывам). И давайте дальше не будем разводить демагогию Ошибка в теме: https://opencartforum.com/topic/42394-univer-адаптивный-шаблон-для-ocstore/page-26#entry410867 Надіслати Поділитися на інших сайтах More sharing options... geritch Опубліковано: 15 червня 2015 Автор Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Здесь всё понятно. "Бесплатный тыц" - это 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 ;) ? После этого еще кто-то хочет "бесплатный тыц" ? Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) А что мне рассказывать то ? Кстати, для информации: "теперяшний" автор этого модуля для своих проектов и коммерческих проектов своих клиентов, почему то использует не свой "бесплатный тыц", а "феррари" ;) Надіслати Поділитися на інших сайтах More sharing options... Blondi Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А мне "феррари" уж очень нравится )) Я правда еще до конца не разобралась во всем функционале, но сколько вопросов сразу решено одним модулем, это просто сказка )) Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 (змінено) мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Змінено 15 червня 2015 користувачем AlexDW Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Дык нельзя принимать в стойло "буйного" коня :) Рано или поздно такой код (куча replace) vqmod положит не только отзывы, но и весь сайт Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении А здесь и спора нет никакого. Ничего, с опытом придет понимание И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Поиск модулей Подбор модулей Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 Я бы его и взял 100% :) Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D Надіслати Поділитися на інших сайтах More sharing options... sitecreator Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D не забываем, что было пожелание: Желательно,чтобы это все можно было настроить самому за один день. При всем к вам уважении, markimax, я так и не разобрался с большинством возможностей вашего замечательного модуля. Документацию бы к нему подробную с множеством примеров на самые разные случаи жизни. Возможно, что она уже есть и я просто отстал от жизни. А так получается, что проще для многих использовать "неферрари". Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 не забываем, что было пожелание: При всем к вам уважении, markimax, я так и не разобрался с большинством возможностей вашего замечательного модуля. Документацию бы к нему подробную с множеством примеров на самые разные случаи жизни. Возможно, что она уже есть и я просто отстал от жизни. А так получается, что проще для многих использовать "неферрари". Сейчас даже сценарии установки есть на некоторые функции, есть автодаптер под ЛЮБУЮ тему, есть настройки блоков обертки, есть даже "форсаж" - кеширование полностью всей страницы HTML, есть OG разметка, есть МУЛЬТИЯЗЫЧНЫЙ кешируемый быстрый SITEMAP как отдельно, так и метод добавление в любой используемый, есть ... можно долго перечислять, все таки время много прошло с того момента как вы купили 4-ку... сейчас уже 17 версия - разница опять же как между копейкой и феррари :) А описать миллиард математических вариантов использования невозможно. Зато есть примеры на 99% случаев жизни. Разбирались даже блондинки, так как это один из самых простых по установке модуль, не требующий даже vqmod при всем его функционале Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D Я твое ферари уже 3 раза разбирал с магазина и ставил жигули - и заказчики были довольны :) Ферари для понтов - а зачем они ? Жегули и в обслуживании гораздо дешевле :) Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 ...Жегули и в обслуживании гораздо дешевле :) Ну если вы привыкли к жигулям, то на феррари, да, тяжело ездить И не рассказывайте сказки про "снос" тогда Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял arhangel это называется просто - саботаж (особенно по отзывам). И давайте дальше не будем разводить демагогию Ошибка в теме: https://opencartforum.com/topic/42394-univer-адаптивный-шаблон-для-ocstore/page-26#entry410867 Надіслати Поділитися на інших сайтах More sharing options... geritch Опубліковано: 15 червня 2015 Автор Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Здесь всё понятно. "Бесплатный тыц" - это 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 ;) ? После этого еще кто-то хочет "бесплатный тыц" ? Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) А что мне рассказывать то ? Кстати, для информации: "теперяшний" автор этого модуля для своих проектов и коммерческих проектов своих клиентов, почему то использует не свой "бесплатный тыц", а "феррари" ;) Надіслати Поділитися на інших сайтах More sharing options... Blondi Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А мне "феррари" уж очень нравится )) Я правда еще до конца не разобралась во всем функционале, но сколько вопросов сразу решено одним модулем, это просто сказка )) Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 (змінено) мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Змінено 15 червня 2015 користувачем AlexDW Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Дык нельзя принимать в стойло "буйного" коня :) Рано или поздно такой код (куча replace) vqmod положит не только отзывы, но и весь сайт Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении А здесь и спора нет никакого. Ничего, с опытом придет понимание И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Поиск модулей Подбор модулей Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
sitecreator Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D не забываем, что было пожелание: Желательно,чтобы это все можно было настроить самому за один день. При всем к вам уважении, markimax, я так и не разобрался с большинством возможностей вашего замечательного модуля. Документацию бы к нему подробную с множеством примеров на самые разные случаи жизни. Возможно, что она уже есть и я просто отстал от жизни. А так получается, что проще для многих использовать "неферрари". Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 не забываем, что было пожелание: При всем к вам уважении, markimax, я так и не разобрался с большинством возможностей вашего замечательного модуля. Документацию бы к нему подробную с множеством примеров на самые разные случаи жизни. Возможно, что она уже есть и я просто отстал от жизни. А так получается, что проще для многих использовать "неферрари". Сейчас даже сценарии установки есть на некоторые функции, есть автодаптер под ЛЮБУЮ тему, есть настройки блоков обертки, есть даже "форсаж" - кеширование полностью всей страницы HTML, есть OG разметка, есть МУЛЬТИЯЗЫЧНЫЙ кешируемый быстрый SITEMAP как отдельно, так и метод добавление в любой используемый, есть ... можно долго перечислять, все таки время много прошло с того момента как вы купили 4-ку... сейчас уже 17 версия - разница опять же как между копейкой и феррари :) А описать миллиард математических вариантов использования невозможно. Зато есть примеры на 99% случаев жизни. Разбирались даже блондинки, так как это один из самых простых по установке модуль, не требующий даже vqmod при всем его функционале Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D Я твое ферари уже 3 раза разбирал с магазина и ставил жигули - и заказчики были довольны :) Ферари для понтов - а зачем они ? Жегули и в обслуживании гораздо дешевле :) Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 ...Жегули и в обслуживании гораздо дешевле :) Ну если вы привыкли к жигулям, то на феррари, да, тяжело ездить И не рассказывайте сказки про "снос" тогда Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял arhangel это называется просто - саботаж (особенно по отзывам). И давайте дальше не будем разводить демагогию Ошибка в теме: https://opencartforum.com/topic/42394-univer-адаптивный-шаблон-для-ocstore/page-26#entry410867 Надіслати Поділитися на інших сайтах More sharing options... geritch Опубліковано: 15 червня 2015 Автор Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Здесь всё понятно. "Бесплатный тыц" - это 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 ;) ? После этого еще кто-то хочет "бесплатный тыц" ? Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) А что мне рассказывать то ? Кстати, для информации: "теперяшний" автор этого модуля для своих проектов и коммерческих проектов своих клиентов, почему то использует не свой "бесплатный тыц", а "феррари" ;) Надіслати Поділитися на інших сайтах More sharing options... Blondi Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А мне "феррари" уж очень нравится )) Я правда еще до конца не разобралась во всем функционале, но сколько вопросов сразу решено одним модулем, это просто сказка )) Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 (змінено) мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Змінено 15 червня 2015 користувачем AlexDW Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Дык нельзя принимать в стойло "буйного" коня :) Рано или поздно такой код (куча replace) vqmod положит не только отзывы, но и весь сайт Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении А здесь и спора нет никакого. Ничего, с опытом придет понимание И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Поиск модулей Подбор модулей Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 не забываем, что было пожелание: При всем к вам уважении, markimax, я так и не разобрался с большинством возможностей вашего замечательного модуля. Документацию бы к нему подробную с множеством примеров на самые разные случаи жизни. Возможно, что она уже есть и я просто отстал от жизни. А так получается, что проще для многих использовать "неферрари". Сейчас даже сценарии установки есть на некоторые функции, есть автодаптер под ЛЮБУЮ тему, есть настройки блоков обертки, есть даже "форсаж" - кеширование полностью всей страницы HTML, есть OG разметка, есть МУЛЬТИЯЗЫЧНЫЙ кешируемый быстрый SITEMAP как отдельно, так и метод добавление в любой используемый, есть ... можно долго перечислять, все таки время много прошло с того момента как вы купили 4-ку... сейчас уже 17 версия - разница опять же как между копейкой и феррари :) А описать миллиард математических вариантов использования невозможно. Зато есть примеры на 99% случаев жизни. Разбирались даже блондинки, так как это один из самых простых по установке модуль, не требующий даже vqmod при всем его функционале Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D Я твое ферари уже 3 раза разбирал с магазина и ставил жигули - и заказчики были довольны :) Ферари для понтов - а зачем они ? Жегули и в обслуживании гораздо дешевле :) Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 ...Жегули и в обслуживании гораздо дешевле :) Ну если вы привыкли к жигулям, то на феррари, да, тяжело ездить И не рассказывайте сказки про "снос" тогда Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял arhangel это называется просто - саботаж (особенно по отзывам). И давайте дальше не будем разводить демагогию Ошибка в теме: https://opencartforum.com/topic/42394-univer-адаптивный-шаблон-для-ocstore/page-26#entry410867 Надіслати Поділитися на інших сайтах More sharing options... geritch Опубліковано: 15 червня 2015 Автор Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Здесь всё понятно. "Бесплатный тыц" - это 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 ;) ? После этого еще кто-то хочет "бесплатный тыц" ? Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) А что мне рассказывать то ? Кстати, для информации: "теперяшний" автор этого модуля для своих проектов и коммерческих проектов своих клиентов, почему то использует не свой "бесплатный тыц", а "феррари" ;) Надіслати Поділитися на інших сайтах More sharing options... Blondi Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А мне "феррари" уж очень нравится )) Я правда еще до конца не разобралась во всем функционале, но сколько вопросов сразу решено одним модулем, это просто сказка )) Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 (змінено) мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Змінено 15 червня 2015 користувачем AlexDW Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Дык нельзя принимать в стойло "буйного" коня :) Рано или поздно такой код (куча replace) vqmod положит не только отзывы, но и весь сайт Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении А здесь и спора нет никакого. Ничего, с опытом придет понимание И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Поиск модулей Подбор модулей Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Гість Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 Кто не ездил на феррари, тяжело понять того кто сидит за её рулем :-D Я твое ферари уже 3 раза разбирал с магазина и ставил жигули - и заказчики были довольны :) Ферари для понтов - а зачем они ? Жегули и в обслуживании гораздо дешевле :) Надіслати Поділитися на інших сайтах More sharing options...
markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 ...Жегули и в обслуживании гораздо дешевле :) Ну если вы привыкли к жигулям, то на феррари, да, тяжело ездить И не рассказывайте сказки про "снос" тогда Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял arhangel это называется просто - саботаж (особенно по отзывам). И давайте дальше не будем разводить демагогию Ошибка в теме: https://opencartforum.com/topic/42394-univer-адаптивный-шаблон-для-ocstore/page-26#entry410867 Надіслати Поділитися на інших сайтах More sharing options... geritch Опубліковано: 15 червня 2015 Автор Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Здесь всё понятно. "Бесплатный тыц" - это 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 ;) ? После этого еще кто-то хочет "бесплатный тыц" ? Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) А что мне рассказывать то ? Кстати, для информации: "теперяшний" автор этого модуля для своих проектов и коммерческих проектов своих клиентов, почему то использует не свой "бесплатный тыц", а "феррари" ;) Надіслати Поділитися на інших сайтах More sharing options... Blondi Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А мне "феррари" уж очень нравится )) Я правда еще до конца не разобралась во всем функционале, но сколько вопросов сразу решено одним модулем, это просто сказка )) Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 (змінено) мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Змінено 15 червня 2015 користувачем AlexDW Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Дык нельзя принимать в стойло "буйного" коня :) Рано или поздно такой код (куча replace) vqmod положит не только отзывы, но и весь сайт Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении А здесь и спора нет никакого. Ничего, с опытом придет понимание И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Поиск модулей Подбор модулей Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Гість Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял Надіслати Поділитися на інших сайтах More sharing options...
markimax Опубліковано: 14 червня 2015 Share Опубліковано: 14 червня 2015 А что мне рассказывать то ? на днях вот с етой темы человеку удалял arhangel это называется просто - саботаж (особенно по отзывам). И давайте дальше не будем разводить демагогию Ошибка в теме: https://opencartforum.com/topic/42394-univer-адаптивный-шаблон-для-ocstore/page-26#entry410867 Надіслати Поділитися на інших сайтах More sharing options... geritch Опубліковано: 15 червня 2015 Автор Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Здесь всё понятно. "Бесплатный тыц" - это 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 ;) ? После этого еще кто-то хочет "бесплатный тыц" ? Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) А что мне рассказывать то ? Кстати, для информации: "теперяшний" автор этого модуля для своих проектов и коммерческих проектов своих клиентов, почему то использует не свой "бесплатный тыц", а "феррари" ;) Надіслати Поділитися на інших сайтах More sharing options... Blondi Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А мне "феррари" уж очень нравится )) Я правда еще до конца не разобралась во всем функционале, но сколько вопросов сразу решено одним модулем, это просто сказка )) Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 (змінено) мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Змінено 15 червня 2015 користувачем AlexDW Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Дык нельзя принимать в стойло "буйного" коня :) Рано или поздно такой код (куча replace) vqmod положит не только отзывы, но и весь сайт Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении А здесь и спора нет никакого. Ничего, с опытом придет понимание И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Поиск модулей Подбор модулей Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
geritch Опубліковано: 15 червня 2015 Автор Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Надіслати Поділитися на інших сайтах More sharing options...
markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Ага, тыц. я этот модуль и установил, а потом для теста бесплатный модуль быстрый заказ. Кнопка не отображается. А если на чистую систему ставить без этого модуля, то все ок. Здесь всё понятно. "Бесплатный тыц" - это 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 ;) ? После этого еще кто-то хочет "бесплатный тыц" ? Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) А что мне рассказывать то ? Кстати, для информации: "теперяшний" автор этого модуля для своих проектов и коммерческих проектов своих клиентов, почему то использует не свой "бесплатный тыц", а "феррари" ;) Надіслати Поділитися на інших сайтах More sharing options... Blondi Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А мне "феррари" уж очень нравится )) Я правда еще до конца не разобралась во всем функционале, но сколько вопросов сразу решено одним модулем, это просто сказка )) Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 (змінено) мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Змінено 15 червня 2015 користувачем AlexDW Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Дык нельзя принимать в стойло "буйного" коня :) Рано или поздно такой код (куча replace) vqmod положит не только отзывы, но и весь сайт Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении А здесь и спора нет никакого. Ничего, с опытом придет понимание И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Поиск модулей Подбор модулей Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 4. тыц (бесплатно) А что мне рассказывать то ? Кстати, для информации: "теперяшний" автор этого модуля для своих проектов и коммерческих проектов своих клиентов, почему то использует не свой "бесплатный тыц", а "феррари" ;) Надіслати Поділитися на інших сайтах More sharing options... Blondi Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А мне "феррари" уж очень нравится )) Я правда еще до конца не разобралась во всем функционале, но сколько вопросов сразу решено одним модулем, это просто сказка )) Надіслати Поділитися на інших сайтах More sharing options... AlexDW Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 (змінено) мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Змінено 15 червня 2015 користувачем AlexDW Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Дык нельзя принимать в стойло "буйного" коня :) Рано или поздно такой код (куча replace) vqmod положит не только отзывы, но и весь сайт Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении А здесь и спора нет никакого. Ничего, с опытом придет понимание И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Поиск модулей Подбор модулей Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Blondi Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А мне "феррари" уж очень нравится )) Я правда еще до конца не разобралась во всем функционале, но сколько вопросов сразу решено одним модулем, это просто сказка )) Надіслати Поділитися на інших сайтах More sharing options...
AlexDW Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 (змінено) мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Змінено 15 червня 2015 користувачем AlexDW Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Дык нельзя принимать в стойло "буйного" коня :) Рано или поздно такой код (куча replace) vqmod положит не только отзывы, но и весь сайт Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении А здесь и спора нет никакого. Ничего, с опытом придет понимание И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Поиск модулей Подбор модулей Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Повний пакет SEO Автор: GeekoDev SameSite Session Fix Opencart 3 Автор: web_bond SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich
markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 мод может и полезный, но вот это <search position="replace" offset="54" error="log"> убило :ugeek: впрочем, как говорится - дареному коню.. ;) Дык нельзя принимать в стойло "буйного" коня :) Рано или поздно такой код (куча replace) vqmod положит не только отзывы, но и весь сайт Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении А здесь и спора нет никакого. Ничего, с опытом придет понимание И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Підтримка та відповіді на запитання. Модулі та розширення Поиск модулей Подбор модулей
Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении Надіслати Поділитися на інших сайтах More sharing options...
markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Спорить с тобой тяжело очень - Все равно останусь при своем мнении И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так что я все равно буду при своем мнении А здесь и спора нет никакого. Ничего, с опытом придет понимание И если перенести из vqmod в магазин то не будет проблем и все будет нормально работать Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Надіслати Поділитися на інших сайтах More sharing options... Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options... markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
Гість Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 А здесь и спора нет никакого. Ничего, с опытом придет понимание Так, это вообще будет катастрофа :) Больше такого никому не говорите Вы вообще представляете если столько будет изменений в коде карточки продукта, к какому коду тогда вообще привязываться другим vqmod модулям? Идем быстро учить мат. часть ;) Если я сам буду делать - непереживай я привяжусь - окей !! Надіслати Поділитися на інших сайтах More sharing options...
markimax Опубліковано: 15 червня 2015 Share Опубліковано: 15 червня 2015 Если я сам буду делать "Я", "я", Вам уже два разработчика (с большим опытом разработки модулей) сказали, (и пользователь рапортовал о конфликте) про 99% вероятность конфликта, а вы просто занимаетесь "юношеским максимализмом", честное слово, без обид. (лично я прислушался бы и подумал в чем не прав). Ваше конечно дело Только тогда не делайте громогласных заявлений про "сносы" и т п сказки. И никому не рассказывайте и не делайте внося изменения прямо в код opencart причем "такими" порциями в 9 кб без vqmod, при этом заявляя что это панацея от конфликтов. Ответ - с точностью до наоборот. Это костыли, которые приводят к конфликтам Надо думать стратегически а не тактически в этом вопросе. Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
Recommended Posts