Перейти к содержанию

Рекомендуемые сообщения

Не понимаю я Даниеля, зачем он каждый раз высчитывает $layout_id, везде где только можно (catalog/controller/common/*), этим самым он делает кучу лишних, не нужных запросов MySQL.

 

Например...class ControllerCommonContentTop и т п

 

$this->load->model('design/layout');
$this->load->model('catalog/category');
$this->load->model('catalog/product');
$this->load->model('catalog/information');

if (isset($this->request->get['route'])) {
$route = (string)$this->request->get['route'];
} else {
$route = 'common/home';
}

$layout_id = 0;

if ($route == 'product/category' && isset($this->request->get['path'])) {
$path = explode('_', (string)$this->request->get['path']);

$layout_id = $this->model_catalog_category->getCategoryLayoutId(end($path));
}

if ($route == 'product/product' && isset($this->request->get['product_id'])) {
$layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
}

if ($route == 'information/information' && isset($this->request->get['information_id'])) {
$layout_id = $this->model_catalog_information->getInformationLayoutId($this->request->get['information_id']);
}

if (!$layout_id) {
$layout_id = $this->model_design_layout->getLayout($route);
}

if (!$layout_id) {
$layout_id = $this->config->get('config_layout_id');
}

 

 

Ну неужели нельзя было один раз в самом начале высчитать layout_id, или он как-то измениться :)

Потом его $this->config->set('document_layout_id', $layout_id);

 

И всё, бери его в любом месте, без постоянного "высчитывания" и лишних запросов к БД.

 

И Layouts это основа и философия opencart.

 

Кто-то объяснит, что он замутил. Или это очередной "индийский код".

 

Склоняюсь к последнему.

 

P.S. Разработал я observer классов. В данном случаи разработка фитчи для для того чтобы можно было повесить например модуль на все layouts выбрав всего один layout (например All) или выбор "чекером"

 

Без vqmod, без изменения файлов opencart, причем не мешая работе vqmod, т.е. без замены стандартных классов, они свою работу выполняют.

 

Пример здесь

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересный подход.

Тока тут скорей економия на спичках, иначе трактовать нельзя

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересный подход.

Тока тут скорей економия на спичках, иначе трактовать нельзя

 

Это пример реализации алгоритма, который дает безграничную власть над моделями, библиотеками, классами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я по поводу етого

Не понимаю я Даниеля, зачем он каждый раз высчитывает $layout_id, везде где только можно (catalog/controller/common/*), этим самым он делает кучу лишних, не нужных запросов MySQL.

Никак не против Вашего решения...

 

 

Это пример реализации алгоритма, который дает безграничную власть над моделями, библиотеками, классами.

Где пример?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От yarikn
      Если в настройках магазина я выбираю в пункте Default  Layout - Layout Home то один и тот же контент отображается на всех страницах (Home, About us, Contact us, Blog), если я выбираю Layout Default то контент пропадает на всех страницах. Как сделать чтобы данный контент отображался только на странице Home? Извините, за такое ужасное объяснение, сложно объяснить эту ситуацию.


    • От validol
      Приветствую специалистов Opencarta
       
      Где-то поломал футер сайта, теперь не могу найти как восстановить. 
      Кто поможет где искать. 
      Страница категорий - нормально:
      http://take.ms/LYaU2
      На странице продуктов 
      http://take.ms/xn3LZ
       
       
       
       
    • От iAlexandro
      Что имеется:
      Opencart 1.5.4.1 Около 3000 наименований товаров При добавлении товаров на сайт заметил такую особенность, что opencart не присваивает схему "Product" товарам (пустое поле в настройках, но отображается все на сайте как положено). Я бы не обратил на это внимания, да вот понадобилось показать модуль только на страницах товаров (модуль работает только на страницах со схемой Product).
       
      Поставил модуль, а он не заработал. Начал искать причину и нашел, что если вручную присваивать товару схему "Product", то модуль будет работать.
       
      Вопрос: можно ли в opencart массово изменить схему у товаров на "Product"? И как это лучше сделать?
       
       
    • От aleks2148
      Проблема следующая:
      Есть стандартный лэйаут Account(route=account).
      Я хочу добавить блок, который будет отображаться только в истории заказов т.е. route=account/order. Добавляю новый лэйаут Order(route=account/order).
      На шаге генерации страницы вызывается функция:

      $this->model_design_layout->getLayout($route)
      (например в content_top.php).
      В этой функции выполняется запрос следующего вида:

      SELECT * FROM layout_route WHERE 'account/order' LIKE CONCAT(route, '%') AND store_id = 0 ORDER BY route ASC LIMIT 1
      Запрос возвращает "account" вместо "account/order".
      Немного поэкспериментируем.
      В phpmyadmin пишем

      ... LIMIT 2
      Видим, что возвращается 2 значения, первое из которых(неправильное) приходит нам в php-код.
      Я использую опенкарт 1.5.1.3, в 1.5.2.1 эта проблема не решилась.
      Что посоветуете?
      Спасибо.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.