От автора: ранее мы начали рассматривать архитектуру OpenCart Модель-Представление-Контроллер — или MVC. В связи с этим мы создали наш первый Контроллер OpenCart «Hello World!». В предыдущей статье я только в общем рассказал об этом. Надеюсь, вы попробовали самостоятельно создавать контроллеры, так как сейчас мы рассмотрим этот вопрос более предметно. Но сначала давайте посмотрим, о чем пойдет речь в этой статье.
Написание реального Контроллера
Загрузка языков
Загрузка и использование библиотек
Чит-лист библиотек
Создание Представления
Создание Модели
Управление Моделью с помощью Контроллера
Заключение
Написание реального Контроллера
С помощью OpenCart MVC Framework мы создадим простую форму. Для этого нужно сначала создать Контроллер. До этого я уже создал папку forms в catalog/controller. Примечание. Пользователи Mac и Linux — не забудьте изменить права доступа для каталога на 775. Внутри каталога forms я создал файл myform.php. Теперь давайте добавим в него код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
<?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 позволяет легко работать с языками. В приведенном выше примере использовались жестко закодированные тексты языков. Но рекомендуется использовать текстовые операторы.
Чтобы загрузить язык, используйте $this->language->load(маршрут пути к языку);, а для получения данных конкретного языка используется такой синтаксис $this->language->get(ключевое слово данных языкового файла);.
Обратите внимание — настоятельно рекомендуется создавать языковой файл для каждого контроллера и страницы. Путь к языку должен быть таким же, как для контроллера.
Загрузка и использование библиотек
Для удобства разработчиков платформа содержит несколько предустановленных библиотек. Они могут располагаться в каталоге /system/library. Библиотеки можно загружать непосредственно в контроллер с помощью синтаксиса: $this->library_name->method_name().
Ранее мы рассмотрели несколько библиотек, поэтому вы можете работать с ними с помощью своего кода. Некоторые чит-лист доступны следующим образом:
Библиотека Корзины
1 2 3 4 5 6 7 8 9 10 |
$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, если ни одного товара нет в наличии |
Библиотеки Конфигурации
1 2 3 4 5 6 7 8 9 10 |
$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, если доступен список валют |
Библиотека Клиентов
1 2 3 4 5 6 7 8 9 10 11 |
$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() ; // Возвращает идентификатор Группы Активного пользователя |
Библиотека базы данных
1 2 3 |
$this->db->query($sql) // Выполняет запрос MySQL и возвращает количество строк $this->db->escape($value); // Очищает Значение и делает его безопасным для использования в базе данных $this->db->getLastId($sql); //Возвращает последний добавленный идентификатор из последнего запроса |
Библиотека документов
1 2 3 4 5 6 7 8 9 10 |
$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. Теперь создайте файл с таким именем и поместите в него следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?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.
1 2 3 4 5 6 7 8 9 |
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 и поместите в него следующий код:
1 2 3 4 5 6 7 8 9 10 11 |
<?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; } } ?> |
Управление Моделью с помощью Контроллера
Таким образом, окончательный код контроллера будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
<?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
Источник: //code.tutsplus.com/
Редакция: Команда webformyself.