[Решено] Установка ADVANCED PRODUCT REVIEWS

Тема в разделе "OpenCart", создана пользователем MGT1, 3 окт 2016.

Статус темы:
Закрыта.
  1. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    610
    Симпатии:
    182
    Тестируем на


    Залили все файлы, кроме вкьюмодовского. Заходим в админку (по другому не пускает).
    Заливаем файл ХМЛ.

    Дальше запускаем в браузере 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:
    <?php
    class 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 : (int)$value : (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    
    Adikon
    VQModObject
    ::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 ---
    Забыл додать файл вкьюмода модуля
     
    Последнее редактирование: 3 окт 2016
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.036
    Симпатии:
    774
    Кажись, модуль криво занулен. Там почти везде скобок не достаёт. Советую на свалку его.
     
  3. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    610
    Симпатии:
    182
    Последнее редактирование: 3 окт 2016
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.036
    Симпатии:
    774
    Зависит от потребностей. Всяких продвинутых отзывов - полно.

    Тогда, надо у него спрашивать. Но со скобками тут очевидный косяк. Правда, не совсем понятно, как это могло быть вызвано кривым занулом - этот метод в модель прописывает vQmod (по крайней мере, в оригинале его нет), а его ж не кодируют. Ну, как вариант - автор жуткий гавнокодер и сознательно местами не использовал скобки (php это позволяет), а ошибка возникла из-за того, что у тебя очень старая версия php (у меня нет абсолютно никакой информации о том, что на 5.3 отсутствие скобок обрабатывается как-то иначе, чем на более поздних версиях, но если скобки так и в оригинале, то других причин я не вижу).
     
  5. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    610
    Симпатии:
    182
  6. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    610
    Симпатии:
    182
    И так решил заменить модуль но в том-же направлении, так что думаю нарушением темы не будет.
    Есть модуль


    Запустился без проблем НО проблема теперь пошла в не дефолтном отображении в самом шаблоне.



    Как видим в нужной нам таб модуль не влазит.
    В настройках есть:
    При выборе 1 - модуль отображается внизу шаблона, как и задумано "производителем", но нам этого не надо - так как очень большая получается страница.
    При выборе 2 - все исчезает (типа в вкладку ОТЗЫВЫ но не отображается).

    Для упрощения с верхнего отображения как тут


    опущу вниз вкладку Отзывы. Как видим модуль переходить во вкладку, но не прячется, как было задумано.
     
  7. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.036
    Симпатии:
    774
    Там просто контент таба отзывов воткнулся в блок с кнопками табов, надо его поставить после этого блока: #tab-review внутри #tabs, а должен быть за его пределами.
     
  8. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    610
    Симпатии:
    182
    Модуль работает через вкьмод.
    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 ---
    Поищем как этот код выглядит в оригинале и добавим. Посмотрим как отреагирует.
     
    Последнее редактирование: 5 окт 2016
  9. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.036
    Симпатии:
    774
    Оно втыкает вместо кнопки таба контент этого таба и судя по коду vQmod, оно так и задумано :Smile: Там index="1", а должно быть, по идее, 2.
     
    MGT1 нравится это.
  10. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    610
    Симпатии:
    182
    Выставление всех "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 включаются просто отзывы вверху, как и положено.
    Получается модуль писался но не задумывался что будет отдельная вкладка.
     
  11. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    2.036
    Симпатии:
    774
    Не надо все, я говорил только о том индексе, который был в куске выше. Там и единицы тоже где-то должны быть и вероятно везде кроме модификатора, который выводит контент.
     
    MGT1 нравится это.
  12. MGT1

    MGT1

    Регистрация:
    5 янв 2013
    Сообщения:
    610
    Симпатии:
    182
    сделал следующее:

    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>
    Вроде пашет. Иду ставить на центральный магаз и тестировать. Тему пока не закрывать)
     
Статус темы:
Закрыта.