Создание модификатора для Opencart 1.5

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5
Загрузка...

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

Что нужно для его создания?

1. Создать XML файл, например my_mod.xml
2. Добавить в файл необходимые тэги, содержащие Версию, автора,а так же название модификатора
3. Для opencart 1.5 и ниже загрузить xml файл в папку /vqmod/xml

И так по порядку.

В созданный файл my_mod.xml добавляем следующие строки

<?xml version="1.0" encoding="UTF-8"?>
<modification>
<name>Новое поле в настройках</name>
<code>my_mod</code>
<version>1.0</version>
<author>Иванов Алексей</author>
<link>https://ivacms.ru</link>
</modification>

name — название модификатора
code — кириллическое имя модификатора без расширения *xml
version — версия вашего модификатора
author — автор модификатора
link — ссылка на сайт автора

Это основные параметры которые требуются для работы модификатора, но этого не достаточно ведь нам необходимо что-то сделать. Я решил добавить дополнительную опцию в настройки магазина, после опции «Время работы».

В первую очередь нам необходимо создать новое поле в шаблоне, который будет находится вот тут /admin/view/template/setting/setting.tpl. Путь нам известен, теперь нужно в наш модификатор добавить несколько строчек, которые добавят html код после данной опции.

В системе модификатора существует несколько параметров:

  • replace — замена строки
  • after — вставка после кода
  • before — вставка перед кодом

Нам нужно добавить несколько строчек, поэтому используем параметр after, но куда именно их добавлять и как? Для это необходимо открыть файл setting.tpl, и найти HTML код с опцией Время работы. Вот он:

 

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

Какой код добавить в xml файл?

<file name="admin/view/template/setting/setting.tpl">
<operation>
<search position="after">
<![CDATA[<td><input type="text" name="config_time" value="<?php echo $config_time; ?>" size="40"/></td>]]>
</search>
<add><![CDATA[
<tr><td>Новая настройка</td><td><input type="text" name="config_new" value="<?php if(isset($config_new))echo $config_new; ?>" size="40"/></td></tr>
]]>
</add>
</operation>
</file>

 

Что к чему?

<file name=»admin/view/template/setting/setting.tpl»> — указываем путь до файла в котором будет проходить поиск.
<search position=»after»>
— говорит о том, что нам необходимо найти строку, и добавить новый код после неё.
<![CDATA[ ]]> — Между 2 и 3 фигурной скобкой добавляется поисковый код, а так же новый html или php код.
<input type=»text» name=»config_new» — Обратите внимание, что имя нового поля должно быть уникальным, в данном случае это config_new

В итоге получится следующий код:

<?xml version="1.0" encoding="UTF-8"?>
<modification>
<name>Новое поле в настройках</name>
<code>my_mod</code>
<version>1.0</version>
<author>Иванов Алексей</author>
<link>https://ivacms.ru</link>
<file name="admin/view/template/setting/setting.tpl">
<operation>
<search position="after">
<![CDATA[<td><input type="text" name="config_time" value="<?php echo $config_time; ?>" size="40"/></td>]]>
</search>
<add>
<![CDATA[
<tr><td>Новая настрока</td><td><input type="text" name="config_new" value="<?php if(isset($config_new))echo $config_new; ?>" size="40"/></td></tr>
]]></add>
</operation>
</file>
</modification>

 

Обратите внимание, что HTML код в файле модификатора должен полностью соответствовать HTML коду в файле settings.tpl, иначе скрипт не будет работать. Так же текстовому полю нужно добавить новое имя, в данном случае «config_new».

Вот оно новое поле с настройкой:

 

Но этого не достаточно, ведь нам нужно чтобы скрипт вывел данные сохранённые в бд в новое input поле, а для этого служит уже другой файл admin/controller/setting/setting.php. В этом файле есть строки, которые проверяют поле «Время работы», и заносит его в переменную.

После этих строк нам нужно добавить точно такой же код, только с названием нашего поле «config_new».

if (isset($this->request->post['config_new'])) {
$this->data['config_new'] = $this->request->post['config_new'];
} else {
$this->data['config_new'] = $this->config->get('config_new');
}

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

if (isset($this->request->post['config_title'])) {

Данная строчка кода расположена чуть ниже в файле setting.php

Данный код добавляем в модификатор, но вместо параметра position=»after», добавляем position=»before»

<?xml version="1.0" encoding="UTF-8"?>
<modification>
<name>Новое поле в настройках</name>
<code>my_mod</code>
<version>1.0</version>
<author>Иванов Алексей</author>
<link>https://ivacms.ru</link>

<file name="admin/view/template/setting/setting.tpl">
<operation>
<search position="after"><![CDATA[
<td><input type="text" name="config_time" value="<?php echo $config_time; ?>" size="40"/></td>
]]></search>
<add><![CDATA[
<tr>
<td>Новая настрока</td>
<td><input type="text" name="config_new" value="<?php if(isset($config_new))echo $config_new; ?>" size="40"/></td>
</tr>
]]></add>
</operation>
</file>

<file name="admin/controller/setting/setting.php">
<operation>
<search position="before"><![CDATA[
if (isset($this->request->post['config_title'])) {
]]></search>
<add><![CDATA[
if (isset($this->request->post['config_new'])) {
$this->data['config_new'] = $this->request->post['config_new'];
} else {
$this->data['config_new'] = $this->config->get('config_new');
}
]]></add>
</operation>
</file>

</modification>

 

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

Если данную опцию нужно где-то показать в шаблоне, используется простая конструкция:

<?php echo $this->config->get('config_new');?>

Так же шаблон можно исправить и с помощью модификатора, для этого нужно знать что именно нужно редактировать. Предположим нам нужно изменить TITLE интернет магазина на тот , что расположен в новом поле.  В Файле catalog/view/theme/default/template/common/header.tpl есть строка <title><?php echo $title; ?></title>, вот её нам и надо заменить. Для этого добавляем ещё один код в наш модификатор:

<file name="catalog/view/theme/*/template/common/header.tpl">
<operation>
<search position="replace">
<![CDATA[<title><?php echo $title; ?></title>]]>
</search>
<add>
<![CDATA[<title><?php echo $this->config->get('config_new'); ?></title>]]>
</add>
</operation>
</file>

 

Обратите внимание, что в пути до файла с шаблоном вместо DEFAULT я установил * — которая говорит о том, что изменения касаются всех шаблонов.

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*