sv2109

  • записи
    52
  • комментариев
    6
  • просмотров
    2 026

OpenCart 2.2.0.0_a1 - что нового?

sv2109

1 084 просмотра

opencart.pngВышел OpenCart 2.2.0.0_a1.
Это альфа версия, она создана для тестов и исправления возможных ошибок, крайне не рекомендуется устанавливать ее на рабочий сайт.
В ней достаточно много изменений по сравнению с 2.1.0.2, поэтому решил присвятить этому отдельную статью.
Итак, что же нового?

 

 

Адмика

1. Настройки темы теперь находяться по адресу:

admin/index.php?route=theme/theme_default

что, конечно же, намного удобнее, чем искать их в настройках магазина

Плюс для каждой темы можно установить свои настройки

 

2. Новые методы оплаты (которые у нас все равно не используются): 

  • Lay-Buy
  • Cardinity
  • Eway

3. Новые модули:

  • Lay-Buy
  • sagepay
  •  

Структура

1. Появился composer:

composer.json

Я так понял, будет доступно 2 версии OpenCart - в одной будет composer и все библиотеки будут подгружаться через него. Для этой версии папку vendor стоит вынести выше каталога магазина.

 

2. index.php сильно уменьшился, он теперь занимает всего около 20 строк кода. 

// Version
define('VERSION', '2.2.0.0_a1');
 
// Configuration
if (is_file('config.php')) {
  require_once('config.php');
}
 
// Install
if (!defined('DIR_APPLICATION')) {
  header('Location: install/index.php');
  exit;
}
 
// Startup
require_once(DIR_SYSTEM . 'startup.php');
 
$application_config = 'catalog';
 
// Application
require_once(DIR_SYSTEM . 'framework.php');

Как видно, весь код из него добавили в в файл с гордым названием framework.php

Теперь OpenCart можно называть CMF :)

На самом деле это хорошо, так как нету дублирования кода, весь код и для каталога и для админки размещен в одном файле. 

 

3. Появилась папка 

/catalog/controller/startup

в которую перенесли все, что нужно загрузить при старте:

  • startup.php
  • session.php
  • seo_url.php
  • router.php 
  • maintenance.php
  • event.php
  • error.php

 

4. Появилась папка

/catalog/controller/event

с файлами:

  • theme.php
  • debug.php

 

5. Добавился /system/engine/proxy.php

6. Все что связано с корзиной перенесено в 

/system/library/cart:

  • weight.php
  • user.php
  • tax.php
  • length.php
  • customer.php
  • currency.php
  • cart.php
  • affiliate.php

7. Появилась папка 

/system/library/session

с файлами:

  • db.php
  • file.php

Как видно из названия, это сделано для того, чтобы хранить сессии также в базе данных, класс написан, правда он пока никак не подключается, это наверное будет сделано в следующих версиях

 

8. Локализации теперь размещены в 

language/en-gb

вместо

language/english

 

По коду

1. Поменялось создание ссылок

было:

'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')

стало:

'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], true)

SSL теперь подключается в конструкторе библиотеки:

system/library/url.php

public function __construct($ssl = false) {

 

2. Поменялась генерация представлений

было:

$this->response->setOutput($this->load->view('analytics/google_analytics.tpl', $data));

стало:

$this->response->setOutput($this->load->view('analytics/google_analytics', $data));

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

Также рендеринг вынесен в адаптер:

upload/system/library/template.php

public function render($template) { 
	return $this->adaptor->render($template); 
}

название которого поменялось, теперь

/system/library/template/basic.php 

в 2.1 было php.php

Да, появились, правда немного раньше, неймспейсы:

namespace Template;

 

Использование адаптеров в шаблонах не совсем понятно, так как он все равно один и задается при создании класса шаблона жестко в тексте. 

$template = new Template('basic');

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

 

3. Локализация

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

было:

$this->language->load('catalog/attribute_group');

стало:

$this->load->language('catalog/attribute_group');

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

$this->registry->get('event')->trigger('language/' . $route . '/before', $route); 

$this->registry->get('language')->load($route); 

$this->registry->get('event')->trigger('language/' . $route . '/after', $route);

Которые могут использоваться другими модулями.
Также картинка языка теперь в папке самого языка, а не в папке image,

было:

<img src="image/flags/<?php echo $language['image']; ?>" alt="<?php echo $language['name']; ?>" title="<?php echo$language['name']; ?>">

стало:

<img src="catalog/language/<?php echo $language['code']; ?>/<?php echo $language['code']; ?>.png" alt="<?php echo$language['name']; ?>" title=">

 

4. По Событиям (Events)

Они опять переписаны (уже наверное раз десятый с момента появления)

было:

if (version_compare(VERSION, '2.0.1', '>=')) {
  $this->load->model('extension/event');
  $this->model_extension_event->addEvent('openbay', 'post.admin.product.delete', 'extension/openbay/eventDeleteProduct');
  $this->model_extension_event->addEvent('openbay', 'post.admin.product.edit', 'extension/openbay/eventEditProduct');
} else {
  $this->load->model('tool/event');
  $this->model_tool_event->addEvent('openbay', 'post.product.delete', 'extension/openbay/eventDeleteProduct');
  $this->model_tool_event->addEvent('openbay', 'post.product.edit', 'extension/openbay/eventEditProduct');
}

стало:

$this->load->model('extension/event');
$this->model_extension_event->addEvent('openbay', 'admin/model/catalog/product/deleteProduct/before', 'extension/openbay/eventDeleteProduct');
$this->model_extension_event->addEvent('openbay', 'admin/model/catalog/product/editProduct/before', 'extension/openbay/eventEditProduct');

Удаление было:

if (version_compare(VERSION, '2.0.1', '>=')) { 
	$this->load->model('extension/event'); 
	$this->model_extension_event->deleteEvent('openbay'); 
} else { 
	$this->load->model('tool/event'); 
	$this->model_tool_event->deleteEvent('openbay'); 
}

стало:

$this->model_extension_event->deleteEvent('openbay');

 

Добавление тригеров, было

$this->event->trigger('pre.view.' . str_replace('/', '.', $template), $data);

стало

$result = $this->registry->get('event')->trigger('view/' . $route . '/before', array(&$route, &$data));

Почти все тригеры удалены из моделей и контроллеров, их было особенно много в моделях и контроллерах покупателя, заказа 

Остались только в 

  • system/engine/loader.php
  • catalog/model/openbay/etsy_order.php
  • catalog/model/openbay/ebay_openbay.php
  • catalog/controller/startup/router.php
  • admin/controller/startup/router.php

все!

 

5. Валидацию емейлов изменили

было:

if (utf8_strlen($email) > 0 && preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $email)) {

стало:

if (utf8_strlen($email) > 0 && filter_var($email, FILTER_VALIDATE_EMAIL)) {

 

6. переписан system/engine/action.php

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

 

Заключение

Рефлексия, композер, неймспейсы.. это точно OpenCart? :)

На самом деле меня это не может не радовать, что OpenCart не стоит на месте и постоянно развивается. 

Плохо то, что делается это неимоверно медленно. Те же События можно было запустить еще со второй версии, уже 2.2, за это время их уже раз десять переписали, а теперь вообще половину тригеров выбросили, оставив только несколько в лоадере.. Такими темпами полноценную поддержку Событий мы получим лет через 5.. в то время когда сейчас практически все популярные движки их уже имеют. 

 

Стоит ли переходить с 2.1 на 2.2. 

Каких-то существенных улучшений я не увидел. Поменялась структура, что в будущем может только добавить проблем с совместимостью модулей, которые были написаны под старую структуру, добавились некоторые косметические улучшения в админке, которые ничего особо не меняют. Поэтому особого смысла срочно переходить на новую версию с 2.1.0.2 я не вижу. Хотя, конечно, желательно всегда иметь свежую версию движка.  

 

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

Если вы обнаружили другие изменения - пишите в комментариях. 

---

Мои модули для OpenCart можно скачать тут: https://freecart.pro/sv2109/

 


0


0 комментариев


Нет комментариев для отображения

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас
  • Актуальные темы на форуме

  • Последние сообщения

    • Я рассчитываю на другое. У меня задумка защиты админки от школьников. Хочу в корень сайта положить два php-документ administrator.php и administrator1.php. В одном будет муляжная форма ввода логина и пароля, которая при любых значениях возвращает ошибку “Неправильная пара логин/пароль”, а в другом хочу реализовать переадресацию на любой "смешной сайт". Первый вариант я сейчас приблизительно представляю как выполнить, а про второй хотел спросить у Вас позже. Подскажите алгоритм действий) Ваше мнение - такие варианты защиты реализуемы? Это не вызовет ошибок в магазине?
    • В файле
      /admin/controller/common/login.php

      перед  return !$this->error; добавьте   $this->error['warning'] = $this->language->get('error_login'); НО в таком случае ошибка будет выводиться всегда, даже если логин и пароль правелный ввели, то есть вы тоже не сможете зайти в админку.   
    • Доброго времени суток. Подскажите пожалуйста как в HTML-коде стандартной админки, изменить обработку формы так, чтобы при любом вводе логина/пароля выдавало ошибку. Если есть возможность покажите пример в коде. Пользую Opencart.pro 2.3х