Как переделать модуль от старых версий opencart на opencart 1.5.x или ocstore 1.5

Наверное многие из Вас при поиске модуля для своего магазина на opencart новой версии столкнулись с тем, что найденный модуль предназначен для более старых версий 1.4.x.

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

Давайте рассмотрим на примере скачанного модуля для opencart 1.4.x, как его можно быстро адаптировать для работы с новой версией opencart 1.5.х или ocstore 1.5.

И так. Качаем модуль. Этот модуль позволяет добавлять произвольный html в любом месте сайта.

Подобный модуль уже есть и для opencart 1.5, но мы возьмем именно этот для примера.

И так, для начала копируем скачанный модуль к себе на сайт.

В админской части в настройках включаем права на модуль (система-пользователи-группы пользователей-изменить. В списках ставим галочки возле названия установленного модуля и нажимаем «применить») .

Открываем файл admin/controller/module/mymodule.php.

Меняем в нем все вхождения

$this->document->title = $this->language->get('heading_title');

на

$this->document->setTitle($this->language->get('heading_title'));

Теперь меняем все вхождения

$this->document->breadcrumbs

на

$this->data['breadcrumbs']

И, наконец в самом конце функции index(), перед

$this->template =

вставляем

$this->data['modules'] = array();

                        if (isset($this->request->post[$this->_name. '_module'])) {

                                   $this->data['modules'] = $this->request->post[[$this->_name. '_module'];

                        } elseif ($this->config->get([$this->_name. '_module')) {

                                   $this->data['modules'] = $this->config->get([$this->_name. '_module');

                        }

                        $this->load->model('design/layout');

                        $this->data['layouts'] = $this->model_design_layout->getLayouts();

Теперь редактируем файл темплейта admin/view/template/module/

Меняем

<h1 style="background-image: url('view/image/module.png');"><?php echo $heading_title; ?></h1>

На

<h1><img src="view/image/module.png" alt="" /> <?php echo $heading_title; ?></h1>

Далее ищем

<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form">

И ниже вставляем

<table id="module">

<thead>

<tr>

<td><?php echo $entry_limit; ?></td>

<td><?php echo $entry_image; ?></td>

<td><?php echo $entry_layout; ?></td>

<td><?php echo $entry_position; ?></td>

<td><?php echo $entry_status; ?></td>

<td><?php echo $entry_sort_order; ?></td>

<td></td>

</tr>

</thead>

<?php $module_row = 0; ?>

<?php foreach ($modules as $module) { ?>

<tbody id="module-row<?php echo $module_row; ?>">

<tr>

<td><input type="text" name="mymodule_module[<?php echo $module_row; ?>][limit]" value="<?php echo $module['limit']; ?>" size="1" /></td>

<td><input type="text" name="mymodule_module[<?php echo $module_row; ?>][image_width]" value="<?php echo $module['image_width']; ?>" size="3" />

<input type="text" name="mymodule_module[<?php echo $module_row; ?>][image_height]" value="<?php echo $module['image_height']; ?>" size="3" />

<?php if (isset($error_image[$module_row])) { ?>

<span><?php echo $error_image[$module_row]; ?></span>

<?php } ?></td>

<td><select name="mymodule_module[<?php echo $module_row; ?>][layout_id]">

<?php foreach ($layouts as $layout) { ?>

<?php if ($layout['layout_id'] == $module['layout_id']) { ?>

<option value="<?php echo $layout['layout_id']; ?>" selected="selected"><?php echo $layout['name']; ?></option>

<?php } else { ?>

<option value="<?php echo $layout['layout_id']; ?>"><?php echo $layout['name']; ?></option>

<?php } ?>

<?php } ?>

</select></td>

<td><select name="mymodule_module[<?php echo $module_row; ?>][position]">

<?php if ($module['position'] == 'content_top') { ?>

<option value="content_top" selected="selected"><?php echo $text_content_top; ?></option>

<?php } else { ?>

<option value="content_top"><?php echo $text_content_top; ?></option>

<?php } ?>

<?php if ($module['position'] == 'content_bottom') { ?>

<option value="content_bottom" selected="selected"><?php echo $text_content_bottom; ?></option>

<?php } else { ?>

<option value="content_bottom"><?php echo $text_content_bottom; ?></option>

<?php } ?>

<?php if ($module['position'] == 'column_left') { ?>

<option value="column_left" selected="selected"><?php echo $text_column_left; ?></option>

<?php } else { ?>

<option value="column_left"><?php echo $text_column_left; ?></option>

<?php } ?>

<?php if ($module['position'] == 'column_right') { ?>

<option value="column_right" selected="selected"><?php echo $text_column_right; ?></option>

<?php } else { ?>

<option value="column_right"><?php echo $text_column_right; ?></option>

<?php } ?>

</select></td>

<td><select name="mymodule_module[<?php echo $module_row; ?>][status]">

<?php if ($module['status']) { ?>

<option value="1" selected="selected"><?php echo $text_enabled; ?></option>

<option value="0"><?php echo $text_disabled; ?></option>

<?php } else { ?>

<option value="1"><?php echo $text_enabled; ?></option>

<option value="0" selected="selected"><?php echo $text_disabled; ?></option>

<?php } ?>

</select></td>

<td><input type="text" name="mymodule_module[<?php echo $module_row; ?>][sort_order]" value="<?php echo $module['sort_order']; ?>" size="3" /></td>

<td><a onclick="$('#module-row<?php echo $module_row; ?>').remove();"><span><?php echo $button_remove; ?></span></a></td>

</tr>

</tbody>

<?php $module_row++; ?>

<?php } ?>

<tfoot>

<tr>

<td colspan="6"></td>

<td><a onclick="addModule();"><span><?php echo $button_add_module; ?></span></a></td>

</tr>

</tfoot>

</table>

И в самом конце перед

<?php echo $footer; ?>

Вставляем

<script type="text/javascript"><!--

var module_row = <?php echo $module_row; ?>;

function addModule() { 

html = '<tbody id="module-row' + module_row + '">';

html += ' <tr>';

html += ' <td><input type="text" name="mymodule_module[' + module_row + '][limit]" value="4" size="1" /></td>';

html += ' <td><input type="text" name="mymodule_module[' + module_row + '][image_width]" value="80" size="3" /> <input type="text" name="mymodule_module[' + module_row + '][image_height]" value="80" size="3" /></td>'; 

html += ' <td><select name="mymodule_module[' + module_row + '][layout_id]">';

<?php foreach ($layouts as $layout) { ?>

html += ' <option value="<?php echo $layout['layout_id']; ?>"><?php echo $layout['name']; ?></option>';

<?php } ?>

html += ' </select></td>';

html += ' <td><select name="mymodule_module[' + module_row + '][position]">';

html += ' <option value="content_top"><?php echo $text_content_top; ?></option>';

html += ' <option value="content_bottom"><?php echo $text_content_bottom; ?></option>';

html += ' <option value="column_left"><?php echo $text_column_left; ?></option>';

html += ' <option value="column_right"><?php echo $text_column_right; ?></option>';

html += ' </select></td>';

html += ' <td><select name="mymodule_module[' + module_row + '][status]">';

html += ' <option value="1" selected="selected"><?php echo $text_enabled; ?></option>';

html += ' <option value="0"><?php echo $text_disabled; ?></option>';

html += ' </select></td>';

html += ' <td><input type="text" name="mymodule_module[' + module_row + '][sort_order]" value="" size="3" /></td>';

html += ' <td><a onclick="$(\'#module-row' + module_row + '\').remove();"><span><?php echo $button_remove; ?></span></a></td>';

html += ' </tr>';

html += '</tbody>';

$('#module tfoot').before(html);

module_row++;

}

//--></script>

Осталось добавить только недостающие записи в файл admin/language/russian/module/mymodule

$_['text_content_top'] = 'Содержание шапки';

$_['text_content_bottom'] = 'Содержание подвала';

$_['entry_limit'] = 'Лимит:';

$_['entry_image'] = 'Изображение (Ширина x Высота):';

$_['entry_layout'] = 'Схема:';

Ну и в файле admin/controller/module/mymodule.php назначить эти записи переменным темплейта (где-то внутри функции index()):

$this->data['text_content_top'] = $this->language->get('text_content_top');

$this->data['text_content_bottom'] = $this->language->get('text_content_bottom'); 

$this->data['entry_limit'] = $this->language->get('entry_limit');

$this->data['entry_image'] = $this->language->get('entry_image');

$this->data['entry_layout'] = $this->language->get('entry_layout');

Собственно и все Smile. Теперь наш модуль должен работать.

PS: если Вы заметили, параметр image в данном модуле неуместен. Поэтому его и другие ненужные удаляем , добавляем свои, нужные именно для вашего модуля. Тут у каждого отдельного модуля по-своему, но общий смысл, думаю понятен.