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

Есть ли смысл обновлять осистор с 1.5.4.1 до 2+


Recommended Posts

расскажите как например выборку модифицировать без *mod ?

Создать конструктор запросов

 

например

 

$query = $this->db->get('mytable', 10, 20);

или

$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);

 

или

$this->db->select('title, content, date');
$query = $this->db->get('mytable');

 

или

 

$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');

И теперь модифицируй безопасно, совместимо

 

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

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

Не представляю как для огромных запросов вроде getproducts это возможно

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

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



$this->db->select("p.product_id");
$this->db->select("(SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating");
$this->db->select("(SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount");
$this->db->select("(SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special");
$this->db->from("product p");
$this->db->join("product_description pd", 'p.product_id = pd.product_id');
$this->db->join("product_to_store p2s", 'p.product_id = p2s.product_id');
$this->db->where("pd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
$this->db->where("p.status = '1'");

//$result = $this->db->get();

$sql =  $this->db->prepare();
$result = $this->db->query($sql);

А вот смотрите..

 

Здесь я упростил, конечно

 

Но согласитесь что все достаточно понятно, наглядно

Нет многосимвольных строк.

Просто внести логику в запрос.

Змінено користувачем chukcha
Надіслати
Поділитися на інших сайтах

Opencart 1.5x vs 2.x

  1. Скорость версия 2 быстрее (проверено на личном опыте), + для версии 2.х
  2.  Адаптивный шаблон с коробки, так как для 1,5х куча адаптивных шаблонов, это ничья
  3. ОСмод, упрощает жизнь простым юзерам при установке модулей и ускоряет работу движка, насчет последнего не уверен так как вкмод про тоже довольно быстырй,  + для версии 2.х
  4. модули сейчас больше модулей для 1.5х, но разработчики смотрят в будующее так что новики делают уже по 2.х и это тоже ничья
  5. версия 2.х имеют дополнительные шлюзи для оплаты, для СНГ это не очень актуально.
  6. Админка в  2.х стала круче в добавлены оповещения, + для версии 2.х
  7. в версии 2.х добавлены поля кастом тайтл чего нету в 1.5, + для версии 2.х

Стоит ли менять 1,5 на 2,0 я лично считаю что не стоит если для этого действительно нету весомой причины. 

Если говорить про разработку нового магазина стоит смотреть в сторону 2,х так как время не стоит на месте.

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


Не возможно внести в код ядра доп методы, и их вызов.

Не надо ничего в ядро вносить - надо использовать инверсию зависимостей (все современные популярные фреймворки так и работают).

 

 

исправили вызовы producttotal где попало

В ocStore это и так было уже исправлено.

 

 

mysqli

Я в 1.5 mysqli использую уже года 3.

 

 

расскажите как например выборку модифицировать без *mod ?

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

Например:

$query = (new Product())->findAll();
$query->addWhere(['category_id' => $id]);
$results = $query->execute();

 

Соответственно, система триггерит стандартное событие, например, beforeQueryExecute, модуль на него подписывается и может добавить, например, ещё свои addWhere, либо любые другие модификации в таком же стили.

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

 

Змінено користувачем Dotrox
Надіслати
Поділитися на інших сайтах


$query = (new Product())->findAll();
$query->addWhere(['category_id' => $id]);
$results = $query->execute();

За это спасибо возьму на вооружение :-)   

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

$query = (new Product())->findAll();
$query->addWhere(['category_id' => $id]);
$results = $query->execute();

За это спасибо возьму на вооружение :-)   

 

Только в ОК это сейчас работать не будет :)

 

Ну.. это почти тоже что я и показал

просто я показал более развернутый класс.

Да. Я просто показал принцип формирования запроса вообще без написания SQL кода.

Так бы это выглядело, если б в ОК была нормальная ORM.

 

Подобным образом это выглядит в Yii2.

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


Ну.. здесь можно спорить до посинения

 

Ведь

$query->addWhere(['category_id' => $id]);

Это уже есть часть sql..

 

$this->db->where("pd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
$this->db->where("p.status = '1'");

 

И без всяких Add - потому что укладывается в массив

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

Вообще ушли в дебри  

 

Dotrox

в данный момент, на OC 2.2 как без модификатора решите задачу "Не выводить товары с нулевым остатком"

 

 

З.Ы. а мне нравится подход OC, проще и не ресурсозатратно

Змінено користувачем Otvet
Надіслати
Поділитися на інших сайтах

Ведь

$query->addWhere(['category_id' => $id]);

Это уже есть часть sql..

Нет, это параметр, для запроса, но он может быть как угодно видоизменён (теоретически) перед добавлением непосредственно в sql.

 

Собственно, при текущей структуре базы ОК в запросе не может быть просто category_id - это будет ptc.category_id (и это уже задача ORM зарезолвить все связи).

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


Dotrox

в данный момент, на OC 2.2 как без модификатора решите задачу "Не выводить товары с нулевым остатком"

А при чём тут данный момент?

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

 

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

А вы бы ещё спросили: а как вы от дождя защититесь без этого впаянного зонта? :)

Змінено користувачем Dotrox
Надіслати
Поділитися на інших сайтах


То есть, если я никогда принципиально не использовал vQmod

 

 

в данный момент, на OC 2.2 как без модификатора решите задачу "Не выводить товары с нулевым остатком"

 

 

А при чём тут данный момент?

 
Змінено користувачем Otvet
Надіслати
Поділитися на інших сайтах

Otvet, и?

 

Я не сказал, что я пишу модули при этом не используя vQmod! Я его в магазинах, которые делаю, не использовал никогда - вот о чём я говорил.

А модули я вообще не пишу и именно из-за принципиального отказа от использования vQmod (а смысл делать очередной слайдер или модуль вывода товаров, где можно обойтись без vQmod - нет).

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

Вот пример одной из таких наработок, которая могла бы быть бесплатным модулем:

https://opencartforum.com/topic/62497-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-http-error-500/?do=findComment&comment=566165

 

 

И вы меняете тему! Как отсутствие сейчас в ОК возможности сделать что-то нормальное без модификаторов оправдывает то, что Дэниэль вместо создания нормальной системы расширения, просто интегрировал модификаторы?

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


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

прямая правка кода? а пользователям тоже писать зайди туда измени то?

 

 

И вы меняете тему! Как отсутствие сейчас в ОК возможности сделать что-то нормальное без модификаторов оправдывает то, что Дэниэль вместо создания нормальной системы расширения, просто интегрировал модификаторы?

А каким боком то что OC не превратили в горе-фреймворк относится к данной теме?

Вопрос стоит в выборе между 1.5 и 2 а не в том "Что могло бы быть"

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

прямая правка кода?

Да.

 

а пользователям тоже писать зайди туда измени то?

Читайте внимательно:

 

Я не сказал, что я пишу модули при этом не используя vQmod! Я его в магазинах, которые делаю, не использовал никогда - вот о чём я говорил.

 

 

А чтоб и vQmod не использовать и пользователей не просить вручную вносить правки, как раз и нужна нормальная архитектура.

 

 

А каким боком то что OC не превратили в горе-фреймворк относится к данной теме?

Вопрос стоит в выборе между 1.5 и 2 а не в том "Что могло бы быть"

Нет, вопрос стоит в том, что вы назвали интеграцию костыля - преимуществом двойки перед 1.5.

 

А на счёт "горе-фреймворка", то ОК как раз в него и превращается, там даже уже есть файл с соответствующим названием (/system/framework.php) :)

 

А о фреймворках вообще: Мадженто изначально на Zend, ПрестаШоп начал переход на Symfony. Я не сторонник этих двух фреймворков (мне больше Yii нравится), но я не считаю, что велосипед с костылями лучше, чем современные паттерны и качественное профессиональное решение как база.

 

В 1.5 на это всё ещё можно было закрыть глаза - наследие и всё такое, но 2.0 меня убила. Собственно, не понятно зачем эту версию вообще зарелизили, то есть, зачем релиз выпустили именно в тот момент - там местами тупо не хватает целых кусков кода. Например, в вишлисте метод для удаления товара из вишлиста пустой (на самом деле, он там лишний, ибо удаление идёт через параметр, который передаётся в метод index - очередной пример гавнокода в архитектуре ОК), а в методе добавления товара в вишлист не хватает записи в базу, всё пишется только в сессию (и это уже довольно ощутимый баг, ибо убивает смысл вишлиста). Запись вишлиста в базу появилась только в 2.1.

 

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

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


Dotrox

Это не я назвал, вы путаете

 

Мой вопрос был лишь как вы обходитесь без *mod, ответ был получен "Прямая правка"

Но это лишь частный случай

 

Надеюсь в погоне за "правильной" архитектурой не докатится до уровня WP, где на пустом сайте с 4 записями время генерации страниц 700-800мс

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

Я перевел два магазина...Третий сейчас перевожу...

Лучше, не сказал бы, что стало сильно лучше...

Если программист, какой делал, не рукожоп, то и 1,5 работать будет долго...

Спасибо! Понял.

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


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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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