Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. OpenCart
Code

Пользовательские контроллеры в OpenCart 2

by
Difficulty:BeginnerLength:MediumLanguages:

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Сегодня мы рассмотрим концепцию контроллеров в OpenCart 2.x. С выпуском версии OpenCart 2.x они внедрили изменения фреймворка, требующие обновления, если вы сделали какие-либо пользовательские модули в более ранней версии - OpenCart 1.x. Мы рассмотрим практический пример того, что мы будем называть гостевой книгой в этом учебнике.

Прежде чем двигаться дальше в этой статье, вы можете рассмотреть это как продолжение того, что я написал ранее. В этой статье я объяснил, как создать пользовательскую страницу в OpenCart 1.x, и если вы уже последовали этой статье, вы можете быстро пропустить большинство разделов сегодня!

Конечно, это OpenCart 2.x, который будет обсуждаться сегодня, поэтому убедитесь, что вы внимательно следите за кодом.

Если вы хотите узнать больше о шаблоне и контроллерах OpenCart, вы можете пройти пару первых разделов этой статьи

Зачем вообще пользовательский контроллер?

То, что вы можете спросить в первую очередь - почему пользовательский контроллер? Давайте быстро поймем, что такое контроллер в OpenCart, прежде чем мы займемся этим.

В контексте OpenCart контроллер является незаменимым компонентом фреймворка, который напрямую связан с процессом маршрутизации и отображает пользовательский интерфейс. В этом процессе он рассматривает другие важные компоненты, такие как язык, модель и представление, чтобы построить окончательный результат.

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

Например, группа account содержит контроллеры, которые занимаются регистрацией, входом, профилем и аналогичными вариантами использования. Аналогично, группа контроллеров checkout обрабатывает процесс создания заказа.

В двух словах, когда вы хотите создать функцию, которая не находится в ядре OpenCart, и если она использует новый URL-адрес в терминологии OpenCart, вы должны перейти на пользовательский контроллер. Он даст вам полный контроль над процессом создания страницы - какие элементы вы хотите отображать на своей странице.

Создание пользовательского контроллера

Сегодня мы реализуем базовую функциональность Guestbook, которая демонстрирует концепцию пользовательских контроллеров. В процессе этого мы создадим интерфейс, который позволит гостевым пользователям отправлять свои отзывы, введя свое имя и сообщение.

Прежде чем продолжить, убедитесь, что у вас есть рабочая установка OpenCart 2.3.x. 

Для тех, кто не знаком с фреймворком OpenCart, местом для поиска интерфейсных контроллеров является catalog/controller. Это каталог, который управляет всеми контроллерами по группам, основываясь на предоставляемых ими функциях.

В нашем случае мы создадим отдельную группу под названием guestbook. Идем дальше и создаем каталог catalog/controller/guestbook. Внутри этого каталога создайте файл entry.php со следующим содержимым. Это файл контроллера, который обрабатывает логику приложения и логику отправки наших функций гостевой книги.

Согласно соглашениям об именах OpenCart, имя класса начинается с ключевого слова Controller, за которым следует имя каталога, Guestbook в нашем случае, в которой находится файл класса. Кроме того, имя файла класса, Entry в нашем случае, добавляется в конце.

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

В большинстве случаев мы начнем с включения языкового файла для конкретной группы. Таким образом OpenCart управляет ярлыками статического языка во всем приложении. Конечно, это делает внедрение многоязычных сайтов легче.

Прежде чем двигаться вперед, давайте создадим соответствующий языковой файл, чтобы наш контроллер мог его найти. Создайте файл catalog/language/en-gb/guestbook/guestbook.php со следующим содержимым.

Как вы можете видеть, мы просто назначаем метки своими значениями в массиве языков.

Вернемся к нашему контроллеру. Следующее - настроить тег заголовка HTML для нашей страницы.

Внимательные читатели уже заметили, что мы использовали языковую переменную heading_title, определенную в языковом файле, созданном минуту назад.

Чтобы понять следующий фрагмент кода, нам нужно создать файл модели. Поэтому на мгновение я отвлеку вас на создание файла модели в catalog/model/guestbook/guestbook.php со следующим содержимым.

В OpenCart модель отвечает за обработку бизнес-логики приложения. Если вы хотите реализовать любую логику, которая включает базу данных, модель как раз для этого.

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

Вернемся к нашему контроллеру и рассмотрим следующий фрагмент кода в очереди.

Он проверяет действительный запрос POST и выполняет базовую проверку данных, отправленных пользователем, вызывая метод validate.

Код $this->load->model('guestbook/guestbook') используется для загрузки модели, которую мы определили мгновение назад. Сразу же после этого мы готовим массив $data на основе ввода пользователя и вызываем метод processGuestbookEntry, который уведомляет администратора магазина о новой записи в гостевой книге. Наконец, мы перенаправляем пользователя обратно на страницу ввода гостевой книги.

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

После этого есть фрагмент, который используется для создания набора ссылок для страницы.

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

Аналогично назначению переменных OpenCart инициализирует общие элементы заголовка страницы, нижнего колонтитула и тому подобного, как показано в следующем фрагменте.

Наконец, он вызывает шаблон представления, чтобы отобразить фактическую страницу!

Конечно, мы еще не создали шаблон представления. Это идеальное время для этого! Идем дальше и создаем  файл catalog/view/theme/default/template/guestbook/entry.tpl со следующим содержимым.

Это наш основной файл шаблона, который отвечает за отображение содержимого нашей страницы гостевой книги. В этом файле мы только что использовали переменные, которые были настроены в методе контроллера index.

Важно отметить, что отзывчивость - это то, что поставляется с новейшими версиями OpenCart, поддерживаемыми платформой Bootstrap. Помимо этого, это довольно обычный HTML, который довольно просто понять.

Итак, это то что касается настройки файлов.

У нас все готово, но как вы получите доступ к этому из front-end?

На фронтенде вы можете получить доступ к странице «Гостевая книга», добавив переменную переадресации маршрута, поэтому URL-адрес должен быть похож на http://your-opencart-store-url/index.php?route=guestbook/entry.

Давайте разбираться, как OpenCart сопоставляет любой URL-адрес с конкретным файлом контроллера. Формат переменной маршрута - {directory}/{filename}/{methodname}.

  • Компонент {directory} отображается в каталог catalog/controller.
  • {filename} сопоставляется с именем файла контроллера в catalog/controller/{directory}.
  • Наконец, он будет искать метод контроллера с именем {methodname}, если он указан в маршруте, иначе он вызовет метод index по умолчанию.‘

Вот как выглядит конечный результат.

Guestbook Page

Конечно, вы можете пойти дальше и протестировать его, отправив форму, и вы должны получить уведомление по электронной почте на адрес электронной почты, зарегистрированный в качестве администратора магазина.

Заключение

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

В этом процессе мы поняли, что речь идет не только о контроллерах - было несколько других ключевых элементов, которые были неизбежны. Поэтому мы также создали их: модель, язык и представление.

В конце было приятно видеть рабочий прецедент того, что я обещал в начале статьи. Итак, это все на сегодня, и не стесняйтесь оставлять свои вопросы и комментарии. Кроме того, я хотел бы услышать от вас, если есть какая-то конкретная тема, которую вы хотели бы мне предложить для моей следующей статьи!

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

Если вам понравилась эта статья, у меня есть еще несколько на всякий случай!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.