Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Есть ли смысл обновлять осистор с 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');

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

 

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

Link to post
Share on other sites
Награды

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

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

Link to post
Share on other sites


$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);

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

 

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

 

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

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

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

Edited by chukcha
Link to post
Share on other sites
Награды

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,х так как время не стоит на месте.

Link to post
Share on other sites

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

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

 

 

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

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

 

 

mysqli

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

 

 

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

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

Например:

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

 

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

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

 

Edited by Dotrox
Link to post
Share on other sites

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

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

Link to post
Share on other sites
Награды

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

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

Link to post
Share on other sites
Награды

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

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

 

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

 

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

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

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

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

 

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

Link to post
Share on other sites

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

 

Ведь

$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 - потому что укладывается в массив

Link to post
Share on other sites
Награды

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

 

Dotrox

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

 

 

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

Edited by Otvet
Link to post
Share on other sites

В данный момент - никак

 

При показанном мною подходе как видно, достаточно просто.

Link to post
Share on other sites
Награды

Ведь

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

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

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

 

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

Link to post
Share on other sites

Dotrox

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

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

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

 

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

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

Edited by Dotrox
Link to post
Share on other sites

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

 

 

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

 

 

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

 
Edited by Otvet
Link to post
Share on other sites

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

 

 

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

Link to post
Share on other sites

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

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

 

 

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

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

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

Link to post
Share on other sites

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

Да.

 

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

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

 

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

 

 

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

 

 

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

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

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

 

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

 

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

 

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

 

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

Link to post
Share on other sites

Dotrox

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

 

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

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

 

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

Link to post
Share on other sites

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

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

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

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

Link to post
Share on other sites

Здравствуйте! Ещё раз благодарю всех кто ответил!

Link to post
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
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • 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.