OpenCart — от новичка до профессионала: подробнее об MVC

OpenCart — от новичка до профессионала: подробнее об MVC

От автора: ранее мы начали рассматривать архитектуру OpenCart Модель-Представление-Контроллер — или MVC. В связи с этим мы создали наш первый Контроллер OpenCart «Hello World!». В предыдущей статье я только в общем рассказал об этом. Надеюсь, вы попробовали самостоятельно создавать контроллеры, так как сейчас мы рассмотрим этот вопрос более предметно. Но сначала давайте посмотрим, о чем пойдет речь в этой статье.

Написание реального Контроллера

Загрузка языков

Загрузка и использование библиотек

Чит-лист библиотек

Интернет-магазин на OpenCart!

Создайте интернет-магазин на самой популярной CMS – OpenCart с нуля!

Приступить к созданию

Создание Представления

Создание Модели

Управление Моделью с помощью Контроллера

Заключение

Написание реального Контроллера

С помощью OpenCart MVC Framework мы создадим простую форму. Для этого нужно сначала создать Контроллер. До этого я уже создал папку forms в catalog/controller. Примечание. Пользователи Mac и Linux — не забудьте изменить права доступа для каталога на 775. Внутри каталога forms я создал файл myform.php. Теперь давайте добавим в него код:

<?php
class ControllerFormsMyform extends Controller{ 
 
 public function index() 
 {
 $this->document->settitle('My Form'); // Для установки Тайтла страницы
 $this->data['breadcrumbs'] = array(); // Инициализируем массив Хлебных крошек 
 
 $route = $this->request->get['route']; // Получаем "маршрут" URL-адреса, используя метод GET
 
 // Создаем Хлебные крошки, связанные с главной страницей
 $this->data['breadcrumbs'][] = array(
 'text' => 'Home',
 'href' => $this->url->link('common/home'), // путь маршрута на главную страницу
 'separator' => false
 );
 // Привязываем текущую страницу к хлебным крошкам
 $this->data['breadcrumbs'][] = array(
 'text' => 'My Form',
 'href' => $this->url->link($route), // путь маршрута к текущему url
 'separator' => '| ' //Символ разделителя для Хлебных крошек
 );
 
 //Конец Хлебных крошек
 
 $this->data['form_heading'] = 'My Form Heading'; // Используем ключевое слово $this->data для обработки данных контроллера для представления
 $this->data['first_value'] = 'Firstname: ';
 $this->data['second_value'] = 'Lastname: ';
 $this->data['third_value'] = 'Passport No.: ';
 $this->data['forth_value'] = 'Phone No.: ';
 
 $this->data['continue'] = $this->url->link('common/home'); // Данные ссылки для кнопки "Далее"
 $this->data['button_continue'] = 'Continue'; // Текст ссылки для кнопки "Далее"
 
 // Добавляем дочерние элементы для Страницы: шапку, футер, столбцы
 $this->children = array(
 'common/column_left',
 'common/column_right',
 'common/content_top',
 'common/content_bottom',
 'common/footer',
 'common/header'
 );
 
 $this->template = 'default/template/forms/myform.tpl'; //Привязываем файл шаблона / представления для Пользовательского интерфейса
 
 $this->response->setoutput($this->render()); // Отображаем Шаблон
 }
 
 
}
 
?>

Просмотрите этот код и попробуйте создать такой контроллер.

Загрузка языков

OpenCart позволяет легко работать с языками. В приведенном выше примере использовались жестко закодированные тексты языков. Но рекомендуется использовать текстовые операторы.

Интернет-магазин на OpenCart!

Создайте интернет-магазин на самой популярной CMS – OpenCart с нуля!

Приступить к созданию

Чтобы загрузить язык, используйте $this->language->load(маршрут пути к языку);, а для получения данных конкретного языка используется такой синтаксис $this->language->get(ключевое слово данных языкового файла);.

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

Загрузка и использование библиотек

Для удобства разработчиков платформа содержит несколько предустановленных библиотек. Они могут располагаться в каталоге /system/library. Библиотеки можно загружать непосредственно в контроллер с помощью синтаксиса: $this->library_name->method_name().

Ранее мы рассмотрели несколько библиотек, поэтому вы можете работать с ними с помощью своего кода. Некоторые чит-лист доступны следующим образом:

Библиотека Корзины

$this->cart->getProducts(); //Получает все товары, доступные в Корзине
$this->cart->add( $product_id, $qty = 1, $options = array()); // Добавить товар в Корзину
$this->cart->remove( $key ); // Удалить товар из Корзины
$this->cart->clear(); // Очистить Корзину
$this->cart->getWeight(); // Возвращает сумму по товарам в корзине
$this->cart->getSubTotal(); // Возвращает предварительную сумму по всем товарам в корзине
$this->cart->getTotal() ; // Возвращает полную сумму по всем товарам в Корзине
$this->cart->countProducts() ; // Возвращает количество товаров, доступных в Корзине
$this->cart->hasProducts(); // Возвращает true, если в Корзине доступен хотя бы один товар
$this->cart->hasStock(); // Возвращает false, если ни одного товара нет в наличии

Библиотеки Конфигурации

$this->config->get($key); //Возвращает по ключевому слову настройки, исходя из приложения (каталог или панель администрирования)
$this->config->set($key, $value); // Устанавливает и переназначает значение параметра. (Не сохраняет его в базе данных)
CURRENCY
$this->currency->set($currency); // Устанавливает и переназначает код валюты по умолчанию, которая используется в Сессии
$this->currency->format($number, $currency = '', $value = '', $format = TRUE); // Задает формат Валюты
$this->currency->convert($value, $from, $to); // Конвертирует значение валюты в другую валюту
$this->currency->getId(); // Получает идентификатор текущей валюты
$this->currency->getCode() ; // Возвращает код валюты для текущей валюты
$this->currency->getValue($currency); // Возвращает курс обмена для предоставленной валюты
$this->currency->has(currency); // Возвращает true, если доступен список валют 

Библиотека Клиентов

$this->customer->login($email, $password); // Вход в профиль Клиента
$this->customer->logout(); // Выход из профиля Клиента
$this->customer->isLogged(); // Возвращает true, если Пользователь авторизован
$this->customer->getId(); //Возвращает идентификатор текущего авторизованного пользователя
$this->customer->getFirstName() // Возвращает Имя текущего авторизованного пользователя
$this->customer->getLastName() // Возвращает Фамилию текущего авторизованного пользователя
$this->customer->getEmail() ; // Возвращает адрес электронной почты текущего авторизованного пользователя
$this->customer->getTelephone() ; // Возвращает Телефон Активного пользователя
$this->customer->getFax() ; // Возвращает Номер факса Активного пользователя
$this->customer->getNewsletter() ; // Возвращает статус подписки на электронную рассылку
$this->customer->getCustomerGroupId() ; // Возвращает идентификатор Группы Активного пользователя

Библиотека базы данных

$this->db->query($sql) // Выполняет запрос MySQL и возвращает количество строк
$this->db->escape($value); // Очищает Значение и делает его безопасным для использования в базе данных
$this->db->getLastId($sql); //Возвращает последний добавленный идентификатор из последнего запроса

Библиотека документов

$this->document->setTitle($title); //Устанавливает Тайтл страницы
$this->document->getTitle(); // Получает Тайтл страницы
$this->document->setDescription($description); // Устанавливает Дескрипшен страницы
$this->document->getDescription(); // Получает Дескрипшен страницы
$this->document->setKeywords(); // Устанавливает ключевые слова для страницы
$this->document->getKeywords(); // Получает ключевые слова для страницы
$this->document->addStyle( $href, $rel = 'stylesheet', $media = 'screen' ); // Добавляет в документ таблицу стилей
$this->document->getStyles(); // Получает стили страницы
$this->document->addScript( $script ); // Добавляет в документ скрипты
$this->document->getScripts(); // Получает скрипты страницы

Создание представления

В OpenCart доступны шаблоны, которые используются для представлений. В приведенном выше контроллере мы указали расположение файла представления темы theme/default/template/forms/myform.tpl. Теперь создайте файл с таким именем и поместите в него следующий код:

<?php echo $header; ?><?php echo $column_left; ?><?php echo $column_right; ?>
<div id="content"><?php echo $content_top; ?>
  <div class="breadcrumb">
 <?php foreach ($breadcrumbs as $breadcrumb) { ?>
 <?php echo $breadcrumb['separator']; ?><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a>
 <?php } ?>
  </div>
  <h1><?php echo $form_heading; ?></h1>
 <div>
 <form name="frm" method="POST" action="">
 <table  border="0">
 <tr>
 <td width="30%"><?php echo $first_value;?></td>
 <td width="70%"><input type="text" name="first_value" /></td>
 
 </tr>
 <tr>
 <td ><?php echo $second_value;?></td>
 <td ><input type="text" name="second_value" /></td>
 
 </tr>
 <tr>
 <td ><?php echo $third_value;?></td>
 <td ><input type="text" name="third_value" /></td>
 
 </tr>
 <tr>
 <td ><?php echo $forth_value;?></td>
 <td ><input type="text" name="forth_value" /></td>
 
 </tr>
 
 </table>
 <div class="buttons">
 <div class="right"><input type="submit" class="button" value="<?php echo $button_continue; ?>" /></div>
  </div>
 </form>
 
 </div>
 
  <?php echo $content_bottom; ?></div>
<?php echo $footer; ?>

Создание Модели

Модель поддерживает взаимодействие с базой данных и ее объектами. Поэтому, прежде чем начинать работу с моделью, перейдите в phpMyAdmin, выберите базу данных своего магазина (т. е. storedb) и выполните следующие инструкции в панели SQL.

CREATE TABLE `oc_myforms` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_value` varchar(80) DEFAULT NULL,
  `second_value` varchar(80) DEFAULT NULL,
  `third_value` varchar(80) DEFAULT NULL,
  `forth_value` varchar(80) DEFAULT NULL,
  `date_added` datetime DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

«oc» — это префикс таблицы, используйте собственный префикс базы данных. Теперь пришло время создать собственную модель. Цель создания модели — сохранение данных формы в базе данных. Поэтому давайте создадим нашу первую модель. Создайте в папке catalog/model/forms/ файл myforms.php и поместите в него следующий код:

<?php
class ModelFormsMyform extends Model {
 public function saveData($data_array) {
 
 $this->db->query("INSERT INTO " . DB_PREFIX . "myforms SET first_value='".$this->db->escape($data_array['first_value'])."' ,second_value='".$this->db->escape($data_array['second_value'])."',third_value='".$this->db->escape($data_array['third_value'])."',forth_value='".$this->db->escape($data_array['forth_value'])."',date_added=NOW() ");
 
 $form_id = $this->db->getLastId(); // Returns last inserted id
 return $form_id;
 }
}
?>

Управление Моделью с помощью Контроллера

Таким образом, окончательный код контроллера будет выглядеть так:

<?php
class ControllerFormsMyform extends Controller{ 
 
 public function index() 
 {
 
 if (($this->request->server['REQUEST_METHOD'] == 'POST')) {
 
 
 $this->load->model('forms/myform'); //маршрут пути без .php 
 
 $form_id = $this->model_forms_myform->saveData($this->request->post); //Parse all the posted data
 
 if($form_id)
 {
 $this->redirect($this->url->link('forms/myform')); //Снова перезагружаем форму 
 
 }
 }
 
 $this->document->settitle('My Form'); // Для установки Тайтла страницы
 $this->data['breadcrumbs'] = array(); // Инициализируем массив Хлебных крошек 
 $route = $this->request->get['route']; // Получаем "маршрут" URL-адреса, используя метод GET
 
 // Создаем Хлебные крошки, связанные с главной страницей
 $this->data['breadcrumbs'][] = array(
 'text' => 'Home',
 'href' => $this->url->link('common/home'), // путь маршрута на главную страницу
 'separator' => false
 );
 // Привязываем текущую страницу к хлебным крошкам
 $this->data['breadcrumbs'][] = array(
 'text' => 'My Form',
 'href' => $this->url->link($route), // путь маршрута к текущему url
 'separator' => '| ' //Символ разделителя для Хлебных крошек
 );
 
 //Конец Хлебных крошек
 
 $this->data['form_heading'] = 'My Form Heading'; // Используем ключевое слово $this->data для обработки данных контроллера для представления
 $this->data['first_value'] = 'Firstname: ';
 $this->data['second_value'] = 'Lastname: ';
 $this->data['third_value'] = 'Passport No.: ';
 $this->data['forth_value'] = 'Phone No.: ';
 
 $this->data['continue'] = $this->url->link('common/home'); // Данные ссылки для кнопки "Далее"
 $this->data['button_continue'] = 'Continue'; // Текст ссылки для кнопки "Далее"
 
 // Добавляем дочерние элементы для Pages: шапку, футер, столцы
 $this->children = array(
 'common/column_left',
 'common/column_right',
 'common/content_top',
 'common/content_bottom',
 'common/footer',
 'common/header'
 );
 
 $this->template = 'default/template/forms/myform.tpl'; //Привязываем файл шаблона / представления для Пользовательского интерфейса
 
 $this->response->setoutput($this->render()); // Отображаем Шаблон
 }
 
 
}
 
?>

Таким образом, условный оператор будет проверять, существуют ли какие-либо данные, передаваемые из метода POST. Если да, то будет происходить их запись в базу данных. Обратите внимание, что вы можете добавить собственную валидацию для данных POST.

Заключение

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

Автор: Zaman Riaz

Источник: http://code.tutsplus.com/

Редакция: Команда webformyself.

Интернет-магазин на OpenCart!

Создайте интернет-магазин на самой популярной CMS – OpenCart с нуля!

Приступить к созданию
Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Интернет-магазин на OpenCart

Создание магазина с уникальным шаблоном на CMS OpenCart

Научиться

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

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

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

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree