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

3 вещи, которых мне больше всего не хватает в OpenCart


sv2109

1,270 views

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

1. Конструктор форм. 
Что есть сейчас?

Каждый разработчик для каждого своего дополнения вручную пишет горы HTML кода со всеми классами, проверками валидности, javascript и так далее. А когда OpenCart меняет например версию Bootstrap с 4 на 5 то с этим меняются десятки css классов и весь этот HTML код нужно вручную переписывать для каждого модуля..  
А теперь только представьте! Был бы в OpenCart какой-то простой конструктор форм, чтобы формы не создавать, как мартышки, вручную и потом изменять по пол дня каждую форму после очередного обновления. А чтобы форму создавать как-то так:

$form = new Form(array(
  'id' => 'my-module-form'
  'action' => '...',
  'field' => array(
    'type' => 'input',
    'name' => 'title',
    'label' => 'Title'
    'rules' => array (
      'required' => true,
      'min_lenght' => 3
    )
  )
));


и потом делаем например $form->render() и передаем результат в шаблонизатор. Все.  


Что это даст?

  1. Модулю будет вообще все равно на какой версии bootstrap или twig работает админка движка, это все нужно знать только конструктору форм и со сменой версии он сам построит нужную форму со всем новым синтаксисом. То есть, мы можем еще под 1.5 создать в контроллере модуля свою форму и эта форма будет работать даже на OpenCart 4 и 5 версии бутстрапа! А если в каком-то OpenCart 5 появится React то нам и тогда будет все равно, потому что конструктор форм поменяется все за наc и модуль и дальше будет работать! 
  2. В конструктор форм можно добавить событие, напр. form/render/before и перед рендерингом всех! форм любой модуль может получить объект этой формы и изменить его как угодно - например добавить какие-то свои поля или целый новый таб с кучей своих полей итд. То есть любой модуль может легко изменить любую форму в админке и каталоге как самого движка так и любого другого модуля. При чем сделает это не через модификаторы которые особенно при изменении шаблонов добавляют кучу конфликтов, а правильным способом через события и добавление новых полей в объект формы. 
  3. В форму также можно добавить такие приятные плюшки как: автоматическую валидацию полей по заданным правилам, с выводом нужных сообщений об ошибках, причем валидация будет работать даже без перезагрузки страницы через аякс. Плюс будет куча встроенных правил для валидации напр. емейлов, ссылок, длины и так далее, просто добавил в правило поля напр. 'required' => true и все, форма сама создаст поле, проверку, вывод ошибки если условие не соблюдено и так далее. 


2. Конструктор SQL запросов. 
Я не говорю о какой сложной ORM, а об очень простом конструкторе запросов. 


Что есть сейчас?
Каждый разработчик пишет кучу SQL запросов вручную. При этом эти запросы изменить из своего модуля можно разве что через модификаторы, порождая тем самым кучу конфликтов. 
А теперь представьте если бы в движке был конструктор запросов и запросы создавались как-то так:

$query = $this->db->select('*')->from('product')->where(...)->limit(10);
$results = $query->execute();


Что это даст? 

  1. И читать и писать такой код легче и понятнее
  2. Можно в сам конструктор добавить и добавление префикса таблицы и автоматическую обработку данных перед выполнением, не нужно для каждого поля вручную делать $this->db->escape, а это в свою очередь и упростит написание запросов и сделает их надежнее и безопаснее.  
  3. Самое главное! Можно создать событие напр. db/execute/before и со своего модуля получить доступ ко всем! SQL запросам на сайте с возможностью изменить каждый, например добавить свой новый JOIN или условие, сортировку итд. 
  4. Имея конструктор в будущем намного проще перейти на новую базу данных, при этом не нужно будет изменять код всех модулей, а только код самого конструктора, чтобы он по готовым правилам создал другой запрос по правилам другой базы данных. 
  5. Для каких-то сложных запросов или ленивых разработчиков всегда останется возможно написать какой-то запрос вручную по-старому. 


3. Нормальная система расширений. 
Для этого:

  1. Полностью выбросить на свалку истории vqmod и ocmod, как причину огромного к-ва конфликтов
  2. Сделать нормальную систему Событий. Писал об этом выше как можно расширить движок при наличии конструктора форм и SQL запросов. Это далеко не все, что нужно для полноценной системы Событий, просто показывает на примере как можно достаточно просто создать огромные возможности для правильного! изменения движка через События.
  3. Добавить другие инструменты такие как валидаторы, хелперы для например создания хлебных крошек, пагинации и десятков других вещей, для которых в движке нужно дублировать кучу кода в каждом модуле. 

 

Конечно, добавить еще можно много всего, но если хотя бы реализовать те 3 пункта что я описал выше мы уже бы получили качественно! другой движок. 
Потому что извините, но в 21 году писать вручную SQL запросы, HTML формы и дублировать тысячи строк кода это.. мне даже слова сложно подобрать, чтобы это описать и никого не обидеть.. одним словом - сюр какой-то.
 

И еще один важный вопрос - усложнят ли все эти нововведения движок? 


На первый взгляд может показаться что - "да", так как нужно будет выучить новые инструменты. Но с другой стороны сколько времени это займет? Несколько дней? А сколько времени потом будет сэкономлено? В разы, десятки раз больше? Во сколько раз уменьшиться количество конфликтов в движке? В разы, десятки раз? На сколько нам всем будет приятнее работать с таким движком, в котором ты можешь писать код модуля и он после этого будет работать, даже если в движке кроме него установлено еще пару десятков других модулей? А со сменой версии движка не нужно будет вручную переписывать гору HTML кода под новую модную версию бутстрапа? Во сколько раз такой движок, в котором модули работают без конфликтов, а хороших и функциональных модулей будет больше, будет более привлекательным для пользователей?
Неужели все эти преимущества не стоят этих изменений?
 

  • +1 8

36 Comments


Recommended Comments



8 минут назад, SooR сказал:

А вы уверены, что обертка экранирует '1' как int, а не string? А как на счет экранирования bigint(20)?

а какая разница как экранирует для mysql where id = 1 и where id = '1' это одно и тоже

Link to comment
5 минут назад, lexxkrt сказал:

а какая разница как экранирует для mysql where id = 1 и where id = '1' это одно и тоже

Разница есть. А еще есть разница между 0000334 и 334, когда нужно найти запись по номеру договора или просто вот по такому идентификатору.

Link to comment

sql запросы удобнее писать в .sql файлах где есть поддержка синтаксиса, и орм и все квери билдеры, это удобный инструмент для небольших проэктов с простой логикой, и правильно построенной архитектурой связей, попробуйте написать запрос на любой орм или квери билдере с 29 параметрами,  1 вы скорее сойдете сума, 2 потеряете в производительности, 
image.thumb.png.05204054f1379e9dd7d3d878c6014992.png

  • +1 1
Link to comment
4 минуты назад, SooR сказал:

Разница есть. А еще есть разница между 0000334 и 334, когда нужно найти запись по номеру договора или просто вот по такому идентификатору.

ну так данные ты передаешь

$query->where('num','=', 334)

$query->where('num,'=', '0000334')

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

Link to comment
3 минуты назад, stickpro сказал:

1 вы скорее сойдете сума, 2 потеряете в производительности, 

первое возможно, а второе с чего бы, тот же кверибилдер собирает ту же sql строку, плюс сделает за вас грязную работу по экранированию да префиксы подставит

Link to comment
Только что, lexxkrt сказал:

первое возможно, а второе с чего бы, тот же кверибилдер собирает ту же sql строку, плюс сделает за вас грязную работу по экранированию да префиксы подставит

я использую компилируемые языки, мне компилятор не даст ошибиться 

Link to comment
4 минуты назад, lexxkrt сказал:

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

А, все таки автоматизма нет?) Для запросов типа select * from user order by user_id может и полезная штука для домохозяек, в остальном не вижу смысла. Это моя позиция, не обязательно соглашаться.

Link to comment
2 минуты назад, SooR сказал:

А, все таки автоматизма нет?) Для запросов типа select * from user order by user_id может и полезная штука для домохозяек, в остальном не вижу смысла. Это моя позиция, не обязательно соглашаться.

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

а инсерты в кверибилдерах например

DB::table('products')->insert($data);

а чистый sql как будет выглядеть при этом? причем $data это может быть не одна запись, а массив записей

 

Link to comment
10 минут назад, stickpro сказал:

я использую компилируемые языки, мне компилятор не даст ошибиться

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

Link to comment
В 16.06.2021 в 17:16, Vladzimir сказал:

Ну во первых там можно сделать автоподстановку префикса таблицы.

Второе автоэкранирование данных.

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

Ну и по мелочи. Например читабельность запроса. Особенно если он на десяток строк.

 

да сиренево на автоподстановку префикса и тд, когда столкнетесь с реально тяжкими запросами тогда поймете, ваша няшка сто процентов имеет ограничение по сравнению с написанием свободного запроса. Сам по себе знаю за достаточное кол-во лет программирования. Это для отдельных проектов можно уже готовые или полуготовые няшки/методы делать, типа раз подставил и получил данные. А когда расширяется магазин и к нему в тоже время прикручиваются серьезные вещи то ваши няшки только в помойку выкинуть. 

Долой НЯШКИ ;) Свободу запросам написаных своими руками!!!!

Link to comment

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.