Прошел год с момента выпуска OpenCart 2.xx, и теперь, похоже, все стабилизировалось в том, что касается основных API. Очевидно, что большинство популярных расширений поддерживают версию 2.xx и существуют вместе с их кодом версии 1.5.x. Вы также найдете множество расширений, которые позволяют перейти от существующей установки 1.5.x к последней версии.
Конечно, с такими расширениями есть определенные ограничения, поскольку они не могут конвертировать все, в частности пользовательские модули.
Поэтому в этой статье мы продолжим анализ фрагментов кода основных компонентов модуля OpenCart. Далее, мы увидим, как вы можете конвертировать его для совместимости с OpenCart 2.xx. Без какой-либо теории я сразу же погрузлюсь в гиковские вещи!
Изменения в файле контроллера
В этом разделе мы увидим необходимые изменения кода в файле контроллера. В этом примере я выбрал файл контроллера «account.php» в каталоге «catalog / controller / account».
Перенаправление URL
Давайте посмотрим на фрагмент 1.5.x для перенаправления. В более старой версии метод redirect
был частью абстрактного класса Controller
, поэтому вы можете вызывать его напрямую, используя объект $this
.
1
|
$this->redirect($this->url->link(‘account/login’, », ‘SSL’));
|
Теперь, вот как это выглядит в версии 2.xx. В последней версии метод redirect
принадлежит классу Response
и, таким образом, доступен через этот объект.
1
|
$this->response->redirect($this->url->link(‘account/login’, », ‘SSL’));
|
Загрузите языковой файл
В 1.5.x вы использовали бы следующий фрагмент для загрузки соответствующего языкового файла модуля.
1
|
$this->language->load(‘account/account’);
|
С другой стороны, вам нужно использовать немного другую версию в случае OpenCart 2.xx, как показано в следующем фрагменте.
1
|
$this->load->language(‘account/account’);
|
Назначение переменной
Можно сказать, что это одно из основных изменений в контексте метода контроллера, так как большую часть времени вы в конечном итоге будете назначать свои переменные, чтобы вы могли получить к ним доступ в файлах шаблонов представления.
В версии 1.5.x вы бы сделали что-то вроде этого:
1
|
$this->data[‘heading_title’] = $this->language->get(‘heading_title’);
|
В 2.xx то же самое может быть достигнуто путем:
1
|
$data[‘heading_title’] = $this->language->get(‘heading_title’);
|
Как вы можете видеть, в последней версии массив $data
подготовлен исключительно и передается в качестве аргумента представления. В более ранней версии это был правильный класс Controller
.
хлебный мякиш
В последней версии вам не нужно указывать разделитель в качестве ключа массива, в отличие от более ранней версии.
Вот фрагмент из версии 1.5.x:
1
2
3
4
5
|
$this->data[‘breadcrumbs’][] = array(
‘text’ => $this->language->get(‘text_home’),
‘href’ => $this->url->link(‘common/home’),
‘separator’ => false
);
|
Аналогичного результата можно добиться с помощью следующего кода:
1
2
3
4
|
$data[‘breadcrumbs’][] = array(
‘text’ => $this->language->get(‘text_home’),
‘href’ => $this->url->link(‘common/home’)
);
|
Детский шаблон
В 1.5.x вам нужно было предоставить массив для назначения всех дочерних шаблонов, таких как header, footer, column_left и т. Д.
1
2
3
4
5
6
7
8
|
$this->children = array(
‘common/column_left’,
‘common/column_right’,
‘common/content_top’,
‘common/content_bottom’,
‘common/footer’,
‘common/header’
);
|
В случае версии 2.xx вы будете использовать метод controller
класса Loader
.
1
2
3
4
5
6
|
$data[‘column_left’] = $this->load->controller(‘common/column_left’);
$data[‘column_right’] = $this->load->controller(‘common/column_right’);
$data[‘content_top’] = $this->load->controller(‘common/content_top’);
$data[‘content_bottom’] = $this->load->controller(‘common/content_bottom’);
$data[‘footer’] = $this->load->controller(‘common/footer’);
$data[‘header’] = $this->load->controller(‘common/header’);
|
Назначение шаблона
В более ранней версии OpenCart вы использовали следующий код для назначения файла шаблона и его рендеринга.
1
2
3
4
5
6
|
if (file_exists(DIR_TEMPLATE . $this->config->get(‘config_template’) . ‘/template/account/account.tpl’)) {
$this->template = $this->config->get(‘config_template’) .
} else {
$this->template = ‘default/template/account/account.tpl’;
}
$this->response->setOutput($this->render());
|
В последней версии вам нужно будет использовать немного другой и более короткий способ справиться с этим.
1
2
3
4
5
|
if (file_exists(DIR_TEMPLATE . $this->config->get(‘config_template’) . ‘/template/account/account.tpl’)) {
$this->response->setOutput($this->load->view($this->config->get(‘config_template’) . ‘/template/account/account.tpl’, $data));
} else {
$this->response->setOutput($this->load->view(‘default/template/account/account.tpl’, $data));
}
|
Как вы можете видеть, в последней версии мы используем метод view
класса Loader
.
Итак, вот и все, что касается изменений, связанных с контроллером. Используя контрольный список выше, вы сможете легко преобразовать код контроллера из более старой в более новую версию.
Изменения в файле модели
Хотя файлы моделей в обеих версиях практически идентичны, в последней версии OpenCart появилась новая функция «Уведомления о событиях». Это хорошая концепция, которая позволяет вам запускать определенные события и, таким образом, информировать соответствующих наблюдателей, если таковые имеются.
Используя функцию «Уведомления о событиях», вы можете разрешить изменение данных другими модулями, которые реализуют наблюдатели для связанных событий, перед сохранением в базе данных. Давайте возьмем пример фрагмента из файла «catalog / model / account / address.php».
1
|
$this->event->trigger(‘pre.customer.add.address’, $data);
|
Это вызовет событие, прежде чем адрес клиента будет добавлен или обновлен. Это позволит другим модулям изменять адресные данные, прежде чем они будут сохранены в базе данных. Так что, по сути, это единственное серьезное изменение в модели. Сказав это, вы также можете вызвать события из других компонентов модуля.
Изменения в View File
В последнем разделе этого руководства мы обсудим изменения в компоненте представления модуля. Одним из основных изменений является введение библиотеки «Bootstrap», что делает шаблон отзывчивым. Конечно, ваши старые шаблоны будут работать и в последней версии, но не будут отзывчивыми. OpenCart 2.xx в первую очередь для мобильных устройств, поэтому вы не можете игнорировать отзывчивость вашего шаблона.
Я хотел бы, чтобы вы изучили «catalog / view / theme / default / template / account / account.tpl», в которой вы увидите имена классов CSS, такие как «col-sm-6» и «col-sm-9», которые указывают на наличие библиотеки начальной загрузки. Таким образом, в основном, поскольку bootstrap находится в самом ядре, вы хотели бы использовать большинство функций, предоставляемых им.
Таким образом, в случае файлов представления вам необходимо преобразовать старый код XHTML в новую адаптивную структуру. Кроме того, так же, как печатаются переменные и другие дочерние шаблоны.
Вот и все, что касается сегодняшней статьи. Я уверен, что шаги, упомянутые выше, помогут вам конвертировать ваши модули из версии 1.5.x в версию 2.xx.
Вывод
Сегодня мы обсудили, какие именно изменения необходимо внести в существующие модули OpenCart на основе 1.5.x, чтобы преобразовать их в 2.xx-совместимые. Я надеюсь, что вам понравилось, и не стесняйтесь оставлять свои мысли на эту тему!
Тема OpenCart
Если вы хотите поднять свое обучение на новый уровень, посмотреть, что это такое, увидеть его в действии и практически применить то, что вы узнали в этом учебном пособии, а затем проверить отзывчивый шаблон OpenCart MediaCenter .