Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
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 ?
В карточке товара ошибки не было
Я так и написал - в каталоге такая ошибка
<!-- ЗДЕСЬ ДОБАВЛЯЕМ ПЕРЕМЕННУЮ В .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>
Попробуйте такой кодХотя код вроде правильно написан
<operation>
<search><![CDATA[$data['model'] = $product_info['model'];]]></search>
<add position="after"><![CDATA[
$data['eol_status'] = $product_info['eol_status'];
]]></add>
</operation>
Попробовал, ничего не изменилосьПопробуйте такой код
Только форматированиеНе могу отличие найти от своего кода :
Вставил как есть, ничего не изменилось, кроме номеров строк конечноТолько форматирование
ну это уже сложноПроверьте наличие ключа eol_status
Ваш кодПопробовал, ничего не изменилось
Не могу отличие найти от своего кода :(
<!-- ЭТУ ЧАСТЬ КОДА МОДИФИКАТОРА ЗАКОМЕНТИЛ, ЧТОБЫ НЕ ГРУЗИЛ 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 Quick Edit"
P.S. Хорошо что заметил. Может там ещё и с другими модами проблемы вылезут
так ни кто и не говорит. Просто странное стечение обстоятельств.говорить что модуль от Chuckha хороший, а Product Quick Edit гав*о и наоборот не правильно.
не претендую на оригинальность, но если модификатор "Архивный товар" поставить первым, а "Product Quick Edit" вторым, то они работают вместе.а может даже кто сможет это исправить
Рано обрадовался, но разобрался. И кнопка в хидере для модуля Архивный товара тоже работает без ошибокИ вуаля!