Тестируем на Залили все файлы, кроме вкьюмодовского. Заходим в админку (по другому не пускает). Заливаем файл ХМЛ. Дальше запускаем в браузере http://my-server-store.com/apr_install.php Получаем: --- Добавлено, 3 окт 2016 --- Сразу же получаем ошибку в админке: Parse error: syntax error, unexpected T_ELSE in /++++++++++/vqmod/vqcache/vq2-admin_model_catalog_review.php on line 14 --- Добавлено, 3 окт 2016 --- Что мы тут имеем (код конечно больше - берем первую часть, где включена 14-я): PHP: <?phpclass ModelCatalogReview extends Model { public function quickEditReview($review_id, $column, $value, $lang_id=null, $data=null) { $editable = array('product', 'author', 'text', 'rating', 'status', 'date_added'); $result = false; if (in_array($column, $editable)) { if (in_array($column, array('status'))) $result = $this->db->query("UPDATE " . DB_PREFIX . "review SET `" . $column . "` = '" . (int)$value . "', date_modified = NOW() WHERE review_id = '" . (int)$review_id . "'"); $this->load->model('catalog/product_review'); $this->model_catalog_product_review->editReviewEvent($review_id, $data); else if ($column == "product") $result = $this->db->query("UPDATE " . DB_PREFIX . "review SET product_id = '" . (int)$value . "', date_modified = NOW() WHERE review_id = '" . (int)$review_id . "'"); $this->load->model('catalog/product_review'); $this->model_catalog_product_review->editReviewEvent($review_id, $data); else if ($column == "author") $result = $this->db->query("UPDATE " . DB_PREFIX . "review SET author = '" . $this->db->escape($value) . "', date_modified = NOW() WHERE review_id = '" . (int)$review_id . "'"); $this->load->model('catalog/product_review'); $this->model_catalog_product_review->editReviewEvent($review_id, $data); else if ($column == "text") $result = $this->db->query("UPDATE " . DB_PREFIX . "review SET text = '" . $this->db->escape(strip_tags($value)) . "', date_modified = NOW() WHERE review_id = '" . (int)$review_id . "'"); $this->load->model('catalog/product_review'); $this->model_catalog_product_review->editReviewEvent($review_id, $data); else if ($column == "rating") { $rating = (int)$value < 1 ? 1 : (int)$value > 5 ? 5 : (int)$value; $result = $this->db->query("UPDATE " . DB_PREFIX . "review SET rating = '" . $rating . "', date_modified = NOW() WHERE review_id = '" . (int)$review_id . "'"); $this->load->model('catalog/product_review'); $this->model_catalog_product_review->editReviewEvent($review_id, $data); } else if ($column == "date_added") { $date = $value; $result = $this->db->query("UPDATE " . DB_PREFIX . "review SET date_added = '" . $date . "', date_modified = NOW() WHERE review_id = '" . (int)$review_id . "'"); $this->load->model('catalog/product_review'); $this->model_catalog_product_review->editReviewEvent($review_id, $data); } } $this->cache->delete('product'); return $result; } --- Добавлено, 3 окт 2016 --- 14-я строка. else if ($column == "product") --- Добавлено, 3 окт 2016 --- По-ходу скобы не достает. --- Добавлено, 3 окт 2016 --- Что на говорят логи: PHP: MOD DETAILS: modFile : /**************/vqmod/xml/z_advanced_product_reviews.xml id : Advanced Product Reviews version : 1.6 vqmver : 2.5.1 author : AdikonVQModObject::parseMods - Could not resolve path for [admin/view/template/common/menu.tpl] (SKIPPED)VQModObject::parseMods - Could not resolve path for [admin/controller/common/menu.php] (SKIPPED) --- Добавлено, 3 окт 2016 --- С логов ерунда - в ХМЛ прописано одновременно и для 2.0 и для 1.5.6 В 1.5.6 таких файлов нету. --- Добавлено, 3 окт 2016 --- Забыл додать файл вкьюмода модуля
Зависит от потребностей. Всяких продвинутых отзывов - полно. Тогда, надо у него спрашивать. Но со скобками тут очевидный косяк. Правда, не совсем понятно, как это могло быть вызвано кривым занулом - этот метод в модель прописывает vQmod (по крайней мере, в оригинале его нет), а его ж не кодируют. Ну, как вариант - автор жуткий гавнокодер и сознательно местами не использовал скобки (php это позволяет), а ошибка возникла из-за того, что у тебя очень старая версия php (у меня нет абсолютно никакой информации о том, что на 5.3 отсутствие скобок обрабатывается как-то иначе, чем на более поздних версиях, но если скобки так и в оригинале, то других причин я не вижу).
Так зулуса тему нашел. Может кому пригодится. http://wmasteru.org/threads/Проблема-с-advanced-product-review.12567/ но у него такой ошибки не было. Ладно пока оставим и пойдем искать аналог. Если есть что - советуйте.
И так решил заменить модуль но в том-же направлении, так что думаю нарушением темы не будет. Есть модуль Запустился без проблем НО проблема теперь пошла в не дефолтном отображении в самом шаблоне. Как видим в нужной нам таб модуль не влазит. В настройках есть: При выборе 1 - модуль отображается внизу шаблона, как и задумано "производителем", но нам этого не надо - так как очень большая получается страница. При выборе 2 - все исчезает (типа в вкладку ОТЗЫВЫ но не отображается). Для упрощения с верхнего отображения как тут опущу вниз вкладку Отзывы. Как видим модуль переходить во вкладку, но не прячется, как было задумано.
Там просто контент таба отзывов воткнулся в блок с кнопками табов, надо его поставить после этого блока: #tab-review внутри #tabs, а должен быть за его пределами.
Модуль работает через вкьмод. PHP: <modification> <file name="catalog/model/catalog/product.php"> <operation> <search position="after" error="log"><![CDATA[ class ModelCatalogProduct extends Model { ]]></search> <add><![CDATA[ public $mr_tablename="review"; public function __construct($params) { parent::__construct($params); $this->load->model('setting/setting'); $settings=$this->model_setting_setting->getSetting('megareviews'); if(!isset($settings['megareviews_module'][0]['status']))return; if($settings['megareviews_module'][0]['status'])$this->mr_tablename="megareviews"; } ]]></add> </operation> <operation> <search position="replace" error="log"><![CDATA[ FROM " . DB_PREFIX . "review ]]></search> <add><![CDATA[ FROM " . DB_PREFIX . $this->mr_tablename . " ]]></add> </operation> </file> <file name="catalog/controller/product/product.php"> <operation> <search position="after" error="log"><![CDATA[ public function index() { ]]></search> <add><![CDATA[ $this->load->model('setting/setting'); $settings=$this->model_setting_setting->getSetting('megareviews'); if(isset($settings['megareviews_module'][0]['status'])){ $this->data['mr_tab']=($settings['megareviews_module'][0]['position']=="content_mr" && $settings['megareviews_module'][0]['status']); $this->data['mr_status']=$settings['megareviews_module'][0]['status']; }else{ $this->data['mr_status']=0; $this->data['mr_tab']=0; } ]]></add> </operation> <operation> <search position="replace" error="log"><![CDATA[ $this->data['review_status'] = $this->config->get('config_review_status'); ]]></search> <add><![CDATA[ if($this->data['mr_status'])$this->data['review_status'] = 0; else $this->data['review_status'] = $this->config->get('config_review_status'); ]]></add> </operation> <operation> <search position="before" index="1,2" error="log"><![CDATA[ 'common/content_bottom', ]]></search> <add><![CDATA[ 'common/content_megareviews', ]]></add> </operation> </file> <file name="catalog/view/theme/default/template/product/product.tpl"> <operation> <search position="replace" index="1" error="log"><![CDATA[ <?php if ($review_status) { ?> ]]></search> <add><![CDATA[ <?php if ($review_status || $mr_status) { ?> ]]></add> </operation> <operation> <search position="replace" index="1" error="log"><![CDATA[ <?php if ($review_status) { ?> ]]></search> <add><![CDATA[ <?php if ($mr_tab || (!$mr_status && $review_status)) { ?> ]]></add> </operation> <operation> <search position="before" index="1" error="log"><![CDATA[ <?php if ($review_status) { ?> ]]></search> <add><![CDATA[ <?php if ($mr_tab) echo '<div id="tab-review" class="tab-content">'.$content_megareviews.'</div>'; ?> ]]></add> </operation> <operation> <search position="replace" index="1" error="log"><![CDATA[ $('a[href=\'#tab-review\']').trigger('click'); ]]></search> <add><![CDATA[ $('a[href=\'#tab-review\']').trigger('click');if($('#megareviews_box').length>0)$('html,body').animate({scrollTop: $('#megareviews_box').offset().top}, 500); ]]></add> </operation> </file> </modification><!--<modification> - This is the highest level of the file and there can only be one<id> - This is the name of the mod. Format: Free form text. (Informational)<version> - This is the version of the mod. Format: Number and Decimal (1.0.0) (Informational)<author> - This is the author of the mod. Format: Free form text (Informational)<file> - This is the name of the file to modify. Requires attribute "name" as relative filename (catalog/controller/product/product.php). There can be multiple<operation> - This is the wrapper of the actual operation occuring. There can be multiple operations to the same file.<search> - This is the first required step of the operation. Uses an optional attribute "position" set to before|after|replace. replace is default. One per operation. Use CDATA tags to wrap code.<add> - This is the second required step of the operation. Uses an optional attribute "trim" set to true|false to trim away whitespace and linebreaks. false is default. One per operation. Location of added data depends on the position of the <search> command. Use CDATA tags to wrap code.<![CDATA[ ]]> - These are called CDATA tags and they are used by xml to specify that the data between should not be evaluated.--> --- Добавлено, 5 окт 2016 --- Как я понимаю проблема в строке HTML: <operation> <search position="before" index="1" error="log"><![CDATA[ <?php if ($review_status) { ?> ]]></search> <add><![CDATA[ <?php if ($mr_tab) echo '<div id="tab-review" class="tab-content">'.$content_megareviews.'</div>'; ?> ]]></add> </operation> --- Добавлено, 5 окт 2016 --- Не не то пальто. --- Добавлено, 5 окт 2016 --- В нормальном отображении идет так: PHP: <div id="tabs" class="htabs"><a href="#tab-description" class="selected" style="display: inline;">Описание</a><a href="#tab-review" style="display: inline;">Отзывы (1)</a></div> --- Добавлено, 5 окт 2016 --- А у меня получается PHP: <div id="tabs" class="htabs"><a href="#tab-description" class="selected" style="display: inline;">Описание</a> <div id="tab-review" class="tab-content"><div id="megareviews_box"> <a id="megareviews" style="display: inline;"></a> <div id="mr_total"> <div class="mr-rating-stars"> </div> --- Добавлено, 5 окт 2016 --- Поищем как этот код выглядит в оригинале и добавим. Посмотрим как отреагирует.
Оно втыкает вместо кнопки таба контент этого таба и судя по коду vQmod, оно так и задумано Там index="1", а должно быть, по идее, 2.
Выставление всех "2" в вкьсоде вместо 1 решает вопрос впихивание модуля в вкладку, если вкладки внизу. Но если вкладки вверху - модуль не воспринимает и остается отдельной песней себе висеть. --- Добавлено, 5 окт 2016 --- Пока заковыку вижу в этом поле PHP: <file name="catalog/view/theme/default/template/product/product.tpl"> <operation> <search position="replace" index="2" error="log"><![CDATA[ <?php if ($review_status) { ?> ]]></search> <add><![CDATA[ <?php if ($review_status || $mr_status) { ?> ]]></add> </operation> <operation> <search position="replace" index="2" error="log"><![CDATA[ <?php if ($review_status) { ?> ]]></search> <add><![CDATA[ <?php if ($mr_tab || (!$mr_status && $review_status)) { ?> ]]></add> </operation> <operation> <search position="before" index="2" error="log"><![CDATA[ <?php if ($review_status) { ?> ]]></search> <add><![CDATA[ <?php if ($mr_tab) echo '<div id="tab-review" class="tab-content">'.$content_megareviews.'</div>'; ?> ]]></add> </operation> <operation> <search position="replace" index="2" error="log"><![CDATA[ $('a[href=\'#tab-review\']').trigger('click'); ]]></search> <add><![CDATA[ $('a[href=\'#tab-review\']').trigger('click');if($('#megareviews_box').length>0)$('html,body').animate({scrollTop: $('#megareviews_box').offset().top}, 500); ]]></add> </operation> --- Добавлено, 5 окт 2016 --- Переносом дива можно сместить по странице, но не в таб. Заменив $review_status включаются просто отзывы вверху, как и положено. Получается модуль писался но не задумывался что будет отдельная вкладка.
Не надо все, я говорил только о том индексе, который был в куске выше. Там и единицы тоже где-то должны быть и вероятно везде кроме модификатора, который выводит контент.
сделал следующее: PHP: <operation> <search position="before" index="2" error="log"><![CDATA[ <?php if ($review_status) { ?> ]]></search> <add><![CDATA[ <?php if ($mr_tab) echo '<div id="tab-review" class="tab-content">'.$content_megareviews.'</div>'; ?> ]]></add> </operation> Вроде пашет. Иду ставить на центральный магаз и тестировать. Тему пока не закрывать)