КАК НАПИСАТЬ МОДУЛЬ OPENCART (ЧАСТЬ 4)

Часть четвертая – пользовательская часть.

Начнем с контроллера. Что он должен делать?

  • Контроллер должен правильно объявится
  • Подгрузить языковой файл
  • Подгрузить модель
  • Получить нужные данные
  • Отправить их на отрисовку.
class ControllerModuleComments extends Controller { 
private $error = array(); // объявляем переменную - массив с возможными ошибками
public function index() {

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

Далее не подгружаем языковой файл и нужными нам текстами и не суем их в массив $data. Потому что нет у нам в модуле никаких стандартных фраз =) А мог бы быть к примеру заголовок или кнопка “править” для админа или заголовкие какие нибудь.

Получение коментов:

$data['commets'] = array();
$this->load->model('module/comments');
$data['comments'] = $this->model_module_comments->getAll();

Создаем массив с коментами, подгружаем модель (функция getAll такая же, как в админке. Страниц нету, выгружаются все коменты сразу – таково задание. Да и вообще, в этом случае взят просто файл из админки) и записываем коменты в $data.

Далее нам нужно коменты не просто вывести списком, а вывести их каруселью. Для этого возьмем любой плагин карусели – мне нравится owl slider.

По инструкции к плагину нам нужно подключить 2 css файла и 1 js. Помним, что jquery у нас уже загружен, но в другой ситуации его могло и не быть.

$this->document->addStyle('catalog/view/javascript/jquery/owl-carousel/owl.carousel.css');
$this->document->addStyle('catalog/view/javascript/jquery/owl-carousel/owl.transitions.css');
$this->document->addScript('catalog/view/javascript/jquery/owl-carousel/owl.carousel.min.js');

В принципе – это все, что должен делать наш контроллер, никакой обработки нету, тfк как она уже сделана из админки. Передаем на отрисовку:

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/comments.tpl')) {
return $this->load->view($this->config->get('config_template') . '/template/module/comments.tpl', $data);
} else {
return $this->load->view('default/template/module/comments.tpl', $data);
}

Далее движок начинает смотреть как же отрисовать модуль и обращается к .tpl файлу.

<div class="comments-carousel">
<div class="owl-carousel" id="carousel-comment">
<?php if(!$comments) { echo "no comments"; } ?>
<?php foreach ($comments as $comment) { ?>
<div class="comment-item">
<div class="comment-image"><img width="100" src="<?php echo '/image/'; if ($comment['image']) echo $comment['image']; ?>"/></div>
<div class="comment-name"><?php echo $comment['name']; ?></div>
<div class="comment-text"><?php echo $comment['text']; ?></div>
</div>
<?php } ?>
</div>
</div>

“Пока есть коменты, согласно инструкции к слайдеру наполняем слайды карусели”.

<script>
$(document).ready(function() {
 
$("#carousel-comment").owlCarousel({
items: 2,
autoPlay: 1000,
navigation: true,
navigationText: ['<i class="fa fa-chevron-left fa-5x"></i>', '<i class="fa fa-chevron-right fa-5x"></i>'],
pagination: false,
transitionStyle: 'fade'
});
});
</script>

И, согласно той же инструкции подключаем js для этого слайдера.

Стоит заметить, что для модуля не подключен отдельный css файл. В конкретном случае модуль писался “на 1 раз” – и было принято решение стили прописать в основном css. Но в контроллере можно так же, как и файлы слайдера подключить кастомный css, можно написать в style в .tpl шаблоне или хардкорно – инлайн стилями (желательно так не делать =))

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

Предыдущие части:
Как написать модуль OpenCart (Часть 1)
Как написать модуль OpenCart (Часть 2)
Как написать модуль OpenCart (Часть 3)

Архив с модулем:
comments.rar

29 комм. к записи “КАК НАПИСАТЬ МОДУЛЬ OPENCART (ЧАСТЬ 4)”

    1. Не раньше чем через пол года возьмусь за него, но думаю что и он будет разобран по полочкам.

  1. Здравствуйте! Спасибо огромное за серию статей о том как делать свои модули для OpenCart 2. Благодаря вам я наконец-то понял как это сделал. Раньше я не видел подобных статей и не понимал как в этом разобраться, с какой стороны подойти. Не хватало решимости на эксперимент. А теперь все вышло. Добавил ваш сайт в закладки и с нетерпением жду новых статей!

  2. Подскажите пожалуйста в каком месте мы говорим модулю показываться не только на отдельной странице, но и в любой из боковых колонок, например на главной, категории, продукте, производителе в левой колонке или ниже наполнения или в правой колонке?

    1. Модули отображаются в “местах для модулей” (позиция называется). Эти места есть стандартные (левая колонка, правая колонка, низ-верх) и можно добавлять свои. В любом случае когда модуль включен в админке, нужно перейти в Дизайн-Схемы и выбрать схему (например схема Категория). Далее добавить модуль в схему, обозначив в какой позиции и сохранить.

      1. У меня не появляется модуль в схемах, хотя модуль включен. Не подскажите где копать?

  3. Спасибо огромное за статьи. Лучше инструкции по созданию модуля на опенкарт пока не встречал!

  4. В каком месте мы говорим движку чтоб он отобразил модуль в схеме? У меня не получается его вывести в клиентский части.

  5. Если модуль вызван на странице товара, как в нем получить текущий товар и категорию?

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

    1. Проверьте версию опенкарта. Возможно у Вас 2,3, там другая проверка на право редактировать.

    1. Врядли, все отличия там только формальные в местах объявления переменных или вызова методов. Возьмите любой модуль в 2 версиях (2,0 2,3) и посмотрите отличия, их очень мало.

  7. Добрый вечер. Будут ли у Вас статьи о событиях?
    Как пример, хочу написать модуль, с помощью которого можно при добавлении товара изменять его цену В или НА какое-то число. Т.е. нужно выбрать действие и число с которым будет произведено это действие.

    1. В опенкарте еще пишут эту систему, она пока кривая и очень маленькая. В данном случае надо найти модель или контроллер, который за это отвечает (что-то вроде $cart->add или update) и исправить его с помощью модификаторов, если это модуль.

        1. Грубо – это менять ядро прям в родных файлах, а модификаторы – пока единственно правильный путь. Хотя и с этим способом все может сломаться при обновлении)

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

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

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