Модуль Быстрое редактирование товара Product Quick Edit

  • Автор темы Автор темы Asa
  • Дата начала Дата начала
ProductQuickEditPlus_v-1.7.0_oc-2.3
language - ru-ru

 
Последнее редактирование:
Opencart 2.3 может и работает,
поставил на чистую ocStore 2.3.0.2.4

В админке модуль работает отлично, но на витрине магазина, в каталоге, вот такая ошибка

Notice: Undefined variable: user in /var/www/.../www/.../system/storage/modification/catalog/model/catalog/product.php on line 82

Fatal error: Uncaught Error: Call to a member function isLogged() on null in /var/www/.../www/.../system/storage/modification/catalog/model/catalog/product.php:82 Stack trace: #0 /var/www/.../www/.../system/storage/modification/system/engine/loader.php(178): ModelCatalogProduct->getProducts(Array) #1 /var/www/.../www/.../system/engine/proxy.php(25): Loader->{closure}(Array, Array) #2 /var/www/./www/.../catalog/controller/product/category.php(191): Proxy->__call('getProducts', Array) #3 /var/www/./www/.../storage/modification/system/engine/action.php(51): ControllerProductCategory->index() #4 /var/www/./www/.../catalog/controller/startup/router.php(25): Action->execute(Object(Registry)) #5 /var/www/./www/.../system/storage/modification/system/engine/action.php(51): ControllerStartupRouter->index() #6 /var/www/.../www/rev.z in /var/www/./www/.../system/storage/modification/catalog/model/catalog/product.php on line 82

$sql .= " LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' " . ($user->isLogged() ? '' : "AND p.status = '1'") . " AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";

А так всё хорошо начиналось.

Кто то ставил на ocStore 2.3.0.2.4 ?
 
Последнее редактирование:
Opencart 2.3 может и работает,
поставил на чистую ocStore 2.3.0.2.4

В админке модуль работает отлично, но на витрине магазина, в каталоге, вот такая ошибка

Notice: Undefined variable: user in /var/www/.../www/.../system/storage/modification/catalog/model/catalog/product.php on line 82

Fatal error: Uncaught Error: Call to a member function isLogged() on null in /var/www/.../www/.../system/storage/modification/catalog/model/catalog/product.php:82 Stack trace: #0 /var/www/.../www/.../system/storage/modification/system/engine/loader.php(178): ModelCatalogProduct->getProducts(Array) #1 /var/www/.../www/.../system/engine/proxy.php(25): Loader->{closure}(Array, Array) #2 /var/www/./www/.../catalog/controller/product/category.php(191): Proxy->__call('getProducts', Array) #3 /var/www/./www/.../storage/modification/system/engine/action.php(51): ControllerProductCategory->index() #4 /var/www/./www/.../catalog/controller/startup/router.php(25): Action->execute(Object(Registry)) #5 /var/www/./www/.../system/storage/modification/system/engine/action.php(51): ControllerStartupRouter->index() #6 /var/www/.../www/rev.z in /var/www/./www/.../system/storage/modification/catalog/model/catalog/product.php on line 82

$sql .= " LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' " . ($user->isLogged() ? '' : "AND p.status = '1'") . " AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";

А так всё хорошо начиналось.

Кто то ставил на ocStore 2.3.0.2.4 ?

Где в каталоге ? Зашел в карточку, нет подобного.

Screenshot_8.png
 
В карточке товара ошибки не было

Я так и написал - в каталоге такая ошибка
 
Щас поставил на тестовый ocStore 2.3.0.2.4 (не дефолтный)

Теперь в карточке товара вверху страницы
2022-01-26 10:28:17 - PHP Notice: Undefined index: eol_status in /var/www/.../www/.../system/storage/modification/catalog/controller/product/product.php on line 441
2022-01-26 10:28:17 - PHP Warning: Cannot modify header information - headers already sent by (output started at /var/www/.../www/.../catalog/controller/startup/error.php:34) in /var/www/.../www/.../system/storage/modification/catalog/controller/product/product.php on line 1296

$data['eol_status'] = $product_info['eol_status'];

setcookie('viewed', implode(',',$viewed_products), time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

Щас поищу с чем конфликтует, но до этого всё же было ок
 
Последнее редактирование:
Отключил этот модуль,
Архивный товар

ошибка пропала, но раньше её не было, а после исправления ошибки в каталоге появилась
 
Удалил свой код из модификатора проблемного модуля, и ошибка пропала

Хотя код вроде правильно написан

Код:
<!-- ЗДЕСЬ ДОБАВЛЯЕМ ПЕРЕМЕННУЮ В .PHP -->


    <file path="catalog/controller/product/product.php">

        <operation>

            <search><![CDATA[$data['model'] = $product_info['model'];]]></search>

            <add position="after"><![CDATA[$data['eol_status'] = $product_info['eol_status'];]]>

          </add>

        </operation>

      </file>

  

<!-- ЗДЕСЬ ДОБАВЛЯЕМ КНОПКУ В HEADER ДЛЯ БЫСТРОГО ДОСТУПА -->

  

    <file path="admin/controller/common/header.php">

            <operation>

                <search><![CDATA[

     $data['customer_approval'] = $this->url->link('customer/customer', 'token=' . $this->session->data['token'] . '&filter_approved=0', true);

                ]]></search>

                <add position="after"><![CDATA[

     $data['knopka_old_tovar'] = $this->url->link('extension/module/eol_product', 'token=' . $this->session->data['token'], 'SSL');

     $this->load->language('extension/module/eol_product');

     $data['title_old_tovar'] = $this->language->get('text_list');

                ]]></add>

            </operation>

    </file> 


    <file path="admin/view/template/common/header.tpl">

            <operation>

                <search><![CDATA[

       <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown"><?php if($alerts > 0) { ?><span class="label label-danger pull-left"><?php echo $alerts; ?></span><?php } ?> <i class="fa fa-bell fa-lg"></i></a>

                ]]></search>

                <add position="before"><![CDATA[

        <?php foreach ($stores as $store) { ?>

     <li><a href="<?php echo $knopka_old_tovar; ?>" title="<?php echo $title_old_tovar; ?>"><i style="color: red;" class="fa fa-archive fa-lg"></i></a>

        <?php } ?>

    </li>

                ]]></add>

            </operation>

    </file>
 
Последнее редактирование:
Хотя код вроде правильно написан
Попробуйте такой код
Насчет ошибки в строке 441

Код:
<operation>

            <search><![CDATA[$data['model'] = $product_info['model'];]]></search>

            <add position="after"><![CDATA[
                $data['eol_status'] = $product_info['eol_status'];
            ]]></add>

</operation>
 
Попробовал, ничего не изменилось

Не могу отличие найти от своего кода :(
Ваш код

<file path="catalog/controller/product/product.php">

<operation>

<search><![CDATA[$data['model'] = $product_info['model'];]]></search>

<add position="after"><![CDATA[$data['eol_status'] = $product_info['eol_status'];]]>

</add>

</operation>

</file>

и оригинала, есть отличия ?

<file path="catalog/controller/product/product.php">
<operation>
<search><![CDATA[if ($product_info) {]]></search>
<add position="before"><![CDATA[
if (isset($product_info['eol_status']) && $product_info['eol_status'] == 1) {
$result = $this->load->controller('extension/module/eol_product', $product_info);
if ($result) return;
}
]]></add>
</operation>
</file>
 
Код:
<!-- ЭТУ ЧАСТЬ КОДА МОДИФИКАТОРА ЗАКОМЕНТИЛ, ЧТОБЫ НЕ ГРУЗИЛ EOL_PRODUCT.TPL, А ЗАГРУЖАЛ РОДНОЙ PRODUCT.TPL ШАБЛОНА
   
    <file path="catalog/controller/product/product.php">
        <operation>
            <search><![CDATA[if ($product_info) {]]></search>
            <add position="before"><![CDATA[
            if (isset($product_info['eol_status']) && $product_info['eol_status'] == 1) {
                $result = $this->load->controller('extension/module/eol_product', $product_info);
                if ($result) return;
            }
            ]]></add>
        </operation>
    </file>
   
-->

Код:
<?xml version="1.0" encoding="UTF-8"?>

<modification>

    <name>Архивный товар</name>

    <code>arhivnyy-tovar-plus-knopka-oc2.3</code>

    <version>2.3</version>

    <author>chukcha</author>

    <link>https://opencartforum.com/files/file/6523-arhivnyy-tovar/</link>

    <file path="admin/controller/catalog/product.php">

        <operation>

        <search><![CDATA[if (isset($this->request->post['status'])) {]]></search>

        <add position="before"><![CDATA[

            if (isset($this->request->post['eol_status'])) {

                $data['eol_status'] = $this->request->post['eol_status'];

            } elseif (!empty($product_info)) {

                $data['eol_status'] = $product_info['eol_status'];

            } else {

                $data['eol_status'] = true;


            }

            $this->load->language('catalog/eol_product');

            $data['entry_eol_status'] = $this->language->get('entry_eol_status');

            $data['help_eol_status'] = $this->language->get('help_eol_status');

        ]]></add>

        </operation>

    </file>


    <file path="admin/model/catalog/product.php">

        <operation>

            <search><![CDATA[$product_id = $this->db->getLastId();]]></search>

            <add position="after"><![CDATA[

        $this->db->query("UPDATE " . DB_PREFIX . "product SET `eol_status` = " . (int)$data['eol_status'] . " WHERE product_id = " . (int)$product_id);

        ]]></add>

        </operation>

   

        <operation>

            <search><![CDATA[public function editProduct($product_id, $data) {]]></search>

            <add position="after"><![CDATA[

        $this->db->query("UPDATE " . DB_PREFIX . "product SET `eol_status` = " . (int)$data['eol_status'] . " WHERE product_id = " . (int)$product_id);

        ]]></add>

        </operation>

    </file>


    <file path="admin/view/template/catalog/product_form.tpl">

        <operation>

            <search><![CDATA[for="input-status"]]></search>

            <add position="before" offset="1"><![CDATA[

                <div class="form-group">

                    <label class="col-sm-2 control-label" for="input-eol_status"><span data-toggle="tooltip" title="<?php echo $help_eol_status; ?>"><?php echo $entry_eol_status; ?></span></label>

                    <div class="col-sm-10">

                    <select name="eol_status" id="input-status" class="form-control">

                        <?php if ($eol_status) { ?>

                        <option value="1" selected="selected"><?php echo $text_enabled; ?></option>

                        <option value="0"><?php echo $text_disabled; ?></option>

                        <?php } else { ?>

                        <option value="1"><?php echo $text_enabled; ?></option>

                        <option value="0" selected="selected"><?php echo $text_disabled; ?></option>

                        <?php } ?>

                    </select>

                    </div>

                </div>

        ]]></add>

        </operation>

    </file>


    <file path="catalog/model/catalog/product.php">

        <operation>

            <search><![CDATA[AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1']]></search>

            <add position="replace"><![CDATA[AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND (p.status = '1' OR p.eol_status = '1')]]></add>

        </operation>

        <operation>

            <search><![CDATA[=> $query->row['status']]]></search>

            <add position="before"><![CDATA[

            'eol_status'           => $query->row['eol_status'],

            ]]></add>

        </operation>

    </file>

   

<!-- ЭТУ ЧАСТЬ КОДА МОДИФИКАТОРА ЗАКОМЕНТИЛ, ЧТОБЫ НЕ ГРУЗИЛ EOL_PRODUCT.TPL, А ЗАГРУЖАЛ РОДНОЙ PRODUCT.TPL ШАБЛОНА

   

    <file path="catalog/controller/product/product.php">

        <operation>

            <search><![CDATA[if ($product_info) {]]></search>

            <add position="before"><![CDATA[

            if (isset($product_info['eol_status']) && $product_info['eol_status'] == 1) {

                $result = $this->load->controller('extension/module/eol_product', $product_info);

                if ($result) return;

            }

            ]]></add>

        </operation>

    </file>

   

-->


<!-- ЗДЕСЬ ДОБАВЛЯЕМ ПЕРЕМЕННУЮ В .PHP -->


    <file path="catalog/controller/product/product.php">

        <operation>

            <search><![CDATA[$data['model'] = $product_info['model'];]]></search>

            <add position="after"><![CDATA[$data['eol_status'] = $product_info['eol_status'];]]>

          </add>

        </operation>

      </file>

   

<!-- ЗДЕСЬ ДОБАВЛЯЕМ КНОПКУ В HEADER ДЛЯ БЫСТРОГО ДОСТУПА -->

   

    <file path="admin/controller/common/header.php">

            <operation>

                <search><![CDATA[

     $data['customer_approval'] = $this->url->link('customer/customer', 'token=' . $this->session->data['token'] . '&filter_approved=0', true);

                ]]></search>

                <add position="after"><![CDATA[

     $data['knopka_old_tovar'] = $this->url->link('extension/module/eol_product', 'token=' . $this->session->data['token'], 'SSL');

     $this->load->language('extension/module/eol_product');

     $data['title_old_tovar'] = $this->language->get('text_list');

                ]]></add>

            </operation>

    </file>  


    <file path="admin/view/template/common/header.tpl">

            <operation>

                <search><![CDATA[

       <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown"><?php if($alerts > 0) { ?><span class="label label-danger pull-left"><?php echo $alerts; ?></span><?php } ?> <i class="fa fa-bell fa-lg"></i></a>

                ]]></search>

                <add position="before"><![CDATA[

        <?php foreach ($stores as $store) { ?>

     <li><a href="<?php echo $knopka_old_tovar; ?>" title="<?php echo $title_old_tovar; ?>"><i style="color: red;" class="fa fa-archive fa-lg"></i></a>

        <?php } ?>

    </li>

                ]]></add>

            </operation>

    </file>  

     

</modification>

Программист из меня некудышний конечно
 
Ищите где задается $product_info['eol_status']
Начните с файла модели
 
Ищите где задается $product_info['eol_status']
Начните с файла модели
Спасибо за попытки помочь, но я не программист. Так, иногда поломать что то могу

Щас получается, что модуль "Архивный товар"(оригинал) не работает совсем, при включенном "Product Quick Edit"

P.S. Хорошо что заметил. Может там ещё и с другими модами проблемы вылезут
 
Спасибо за попытки помочь, но я не программист. Так, иногда поломать что то могу

Щас получается, что модуль "Архивный товар"(оригинал) не работает совсем, при включенном "Product Quick Edit"

P.S. Хорошо что заметил. Может там ещё и с другими модами проблемы вылезут
Причем тут это непонятно, оба модуля используют один и тот же участок кода в
catalog/model/catalog/product.php
говорить что модуль от Chuckha хороший, а Product Quick Edit гав*о и наоборот не правильно.
 
говорить что модуль от Chuckha хороший, а Product Quick Edit гав*о и наоборот не правильно.
так ни кто и не говорит. Просто странное стечение обстоятельств.
Возможно кто то прочитает, инфа будет полезной, а может даже кто сможет это исправить
 
а может даже кто сможет это исправить
не претендую на оригинальность, но если модификатор "Архивный товар" поставить первым, а "Product Quick Edit" вторым, то они работают вместе.
Ну во всяком случае я сейчас отключил все модификаторы
Удалили оба мода из БД и добавил их в system/
1-arhivnyy-tovar.ocmod.xml
2-quick_edit_products_plus.ocmod.xml

И вуаля!
 
Последнее редактирование:
Назад
Верх