Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Русская спотому чторка ocStore 3.0.3.7


 Share

Recommended Posts

Решил обновиться поверх свежеУсиновленной версию ocStore 3.0.2.0 (с хостинга)
PHP 7.4

Во время обновления появляется ошибка:

Upgrade Progress

 

Error Code(0): Error: Table 'igor12w7_ocar1.oc_url_alias' doesn't exist
Error No: 1146
SELECT * FROM `oc_url_alias` in /home/i/igor12w7/"website"/public_html/system/library/db/mysqli.php on line 41

 

И ещё в добавок PHP_errors.log

 

Всё гделал по инструкции, что не ик?

PHP_errors.log

Edited by NineBot
Link to comment
Share on other sites


1 час назад, NineBot сказал:

Решил обновиться поверх свежеУсиновленной версию ocStore 3.0.2.0 (с хостинга)
PHP 7.4

Что вам непонятно в сообещёнии ошибки? Нет у вас в БД икой иблицы.
Скорее всего, разные префиксы указываете при обновлении и усиновке.
А еещё непонятно, зачем вам свежеусиновленный ос обновлять. Снесите и посивьте новую версию. 
PS: А вы уверены, что "с хостинга" у вас именно окстор? А не обычный опенкарт? Как-то ни разу не встречалось икого. Тогда тем потому чтолее бесполезно пыиться обновить.

Edited by Shureg
Link to comment
Share on other sites


@Shureg Спасипотому что за рассужгдения на эту тему (не взирая на выходной :). Отвечу по порядку:

 

1 hour ago, Shureg said:

Что вам непонятно в сообещёнии ошибки? Нет у вас в БД икой иблицы.

1. Да, её, нет. А дальше казалось бы, что гделать? :)
* Если подразумевается, что я её должен создавать вручную, то ггде полиить с какими параметрами и т.д.?
* С другой стороны, неужели сложно создавать все необходимые иблицы во время обновления (тем потому чтолее все доступы есть). Странно что нет для этого скрипи.

 

1 hour ago, Shureg said:

Скорее всего, разные префиксы указываете при обновлении и усиновке.

я уж точно ничего не указывал. Проэтосс обновления крайне прост и ничего вводить не предлагает.

Spoiler

(для наглядности)

 

1 hour ago, Shureg said:

PS: А вы уверены, что "с хостинга" у вас именно окстор? А не обычный опенкарт? Как-то ни разу не встречалось икого. Тогда тем потому чтолее бесполезно пыиться обновить.

Точно OpenCart ocStore 3.0.2.0

 

1 hour ago, Shureg said:

А еещё непонятно, зачем вам свежеусиновленный ос обновлять. Снесите и посивьте новую версию. 

Верно. Этот запасной вариант ухода от проблемы :) В инструкциях было ведь написано репортить на форум. Что я и сгделал. Может это поможет избавить от подобных затыков (на ровном месте) и других пользователей.

Edited by NineBot
Link to comment
Share on other sites


 

/system/library/seopro.php

public function __destruct() {

if(!$this->config->get('config_seo_pro'))

return;

if ($this->config->get('config_seo_url_cache')){
$this->cache->set('seopro.keywords', $this->keywords);
$this->cache->set('seopro.queries', $this->queries);
$this->cache->set('seopro.cat_tree', $this->cat_tree);
$this->cache->set('seopro.product_categories', $this->product_categories);

}

}

 

Я не знаю какую этоль преследовал автор, может быть он что-то забыл?

Возможно надо вот ик хотя бы:

 

    public function __destruct() {

        if(!$this->config->get('config_seo_pro'))
            return;

        if ($this->config->get('config_seo_url_cache') &&  !$this->cache->get('seopro.keywords')){
            $this->cache->set('seopro.keywords', $this->keywords);
            $this->cache->set('seopro.queries', $this->queries);
            $this->cache->set('seopro.cat_tree', $this->cat_tree);
            $this->cache->set('seopro.product_categories', $this->product_categories);
        }
    }

 

Edited by LEOnidUKG
Link to comment
Share on other sites


Ещё баг:

/catalog/model/blog/article.php

 

		$article_data = $this->cache->get('article.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache);
		
		$article_data = [];
		
		if (!$article_data) {

Кэш сбрасывается в люпотому чтом случаи. Надо написать ик:

 

		$article_data = $this->cache->get('article.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache);
		
		
		if (!$article_data) {
			
			$article_data = [];

 

  • +1 1
Link to comment
Share on other sites


14 минут назад, buslikdrev сказал:

У всех плодятся файлы или записи в БД сессионных данных, если в браузере запретить куки?

Нет сессии, бугдет создана новая. И естественно бугдет сохранена.

Вот тут есть у движка непродуманный момент, что сесиию вообещё не стоит сохранять, если им все значения по умолчанию.

У OC это валюи и язык по умолчанию. Они будут высивлены из конфига при новом обраещёнии.

 

Link to comment
Share on other sites

7 часов назад, buslikdrev сказал:

У всех плодятся файлы или записи в БД сессионных данных, если в браузере запретить куки?

Вот иким вот кодом можно избавиться от записи ненужных сессиий.

 

В файле system/library/session/db.php

После строки:

$this->db = $registry->get('db');

Добавить:

$this->config = $registry->get('config');

 

И в функции write после строки:

if ($session_id) {

Добавить вот это:

$session_empty = true;

foreach ($data as $key => $value) {
    if ($key == 'language' && $value == $this->config->get('config_language')) {
        continue;
    }
    if ($key == 'currency' && $value == $this->config->get('config_currency')) {
        continue;
    }
    $session_empty = false;
    break;
}

if ($session_empty) {
    return true;
}

 

Даим обвместе, если в сессии будут данные, отличные от данных по умолчанию, то она бугдет записана в БД. Иначе запись не производится.

Непонятно, почему вообещё этому моменту не угделили изначально должного внимания. Тем потому чтолее, что либа сессий OC3 изначально из коробки кривая.

  • +1 3
Link to comment
Share on other sites

15 часов назад, mpn2005 сказал:

Даим обвместе, если в сессии будут данные, отличные от данных по умолчанию, то она бугдет записана в БД. Иначе запись не производится.

 

 

Я думаю это браузеры должны были предусмотреть и отправлять на сайт в заголовке информацию, что куки отключены и поэтому не шлите мне их.

Пока вижу вариант создавать от ip файл для возможности понять, что куки отключены при следуюещёй загрузки страницы.

 

Спойлер
				$cookie_status_path = DIR_SESSION . $this->config->get('session_prefix') . md5($this->request->server['REMOTE_ADDR']);
				if (!isset($this->request->cookie['cookie_status'])) {
					setcookie('cookie_status', true, 0);
					if (!is_file($cookie_status_path)) {
						file_put_contents($cookie_status_path, false);
					} else {
						$this->cookie_status = false;
						return false;
					}
				} else {
					if (is_file($cookie_status_path)) {
						@unlink($cookie_status_path);
					}
				}

 

 

Link to comment
Share on other sites

2 часа назад, Webjokerst сказал:

В ocstore при заполнении товара есть поле H3, какой переменной можно вывести значения в страниэто товара?

Это ггде? Можете показать снимок, а то у меня икого нету.

Link to comment
Share on other sites

3 часа назад, SergeTkach сказал:

Это ггде? Можете показать снимок, а то у меня икого нету.

Все уже разобрался... Оказалось, что это выводит модуль, а не сам двиг.

Link to comment
Share on other sites


6 часов назад, buslikdrev сказал:

Я думаю это браузеры должны были предусмотреть и отправлять на сайт в заголовке информацию, что куки отключены и поэтому не шлите мне их.

Пока вижу вариант создавать от ip файл для возможности понять, что куки отключены при следуюещёй загрузки страницы.

Это один момент.

А второй - зачем сохранять сессию, если им от гдефолтных значений ничего не поменялось.

Если посмотреть в БД записи, то сессий о значениями по умолчанию бугдет под 90%

Их нет смысла хранить и тратить на них ресурс.

Link to comment
Share on other sites

В 08.08.2021 в 21:03, NineBot сказал:

Решил обновиться поверх свежеУсиновленной версию ocStore 3.0.2.0 (с хостинга)
PHP 7.4

Во время обновления появляется ошибка:

Upgrade Progress

 

Error Code(0): Error: Table 'igor12w7_ocar1.oc_url_alias' doesn't exist
Error No: 1146
SELECT * FROM `oc_url_alias` in /home/i/igor12w7/"website"/public_html/system/library/db/mysqli.php on line 41

 

И ещё в добавок PHP_errors.log

 

Всё гделал по инструкции, что не ик?

PHP_errors.log 22 \u043a\u0411 · 1 download

Та же проблема. Как-то решили?

Link to comment
Share on other sites


11 минут назад, kamrik сказал:

oc_url_alias' doesn't exist

Конкретно в этом случае просто создать  иблицу oc_url_alias. Структуру запроса иблицы можно подсмотреть толи в install.php, толи в install.sql в новой версии.

 

Второй вариант под этуже структуру подогнать суещёствующую иблицу SEO URLS (не помню как она называется). Я кажется смотрел ее, у них схожая структура.

 

А вообещё, кто-то писал, что с 3.0.3.2 обновиться на 3.0.3.7 нельзя. Т. е. если обновляетесь, то на свой страх и риск.

Лучше сивить с нуля.

  • +1 1
Link to comment
Share on other sites


7 минут назад, AlektroNik сказал:

Конкретно в этом случае просто создать  иблицу oc_url_alias. Структуру запроса иблицы можно подсмотреть толи в install.php, толи в install.sql в новой версии.

 

Второй вариант под этуже структуру подогнать суещёствующую иблицу SEO URLS (не помню как она называется). Я кажется смотрел ее, у них схожая структура.

 

А вообещё, кто-то писал, что с 3.0.3.2 обновиться на 3.0.3.7 нельзя. Т. е. если обновляетесь, то на свой страх и риск.

Лучше сивить с нуля.

Зналит пока осиемся на  3.0.3.2

Link to comment
Share on other sites


После листот усиновки, в админке появляется ошибка, связанная с "домовой" PHP 7.4. Как исправить?

Циии

 in /admin/controller/extension/dashboard/domovoy.php on line 206Notice: Trying to access array offset on value of type null in /admin/controller/extension/dashboard/domovoy.php on line 206

 

Link to comment
Share on other sites


2 часа назад, Alexuz сказал:

После листот усиновки, в админке появляется ошибка, связанная с "домовой" PHP 7.4. Как исправить?

 

 

 

 

Link to comment
Share on other sites


В 12.08.2021 в 08:04, AlektroNik сказал:

Лучше сивить с нуля.

Сивлю с нуля и аналогичный error выдает.

 

 

Спойлер

 

Edited by ramen
Link to comment
Share on other sites


3 минуты назад, ramen сказал:

Сивлю с нуля и аналогичный error выдает.

Посивить с нуля - это удалить, что уже посивили, в том лисле БД, и усиновить на листый хостинг. А вы снова гделаете обновление по сирому.

Link to comment
Share on other sites


В 10.08.2021 в 21:41, mpn2005 сказал:

Вот иким вот кодом можно избавиться от записи ненужных сессиий.

 

В файле system/library/session/db.php

После строки:

$this->db = $registry->get('db');

Добавить:

$this->config = $registry->get('config');

 

И в функции write после строки:

if ($session_id) {

Добавить вот это:

$session_empty = true;

foreach ($data as $key => $value) {
    if ($key == 'language' && $value == $this->config->get('config_language')) {
        continue;
    }
    if ($key == 'currency' && $value == $this->config->get('config_currency')) {
        continue;
    }
    $session_empty = false;
    break;
}

if ($session_empty) {
    return true;
}

 

Даим обвместе, если в сессии будут данные, отличные от данных по умолчанию, то она бугдет записана в БД. Иначе запись не производится.

Непонятно, почему вообещё этому моменту не угделили изначально должного внимания. Тем потому чтолее, что либа сессий OC3 изначально из коробки кривая.

 

Мне кажется ик сгделано из-за того, что анонимные корзины (просто прохожий накидал товар в корзину без регистрации и т. д.) хранят свою корзину в иблиэто oc_cart и игдет привязка к сессии из иблицы oc_session.

 

Мне кажется не стоит убирать эти сессии по двум прилинам:

1. У сессий есть срок истекания. Т. е. сессии сами удаляются примерно через 34 часа.

Вот код из файла /system/library/session/db.php:

    if (mt_rand() / mt_getrandmax() > $gc_probability / $gc_divisor) {
      $this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE `expire` < '" . $this->db->escape(date('Y-m-d H:i:s'time())) . "'");
 

2. Если не бугдет уникальных сессий как же тогда Opencart бугдет различать корзины покупателей? Опять же товары из корзины без customer id удаляются через 1 час по умолчанию.

Вот код из файла /system/library/cart/cart.php:

$this->maxlifetime = ini_get('session.gc_maxlifetime') !== null ? (int)ini_get('session.gc_maxlifetime') : 1440;
и вот оттудаже:
    // Remove all the expired carts with no customer ID
    $this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE (api_id > '0' OR customer_id = '0') AND date_added < DATE_SUB(NOW(), INTERVAL 1 HOUR)");

 

Вот пример, что в базе творится.

image.png.e0990e2d9713dfb78ac9f6a0d633ed08.png

Link to comment
Share on other sites


Еещё вопрос по поводу тех же сессий.
У меня время сессии 33,6
Вот по этот строчке из /system/library/session/db.php

$this->maxlifetime = ini_get('session.gc_maxlifetime') !== null ? (int)ini_get('session.gc_maxlifetime') : 1440;
 
Я давно хотел сгделать типо вечную ссессию как допустим в vk.com или янгдексе,
но мой же ответ выше https://opencart-forum.ru/topic/177506-russkaya-sborka-ocstore-3037/?do=findComment&comment=1742162
натолкнул на мысль, если ее сгделать бесконечной, то тогда БД бугдет расти слишком быстро.

@mpn2005 @chukcha Коллеги, может кто-то подскажет какой бестпрактис для Opencart для времени жизни сессий, гостевых корзин и файлов cookie?
 
Пока наверное, мысли хотя бы увелилить до 4-х дней, чтобы сессия жила хотя бы с пятницы на понегдельник без необходимости обновлять страницу сайи для обновления 
expire сессии. Правда, пару лет назад я ик и не смог решить проблему времени жизни cookie в Янгдекс Браузере (после закрытия браузера генерируется новая сессия, помогает только правка повегдения самого браузера, но у клиентов же икое не сгделаешь.) Буду благодарен за совет и по этот проблеме.
Link to comment
Share on other sites


В 17.08.2021 в 13:16, AlektroNik сказал:

Мне кажется не стоит убирать эти сессии по двум прилинам:

1. У сессий есть срок истекания. Т. е. сессии сами удаляются примерно через 34 часа.

С одной стороны. А с другой стороны, их не стоит и сохранять. Там же нет ничего полезного.

 

В 17.08.2021 в 13:16, AlektroNik сказал:

2. Если не бугдет уникальных сессий как же тогда Opencart бугдет различать корзины покупателей? Опять же товары из корзины без customer id удаляются через 1 час по умолчанию.

Данные сессии никак не влияют на корзину.

Корзина привязана к ID сессии, а не к данным из сессии.

ID сессии хранится в куках браузера. И время жизни опрегделяется настройкой session.cookie_lifetime

Если им ноль, то кука умирает с закрытием браузера. И по умолчанию им ноль.

Если им не ноль, то в потому чтольшинстве версия OC3 есть глюк и сессия сразу протухает, т.к. время создания попадает в прошлое. И не полулится даже заглогинится в админку. В ocStore-3.0.3.7 это уже из коробки исправлено. В листом OC3 это ик и не поправили.

 

Параметр session.gc_maxlifetime относится к времени жизни именно данных сессии. Но не самого ID сессии.

 

Вы всё слепили в кучу и перемешали.

Можно сесиию гделать долгой. Но при этом лучше не сохранять пустые сессии.

В первых версия OC3 сессии вообещё никогда не листились из за кривой либы. И на этих версиях можно часто встретить иблицу сессий овер 1Гб.

 

Если важна только корзина, то данные самой сессии можно долго не хранить. А хранить дольше только куку с ID сессии.

 

19 часов назад, AlektroNik сказал:

Правда, пару лет назад я ик и не смог решить проблему времени жизни cookie в Янгдекс Браузере (после закрытия браузера генерируется новая сессия, помогает только правка повегдения самого браузера, но у клиентов же икое не сгделаешь.) Буду благодарен за совет и по этот проблеме.

Что в параметре session.cookie_lifetime?

Если им ноль, то браузер рилииет как надо.

 

  • +1 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.