В предыдущей статье вы узнали об основах Fuel CMS: как создавать представления и простые страницы. Большинство веб-сайтов в наши дни не так просты, у них есть блог, галерея и т. Д. В этой части я объясню, как работают модули Fuel CMS, и создам базовый модуль гостевой книги для демонстрации.
Что такое модули?
Большая часть функциональности Fuel CMS упакована в модули. Модуль Fuel CMS содержит как минимум одну модель с прилагаемой таблицей базы данных и может быть дополнен контроллерами и представлениями.
В шаблоне MVC модели — это классы, которые определяют различные поля данных и используются для работы с данными, хранящимися в таблицах. Для получения дополнительной информации о моделях в CodeIgniter (каркас, в котором написано Fuel CMS), см . Документацию каркаса .
В стандартной установке Fuel CMS стандартные модули включены по умолчанию. Например, система блогов состоит из трех модулей: сообщений, категорий и авторов. Каждый из этих модулей имеет свою таблицу в вашей базе данных. В этой статье мы создадим наш собственный модуль гостевой книги. Каждый может оставлять новые комментарии, а администратор может модерировать их через меню администрирования.
Написание модели
Начните с создания каталога modules/guestbook
. Отныне я буду называть этот каталог «папкой гостевой книги».
Чтобы зарегистрировать модуль, откройте application/config/MY_fuel_modules.php
и добавьте следующую строку в:
<?php $config['modules']['guestbook'] = array( 'model_name' => 'guestbookcomments_model', 'model_location' => 'guestbook' );
Мы установили ключ model_name с именем файла модели (который мы вскоре создадим) и ключ model_location с именем нового каталога. Топливная CMS теперь будет искать модель в модулях / гостевой книге / моделях. (См. Руководство пользователя Fuel CMS для полного списка параметров .)
Затем создайте таблицу гостевой книги в вашей базе данных с помощью следующего SQL:
CREATE TABLE IF NOT EXISTS guestbook_comments ( id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, author VARCHAR(25) NULL NULL, comment VARCHAR(100) NOT NULL, `date` DATETIME NOT NULL, visible ENUM('yes', 'no') NOT NULL DEFAULT 'yes', PRIMARY KEY (id) );
Назначение каждого столбца должно быть четким на основании названий; В таблице хранятся комментарии гостевой книги с именем автора комментария, датой, а также с тем, является ли запись видимой или нет ( visible
столбец является специальным для Fuel CMS).
Теперь давайте обратим наше внимание на создание класса модели, который действует как своего рода переводчик между PHP и базой данных. Перейдите в папку гостевой книги и создайте в ней новый каталог с именем models
. Затем добавьте в него файл модели с именем guestbookcomments_model.php
:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); require_once(FUEL_PATH . 'models/base_module_model.php'); class GuestbookComments_model extends Base_module_model { public function __construct() { parent::__construct('guestbook_comments'); } } class GuestbookComment_model extends Base_module_record { }
Это только основа для нашего модуля. GuestbookComments_model
расширяет класс Base_module_model
который будет автоматически обрабатывать наши Base_module_model
и административные взаимодействия. Строка, переданная в родительский конструктор, является именем таблицы базы данных, которую будет использовать эта модель. GuestbookComment_model
расширяет Base_module_record
который обрабатывает работу с отдельными записями.
Если вы хотите, вы можете проверить его и посмотреть, работает ли он, войдите в свою панель и выберите «Гостевая книга» в подменю «Модули». Обычно это был бы список комментариев, но поскольку у нас еще нет данных, список пуст, поэтому нажмите кнопку «Создать», чтобы добавить один.
Когда вы вернетесь к списку, вы должны увидеть только что добавленный комментарий. Поскольку все больше и больше людей будут оставлять комментарии в гостевой книге, это место, куда вы будете заходить, чтобы модерировать их и держать свою гостевую книгу свободными от спама.
Создание контроллера
Это все очень круто и так далее, но вы, очевидно, не хотите быть единственным человеком, который может добавлять комментарии! Нам нужно создать контроллер для обработки публичных действий.
Создайте controllers
каталогов в папке guestbook, а затем создайте файл guestbook.php
со следующим:
<?php class Guestbook extends CI_Controller { function view() { echo '<h1>Guestbook</h1>'; $this->load->module_model('guestbook', 'GuestbookComments_model'); $comments = $this->GuestbookComments_model->find_all(); foreach ($comments as $comment) { echo '<h2>' . $comment->author . '</h2>'; echo $comment->comment; } } }
Вы можете получить доступ к действиям контроллера, используя имя контроллера, а затем имя действия в URL. Итак, чтобы увидеть представление, перейдите по адресу http: // localhost / guestbook / view (или какому бы ни был ваш адрес разработки) в вашем браузере.
Большая часть кода, используемого в контроллере, является CodeIgniter, за исключением метода module_model()
. Первый аргумент — это имя каталога модулей, в нашем случае «guestbook», а второй аргумент — имя класса нашей модели, который расширил Base_module_model
.
После того, как мы зарегистрировали модель нашего модуля, мы используем его метод find_all()
и перебираем результаты для их отображения. (Желательно использовать представление вместо логики отображения в вашем контроллере, но я хочу, чтобы все было просто ради этой статьи.)
Гостевая книга не очень полезна без возможности добавить новый комментарий, не так ли? Добавьте новый метод в контроллер:
<?php public function add() { $this->load->library( 'form_builder', array( 'id'=>'addComment', 'form_attrs' => array( 'method' => 'post', 'action' => 'newcomment' ), 'submit_value' => 'Add new comment', 'textarea_rows' => '5', 'textarea_cols' => '28' ) ); $fields = array( 'name' => array( 'label' => 'Full Name', 'required' => true ), 'comment' => array( 'type' => 'text', 'label' => 'Comment', 'required' => true ) ); $this->form_builder->set_fields($fields); echo $this->form_builder->render(); }
Теперь, когда мы заходим в http: // localhost / guestbook / add, мы должны увидеть форму.
Мы использовали конструктор форм Fuel CMS, чтобы все выглядело аккуратно и аккуратно, а сами не писали HTML. Сначала мы загружаем библиотеку form_builder, а затем передаем ей несколько аргументов для определения свойств и элементов формы. Проверьте документацию для полного списка.
Действие формы ‘newcomment’, поэтому нам нужно создать новый метод в контроллере для обработки отправки формы:
<?php public function newcomment() { $this->load->module_model('guestbook', 'GuestbookComments_model'); $comment = $this->GuestbookComments_model->create(); $comment->author = $this->input->post('name'); $comment->date = date('Ymd G:i:s'); $comment->comment = $this->input->post('comment'); $comment->save(); echo 'comment successfully added'; }
Мы загружаем модель гостевой книги, назначаем входящие данные ее членам, а затем сохраняем их в базе данных. Наконец, выдается сообщение об успехе, в котором говорится, что все было добавлено в базу данных.
Резюме
Как вы видели, Fuel CMS не предоставляет готовых решений для многих вещей, как для больших платформ CMS; многое оставлено на усмотрение разработчика. Но, к счастью, это не сложно благодаря инфраструктуре CodeIgniter и вспомогательным библиотекам Fuel CMS.
Изображение через Fotolia