Как создать модуль для Опенкарт. Часть 2

18 Мар 2023г. в 15:45

Итак, в предыдущей статье мы с вами познакомились с основами создания модулей для Опенкарт. Пришло время написать модификатор OCMOD, который будет выполнять полезную функцию. В данном случае мы хотим, чтобы в карточке товара выводился артикул просматриваемого продукта. Начнем.

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

Начнем с контроллера товара. В него мы добавили 2 строки кода:

$data['sku'] = $product_info['sku'];
$data['text_sku'] = $this->language->get('text_sku');
1
2
$data['sku'] = $product_info['sku'];
$data['text_sku'] = $this->language->get('text_sku');
Добавили мы их после вот этой строки:

$data['model'] = $product_info['model'];
1
$data['model'] = $product_info['model'];
Эта строка в файле находится в единственном экземпляре, поэтому мы смело можем описать первую операцию модификатора:

<file path="catalog/controller/product/product.php">
<operation>
<search>
<![CDATA[$data['model'] = $product_info['model'];]]>
</search>
<add position="after">
<![CDATA[ $data['sku'] = $product_info['sku'];
$data['text_sku'] = $this->language->get('text_sku');]]>
</add>
</operation>
</file>
1
2
3
4
5
6
7
8
9
10
11
<file path="catalog/controller/product/product.php">
<operation>
<search>
<![CDATA[$data['model'] = $product_info['model'];]]>
</search>
<add position="after">
<![CDATA[ $data['sku'] = $product_info['sku'];
$data['text_sku'] = $this->language->get('text_sku');]]>
</add>
</operation>
</file>
Само собой, не забудьте удалить эти строки из оригинального файла product.php. Идем дальше, следующий файл – вид продукта. И операция будет такой:

<file path="catalog/view/theme/*/template/product/product.tpl">
<operation>
<search>
<![CDATA[<?php if ($reward) { ?>]]>
</search>
<add position="before">
<![CDATA[ <?php if($sku): ?>
<li><?= $text_sku; ?> <?=$sku;?></li>
<?php endif; ?>]]>
</add>
</operation>
</file>
1
2
3
4
5
6
7
8
9
10
11
12
<file path="catalog/view/theme/*/template/product/product.tpl">
<operation>
<search>
<![CDATA[<?php if ($reward) { ?>]]>
</search>
<add position="before">
<![CDATA[ <?php if($sku): ?>
<li><?= $text_sku; ?> <?=$sku;?></li>
<?php endif; ?>]]>
</add>
</operation>
</file>
Здесь мы ищем строку и в позицию перед ней добавляем нужный код, который, опять-таки, не забудьте удалить из шаблона темы. Также обратите внимание на то, что в пути к файлу название темы мы заменили звездочкой: catalog/view/theme/*/template/product/product.tpl

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

<file path="catalog/language/en-gb/product/product.php">
<operation>
<search>
<![CDATA[<?php]]>
</search>
<add position="after">
<![CDATA[$_['text_sku'] = 'Vendor Code:';]]>
</add>
</operation>
</file>

<file path="catalog/language/ru-ru/product/product.php">
<operation>
<search>
<![CDATA[<?php]]>
</search>
<add position="after">
<![CDATA[$_['text_sku'] = 'Артикул:';]]>
</add>
</operation>
</file>

<file path="catalog/language/en-gb/product/product.php">
<operation>
<search>
<![CDATA[<?php]]>
</search>
<add position="after">
<![CDATA[$_['text_sku'] = 'Vendor Code:';]]>
</add>
</operation>
</file>

<file path="catalog/language/ru-ru/product/product.php">
<operation>
<search>
<![CDATA[<?php]]>
</search>
<add position="after">
<![CDATA[$_['text_sku'] = 'Артикул:';]]>
</add>
</operation>
</file>
Модуль готов, осталось установить его. Для этого удалим тестовый модуль, установленный в предыдущей статье и не забудем очистить кэш. Чтобы удалить дополнение, достаточно отметить его галочкой в списке дополнений и нажать иконку корзины в правом верхнем углу страницы.

После этого повторно установим только что написанный модуль и обновим кэш. Если вы нигде не ошиблись, тогда в карточке товара мы увидим вывод артикула.



На всякий случай приведу итоговый код модификатора sku_wfm.ocmod.xml:

<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Вывод артикула</name>
sku_wfm
<version>1.0</version>
<author>Andrey</author>
<link>//webformyself.com </link>
<file path="catalog/controller/product/product.php">
<operation>
<search>
<![CDATA[$data['model'] = $product_info['model'];]]>
</search>
<add position="after">
<![CDATA[ $data['sku'] = $product_info['sku'];
$data['text_sku'] = $this->language->get('text_sku');]]>
</add>
</operation>
</file>

<file path="catalog/view/theme/*/template/product/product.tpl">
<operation>
<search>
<![CDATA[<?php if ($reward) { ?>]]>
</search>
<add position="before">
<![CDATA[ <?php if($sku): ?>
<li><?= $text_sku; ?> <?=$sku;?></li>
<?php endif; ?>]]>
</add>
</operation>
</file>

<file path="catalog/language/en-gb/product/product.php">
<operation>
<search>
<![CDATA[<?php]]>
</search>
<add position="after">
<![CDATA[$_['text_sku'] = 'Vendor Code:';]]>
</add>
</operation>
</file>

<file path="catalog/language/ru-ru/product/product.php">
<operation>
<search>
<![CDATA[<?php]]>
</search>
<add position="after">
<![CDATA[$_['text_sku'] = 'Артикул:';]]>
</add>
</operation>
</file>
</modification>

<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Вывод артикула</name>
sku_wfm
<version>1.0</version>
<author>Andrey</author>
<link>//webformyself.com </link>
<file path="catalog/controller/product/product.php">
<operation>
<search>
<![CDATA[$data['model'] = $product_info['model'];]]>
</search>
<add position="after">
<![CDATA[ $data['sku'] = $product_info['sku'];
$data['text_sku'] = $this->language->get('text_sku');]]>
</add>
</operation>
</file>

<file path="catalog/view/theme/*/template/product/product.tpl">
<operation>
<search>
<![CDATA[<?php if ($reward) { ?>]]>
</search>
<add position="before">
<![CDATA[ <?php if($sku): ?>
<li><?= $text_sku; ?> <?=$sku;?></li>
<?php endif; ?>]]>
</add>
</operation>
</file>

<file path="catalog/language/en-gb/product/product.php">
<operation>
<search>
<![CDATA[<?php]]>
</search>
<add position="after">
<![CDATA[$_['text_sku'] = 'Vendor Code:';]]>
</add>
</operation>
</file>

<file path="catalog/language/ru-ru/product/product.php">
<operation>
<search>
<![CDATA[<?php]]>
</search>
<add position="after">
<![CDATA[$_['text_sku'] = 'Артикул:';]]>
</add>
</operation>
</file>
</modification>