Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Кеширование языков в OC 3.0


Recommended Posts

Может кому-нибудь пригодится. В Opencart 3.0.2 (может и раньше, но в 3-й ветке) разработчики накосячили с кешированием языков.

 

В catalog/model/localisation/language.php сначала идёт

$language_data = $this->cache->get('language');

А потом

$this->cache->set('catalog.language', $language_data);

То есть для получения списка языков будет каждый раз дёргаться база. Аналогичная фича в админской модели. В ocStore то же самое.

 

Если у кого-то есть желание, может попробовать сделать PR в opencart. У меня с этим [censored] желания общаться нет.

 

Надіслати
Поділитися на інших сайтах


15 минут назад, Timber сказал:

Может кому-нибудь пригодится. В Opencart 3.0.2 (может и раньше, но в 3-й ветке) разработчики накосячили с кешированием языков.

 

В catalog/model/localisation/language.php сначала идёт


$language_data = $this->cache->get('language');

А потом


$this->cache->set('catalog.language', $language_data);

То есть для получения списка языков будет каждый раз дёргаться база. Аналогичная фича в админской модели. В ocStore то же самое.

 

Если у кого-то есть желание, может попробовать сделать PR в opencart. У меня с этим [censored] желания общаться нет.

 

У вас плохо со зрением?

		$language_data = $this->cache->get('catalog.language');

		if (!$language_data) {
...
			$this->cache->set('catalog.language', $language_data);
		}

 

Надіслати
Поділитися на інших сайтах

А в каком месте база дёргается?

Вы же сами пишете сначала идёт попытка получить язык из Кеша.

 

А потом он сохраняется в тот же кеш, вроде все логично, нет?

Надіслати
Поділитися на інших сайтах


2 минуты назад, Yoda сказал:

А потом он сохраняется в тот же кеш, вроде все логично, нет?

 

Если они в третьей ветке не поменяли полностью логику работы с кешем, то это два разных кеша. Он опрашивает кеш language, а сохраняет потом в кеш catalog.language

 

9 минут назад, Vladzimir сказал:

У вас плохо со зрением?

 

У меня хорошо. Вот он полностью (из 3.0.3.6) opencart-3.0.3.6/upload/catalog/model/localisation/language.php

<?php
class ModelLocalisationLanguage extends Model {
	public function getLanguage($language_id) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE language_id = '" . (int)$language_id . "'");

		return $query->row;
	}

	public function getLanguages() {
		$language_data = $this->cache->get('language');

		if (!$language_data) {
			$language_data = array();

			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1' ORDER BY sort_order, name");

			foreach ($query->rows as $result) {
				$language_data[$result['code']] = array(
					'language_id' => $result['language_id'],
					'name'        => $result['name'],
					'code'        => $result['code'],
					'locale'      => $result['locale'],
					'image'       => $result['image'],
					'directory'   => $result['directory'],
					'sort_order'  => $result['sort_order'],
					'status'      => $result['status']
				);
			}

			$this->cache->set('catalog.language', $language_data);
		}

		return $language_data;
	}
}

Можете на гитхабе посмотреть https://github.com/opencart/opencart/blob/3.0.x.x_Google_Pay/upload/catalog/model/localisation/language.php

 

Вот он же в ocStore ocStore-3.0.2.0/public/catalog/model/localisation/language.php

<?php
class ModelLocalisationLanguage extends Model {
	public function getLanguage($language_id) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE language_id = '" . (int)$language_id . "'");

		return $query->row;
	}

	public function getLanguages() {
		$language_data = $this->cache->get('language');

		if (!$language_data) {
			$language_data = array();

			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1' ORDER BY sort_order, name");

			foreach ($query->rows as $result) {
				$language_data[$result['code']] = array(
					'language_id' => $result['language_id'],
					'name'        => $result['name'],
					'code'        => $result['code'],
					'locale'      => $result['locale'],
					'image'       => $result['image'],
					'directory'   => $result['directory'],
					'sort_order'  => $result['sort_order'],
					'status'      => $result['status']
				);
			}

			$this->cache->set('catalog.language', $language_data);
		}

		return $language_data;
	}
}

 

 

  • +1 1
Надіслати
Поділитися на інших сайтах


6 минут назад, Timber сказал:

Если они в третьей ветке не поменяли полностью логику работы с кешем, то это два разных кеша. Он опрашивает кеш language, а сохраняет потом в кеш catalog.language

Так с этого и надо было начинать.

Хотя на гитхабе уже пофиксили, а вот в релизах да, именно так.

Надіслати
Поділитися на інших сайтах

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

Так с этого и надо было начинать.

 

я примерно с этого и начинал

 

4 минуты назад, Vladzimir сказал:

Хотя на гитхабе уже пофиксили, а вот в релизах да, именно так.

 

причём, если судить по истории коммитов, пофиксили в октябре 2017. С учётом того, что 3.0.3.6 был в 2020, почему в него не вошёл этот фикс вообще непонятно.

  • +1 1
Надіслати
Поділитися на інших сайтах


23 минуты назад, Timber сказал:

 

я примерно с этого и начинал

 

 

причём, если судить по истории коммитов, пофиксили в октябре 2017. С учётом того, что 3.0.3.6 был в 2020, почему в него не вошёл этот фикс вообще непонятно.

Вот и используй после этого третью версию опенкарта.

Правильнов свое время говорили умные люди - дождитесь хотя бы 3.1

  • +1 1
Надіслати
Поділитися на інших сайтах

22 часа назад, Vladzimir сказал:

Вот и используй после этого третью версию опенкарта.

Правильнов свое время говорили умные люди - дождитесь хотя бы 3.1

 

Чуть больше года назад ставил себе альфу 3.1, выглядело всё почти готовым. Даже несколько модулей под неё адаптировал. Зашёл вчера посмотреть что и как - всё вообще переделано. Появились неймспейсы, переделана загрузка шаблонизатора, расширения вынесены отдельно, по коду разбросаны комментарии о том, какие идиоты разработчики симфонии. Причём если год назад работало обновление 2.x->3.1, то теперь и это сломано. Так что такими темпами они ещё минимум год 3.1 пилить будут.

Надіслати
Поділитися на інших сайтах


35 минут назад, Timber сказал:

 

Чуть больше года назад ставил себе альфу 3.1, выглядело всё почти готовым. Даже несколько модулей под неё адаптировал. Зашёл вчера посмотреть что и как - всё вообще переделано. Появились неймспейсы, переделана загрузка шаблонизатора, расширения вынесены отдельно, по коду разбросаны комментарии о том, какие идиоты разработчики симфонии. Причём если год назад работало обновление 2.x->3.1, то теперь и это сломано. Так что такими темпами они ещё минимум год 3.1 пилить будут.

Не не будут. Ибо уже закоммитили 4.0 бета

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.