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

Про Opencart

  • запис
    1
  • коментарів
    47
  • переглядів
    707

Opencart 5


MaxD

2 620 переглядів

Щось в останній час мене включило кодити, давно такого не було з початку вторгнення. Зайнявся Opencart 4, наваяв багато крутих штук для нього, і майже дописав підтримку доповнень від Opencart 3 (принаймні на рівні доставок-оплат). І тут виникло відчуття розвилки - можна намагатися врятувати Opencart 4, або дати йому потонути.

 

По факту Opencart 4 "не взлітає". Вялі інновації, переускладнений код, всі старі проблеми не вирішені. До цього плюсується абсолютна неадекватність Даніеля і його одноосібний контроль на репозиторієм. Проект, який би міг яскраво рухатись вперед силами ком'юніті, ледь ворушиться по міліметру за півроку.

 

Зашквару ситуації додає те, що люди качають на opencart.com Opencart 4, як актуальну версію, а на форумах та й сам Даніель кажуть, що це бета і використовуйте Opencart 3 (причому не з сайту, а з гітхабу). Люди чухають потилицю і йдуть собі далі.

 

Як на мене, розклад з Opencartом зараз один з найгірших за всі роки, і треба щось робити. Можна почати ваяти публічний Opencart 5, взявши за базу Opencart 3 (а калічну четвірку лишити Даніелю). У людей купа класних ідей, персонально у мене теж є немало крутих наробок.

 

Цим постом я хочу прощупати, чи є у нас ентузіазм? )

 

Ніша Opencart

Opencart вирізняється серед інших рішень простотою коду, який можна читати, розуміти і правити. Абсолютна прозорість, процедурність та голі SQL запити цьому допомагають. Це його і слабкість, і сила. І тільки у цій ніші він може жити. vQmod/ocMod є вираженням ідеї "я бачу, що мені треба поміняти в коді, і я просто міняю". Будь-які спроби від цього піти одразу переводять проект в іншу категорію, де і так є свої давні гравці - Prestashop, Magento, Woo.

 

Загалом, треба починати з основ. І перше питання, яке треба вирішити - це code style. Я зробив трансформацію кодової бази Opencart 3 з своїм баченням основ, хочу вам це показати і почути вашу думку. Ось збірка, у ній можна подивитись, як виглядає новий код - https://devs.mx/down/opencart_experiment1.zip

 

Що зроблено?

1. $registry "упразднен", всі об'єкти переведені на статичні класи.

Це дає можливість доступатися до них з любого місця без всякої додаткової магії. Раніше було:

$this->url->link('product/product', 'product_id=' . $this->request->get['product_id'])

Стало:

url::link('product/product', 'product_id=' . request::get['product_id'])

Так, :: естетично виглядає гірше, ніж ->, але крім цього одні плюси, і в швидкодії теж. Нарешті IDE повністю розуміє, що звідки береться, працює підсвітка параметрів, code completion та переходи по Ctrl-клік.

 

2. Моделі уже не треба завантажувати в явному вигляді перед використанням. Із звертання для лаконічності забрано префікс model_.

Було:

$this->load->model('catalog/product');

$product_info = $this->model_catalog_product->getProduct($product_id);

Стало:

$product_info = catalog_product::getProduct($product_id);

 

3. Моделі адмінки мають префікс admin_, що дає можливість завантажувати адмінські моделі в каталозі і навпаки:

$product_id = admin_catalog_product::addProduct(request::post);
$preview = catalog_product::getProduct($product_id);

 

4. Забрано DB_PREFIX.

Ситуації, коли в одну базу треба поставити 2 магазини - супер-рідкі і вирішуються створенням нової бази.

Було:

$this->db->query("SELECT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd 
ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store ... ")

Стало:

db::query("SELECT * FROM category c LEFT JOIN category_description cd 
ON (c.category_id = cd.category_id) LEFT JOIN category_to_store ... ")

 

5. Додано коротку функцію esc(), яка екранує та додає одинарні лапки. Було:

$this->db->query("INSERT INTO " . DB_PREFIX . "category_description SET category_id = $category_id, name = '" . $this->db->escape($value['name']) . "', 
description = '" . $this->db->escape($value['description']) . "'");

Стало:

db::query("INSERT INTO category_description SET category_id = $category_id, name = " . esc($value['name']) . ", 
description = " . esc($value['description']));

 

6. Додана коротка функція config(), яка повертає ключ конфігурації, що починається з префікса config_, та переводить його в int, якщо він закінчується на _id.

Було:

$this->db->query("SELECT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd 
ON (c.category_id = cd.category_id) WHERE cd.language_id = '" . (int)$this->config->get('config_language_id') . "' 
AND c2s.store_id = '" . (int)$this->config->get('config_store_id')) . "'")

Стало:

db::query("SELECT * FROM category c LEFT JOIN category_description cd 
ON (c.category_id = cd.category_id) WHERE cd.language_id = " . config('language_id') . " 
AND c2s.store_id = " . config('store_id'))

 

7. Повністю забраний механізм events, як непрозорий.

 

8. Більшість шляхів та URL тепер відносні. config.php тепер один, в ньому немає купи дублюючих визначень:

<?php

const SITE_URL = 'http://localhost/opencart5/';
const DIR_STORAGE = 'system/storage/';

// DB
const DB_HOSTNAME = 'localhost';
const DB_USERNAME = 'root';
const DB_PASSWORD = 'root';
const DB_DATABASE = 'opencart5';

 

9. З адмінської частини забрано user_token в URL.

Хтось знає реальний сценарій атаки, від якого він захищав?

Якщо так, то є менш кодо-засираючі методи захиститись, наприклад автоматичне додавання IP, з якого логіняться, в білий список.

 

10. При цьому всьому за допомогою обгорток повністю підтримується старий синтаксис і працють доповлення Opencart 3.

Принаймні, я встановив модуль Нової Пошти і він нормально працює )

 

Поки більше нічого не поміняно, візуально все виглядає по старому. Як вам такий напрямок змін?

  • +1 8

47 коментарів


Recommended Comments



Я, как начинающий ковыряльщик OpenCart, не могу понять, почему не используются статические методы. Это сильно сокращает писанину. Я не специалист по данной CMS, но являюсь владельцем магазина на версии 2.3. Ради интереса наблюдаю за развитием новых версий и вижу много обоснованной критики касательно дальнейшего развития данного проекта. В общем, если надумаете развивать свой проект, я в деле ( на сколько позволит моя квалификация)))

  • +1 1
Надіслати

7. Повністю забраний механізм events, як непрозорий.


10. При цьому всьому за допомогою обгорток повністю підтримується старий синтаксис і працють доповлення Opencart 3.

Не зрозумів, що з сумісністю з величезним гамузом існуючих розширень.
OCMOD, vQmod? Вони наче підуть лісом, бо кодова база змінилась. Деяким може повезе і спрацюють.
Events випилений (незрозуміло, навіщо).

Змінено користувачем rb2
Надіслати

Згоден філософськи що треба вести гілку від 3-ки
Але той код що ти дав повне лайно тим паче в світі підтримки та т п
Навіщо прибирати registry, як основу  :?
Я категорично проти такого коду
Просто треба змінити оті простирадла в контролерах та уніфікувати дещо
 

Надіслати
27.07.2023 в 12:29, chukcha сказал:

Кому не прозорий?

Тому, хто читає код і намагається зрозуміти, що в ньому відбувається - непрозорий. Банально, дивишся на файл шаблону і намагаєшся зрозуміти, чому на сайті є кнопка, а в шаблоні нема. Або читаєш код моделі, а її видачу уже перепахало три різних доповлення внахльост, іди шукай і розбирайся. І IDE тобі тут не поможе, хіба дебаг.

 

27.07.2023 в 12:42, rb2 сказал:

Не зрозумів, що з сумісністю з величезним гамузом існуючих розширень.
OCMOD, vQmod? Вони наче підуть лісом, бо кодова база змінилась.

Так, ocMod/vQmod треба буде підрихтовувати. Але принаймні прості розширення в класичному opencart-стилі - доставки-оплати-модулі працюватимуть, що вже добре. У Opencart4 і цього нема, а переробляти розширення під нього ще той цимес, змінилося буквально все.

 

27.07.2023 в 12:50, markimax сказал:

Але той код що ти дав повне лайно тим паче в світі підтримки та т п
Навіщо прибирати registry, як основу  :?

Registry мало того, що є супер-збоченим способом емулювати глобальні класи, який не дає IDE зрозуміти, де що, він ще й дає пенальті на швидкість, бо кожен пук викликає магічну функцію.

 

Чому мій код лайно, можна більш конкретно? В світлі підтримки порівняно з Opencart3?

Надіслати
27.07.2023 в 16:21, MaxD сказал:

Тому, хто читає код і намагається зрозуміти, що в ньому відбувається - непрозорий.

той хто розуміє як працює події, або "хукі", або "фільтри"

Надіслати

"Міша, все фігня! Давай спочатку!" (С)

По-перше. Чому саме 3.*? TWIG - взагалі якийсь анті-паттерн.

По-друге. Робити з опенкарту якусь нову, більш правильну версію, виглядає як євроремонт хрущовки. Сама конструкція потребує капітального ремонту!

По-третє. Події - це дуже добре, але не в реалізації Данілки. Ось як мають робитися події https://github.com/ikkez/f3-events

Далі. Голі sql-запити злюче зло. Потрібно (ну хоча б!) маппінг, але по нормальному потрібно використовувати ORM/ODM https://github.com/ikkez/f3-cortex

 

  • +1 3
Надіслати

Я готовий виконати якесь одне завдання для нової збірки, якщо що. Наприклад, змінити код якогось вбудованого модуля або безкоштовного модуля.

Окрім зміни коду, було б чудово бачити зміни в функціональності системи з моменту ії встановлення. Верніше, наразі це може бути просто перелік. Але скажімо так, було б цікаво бачити, чи така збірка може привабити клієнтів.

  • +1 3
Надіслати
28.07.2023 в 15:19, Vladzimir сказал:

Чому саме 3.*? TWIG - взагалі якийсь анті-паттерн.

До Twigа якраз найменше питань. Синтаксис простий, останні його версії по швидкодії не так сильно відстають від TPL. Ось зараз копирсаю, додав в Opencart можливість одразу робити {{ load('common/header') }}, код контроллерів ще трохи почистився. Правда, лише в адмінській частині, інакше би одразу збилася сумісність з усіма шаблонами для вітрини.

 

28.07.2023 в 15:19, Vladzimir сказал:

Ось як мають робитися події, потрібно використовувати ORM/ODM

І в результаті вийде Prestashop в початковій стадії. Події та ORM сильно підіймають поріг входу та вартість розробки.

 

28.07.2023 в 15:54, SergeTkach сказал:

Я готовий виконати якесь одне завдання для нової збірки, якщо що. Наприклад, змінити код якогось вбудованого модуля або безкоштовного модуля.

Супер - якщо прийде час, запрошу долучитися.

 

28.07.2023 в 15:54, SergeTkach сказал:

Окрім зміни коду, було б чудово бачити зміни в функціональності системи з моменту ії встановлення. Верніше, наразі це може бути просто перелік.

Звичайно, є орієнтовний план і потрібно зробити немало роботи до того, як чимось заявлятись. Основна концепція - щоб усе нагально-потрібне було з коробки, і було настільки хорошим, щоб уже в цю зону не було потрібно робити комерційних доповнень. Хоча це теж засада, бо весь час Opencart тримається на розробниках, що продають базовий функціонал, your pain is my gain, Daniel ))

 

Программа-мінімум:

1. Зміна структури бази під швидкодію з великою кількістю товарів/категорій/атрибутів

2. Вбудоване SEO, більшою частиною автоматичне і підкапотне

3. Хороший та швидкий модуль фільтрів

4. Імпорт/експорт

5. Оновлення Opencart по кнопці, перевірка нових версій доповнень і теж оновлення їх по кнопці

6. Блог/статті/новини

7. Хороша робоча дефолтна тема вітрини, на якій можна реально крутити магазин

  • +1 7
Надіслати

twig - це чергова абстракція, яка адміну сайта не несе жодних переваг.

ORM/ODM - навпаки (принаймі та реалізація яку я вказав) не тільки знижує поріг входу, але й пришвидшує швидкість розробки і повністю виключає вразливості типу sql-injection.

  • +1 1
Надіслати
28.07.2023 в 16:49, MaxD сказал:

Программа-мінімум:

1. Зміна структури бази під швидкодію з великою кількістю товарів/категорій/атрибутів

2. Вбудоване SEO, більшою частиною автоматичне і підкапотне

3. Хороший та швидкий модуль фільтрів

4. Імпорт/експорт

5. Оновлення Opencart по кнопці, перевірка нових версій доповнень і теж оновлення їх по кнопці

6. Блог/статті/новини

7. Хороша робоча дефолтна тема вітрини, на якій можна реально крутити магазин

Крута програма! )

Надіслати
В 03.08.2023 в 11:50, markimax сказав:

Дякую!
Колеги... "накидайте" там тому Даніелю щоб повернув ocmod

ocmod - зло, event в реалізація Данілки - злюще зло.

Надіслати
03.08.2023 в 12:20, Vladzimir сказал:

ocmod - зло, event в реалізація Данілки - злюще зло.

Github зло?
То чому інструмент сумісної розробки магазина "зло"?
ocmod це такий  собі "мікрогіт" до окремо взятого магазину, як інструмент сумісної розробки
Це просто інструментарій
Зло.. це коли хтось лізе в оригінальний код чи то опенкарт, модулів, шаблонів...
Потім не оновитися, не знайти тих костилів
 

Надіслати
On 8/3/2023 at 12:25 PM, markimax said:

То чому інструмент сумісної розробки магазина "зло"?

Божечки, а я все гадаю - що ж таке "ocmod a joint development tool" в треді на гітхабі і до чого тут косяки (які з маріхуаною)

Надіслати
В 03.08.2023 в 12:25, rb2 сказав:

@Vladzimir а diff/patch - зло? Чи наче нормальна практика серед розроробників?

Це зовсім різні інструментарії, які використовуються в зовсім інших ситуаціях.

Надіслати
В 03.08.2023 в 12:25, markimax сказав:

ocmod це такий  собі "мікрогіт"

Це скоріш кастрований мікронано недогіт, а точніше милиця

Надіслати
On 8/3/2023 at 12:28 PM, Vladzimir said:

Це зовсім різні інструментарії, які використовуються в зовсім інших ситуаціях

Це однакові інструменти, на мій погляд. Тільки ocmod/vqmod піднятий до user-level, щоб не треба було лізти в консоль на сервері.

 

Надіслати
03.08.2023 в 12:28, Vladzimir сказал:

Це зовсім різні інструментарії, які використовуються в зовсім інших ситуаціях.

То один інструментарій, а ocmod інший, що в цьому такого.
Це інструменти.

Надіслати
В 03.08.2023 в 12:35, rb2 сказав:

Це однакові інструменти, на мій погляд. Тільки ocmod/vqmod піднятий до user-level, щоб не треба було лізти в консоль на сервері.

Є набагато простіші та елегантніші рішення для перевизначення/роширення коду

Надіслати
On 8/3/2023 at 12:38 PM, Vladzimir said:

Є набагато простіші та елегантніші рішення для перевизначення/роширення коду

Тоді чекаємо їх появи і широкого розповсюдження. Що там найближче до ідеалу? Magento? Prestashop? Shopify? Ну чи оцей Opencart 5.

  • +1 1
Надіслати
В 03.08.2023 в 12:57, rb2 сказав:

Тоді чекаємо їх появи і широкого розповсюдження. Що там найближче до ідеалу? Magento? Prestashop? Shopify? Ну чи оцей Opencart 5.

За концептом найкраще вийшло у simpla. А код потрібно робити схожий на це https://github.com/ikkez/f3-cortex як розширення цього https://fatfreeframework.com

Тоді питання щодо окмоду відпадуть

  • +1 1
Надіслати

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

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

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

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

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

Вхід

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

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

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

Important Information

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