Популярное:


Яндекс.Метрика
А поделиться:

Создание модуля "с нуля"

Данное руководство научит вас создавать модули для системы.

Для интереса, создадим модуль блогов пользователей. По сути, это - контентный модуль.
Итак, начнем создание модуля. Для начала придумаем ему название (оно же ID).

Пусть это будет userblogs

Работаем с основным файлом модуля.

1. Создаем вы директории /modules/ папку userblogs

2. В папке modules/userblogs/ создаем файл userblogs.php следующего содержания:

class rcms_userblogs{
public $options=array();

function rcms_userblogs(&$options){$this->options=$options;}
function admin_menu(){}

function updatecontent($subcontent_id,$content){}
function addcontent($content){}
function delete_content($subcontent_id){}
    
}

Разумеется, не забываем про теги PHP

rcms_userblogs - в качестве параметров принимает ссылку на ассоциативный массив $options, содержащий настройки модуля.

function rcms_userblogs(&$options){$this->options=$options;}

Итак, далее по функциям файла userblogs.php

функция admin_menu

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

function admin_menu(){
global $rcms_menu;
$rcms_menu->addblock('userblogs','Пользовательские дневники');
}

Мы еще не определились с таблицей в базе данных. Теперь самое время это сделать.

Вы будете приятно удивлены тем, что наша табличка будет иметь очень скромный вид.

Например

'CREATE TABLE '.DB_PREF.'_c_userblogs (
`sid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`message` LONGTEXT NOT NULL
) ENGINE = InnoDB '
 
! rcms_ - префикс имени таблицы, Определен в файле /config.php в констенте DB_PREF
 
Как видите, у вас всего 2 поля, уникальное автоинкрементное sid и текстовое - message
 
А как же остальные поля? Дата публикации, ID пользователя, статус и т.п.?
А они определены в таблице content
Модуль контент делает бóльшую часть работы за вас.
 

Функция addcontent($content)

на вход получает ассоциативный массив, содержащий требуемые переменные (набор данных определяется в другом файле, admin.php)
на выходе возвращает уникальный идентефикатор субконтента. В нешем случае, значение поля sid таблицы rcms_с_userblogs
 
function addcontent($content){
    $message=trim(strip_tags($content['message'])); //в нашем случае пользователи не должны добавлять никакую HTML разметку. чисто plain текст
    $res=subd_query('insert into '.DB_PREF.'c_userblogs (message) values ("'.$message.'")');
    return ($res) ? mysql_insert_id() : 0;
}

! функция subd_query - обертка к mysql_query. Она берет на себя обязанности логина к базе и первоначальной настройке соединения.
 

 

Функция updatecontent($subcontent_id,$content)

Обновляет имеющийся субконтент.
На вход получает id субконтента и данные для обновления (ассоциативный массив, определяемый в admn.php)
 
function updatecontent($subcontent_id,$content){
    $message=trim(strip_tags($content['message']));
    $res=subd_query('update '.DB_PREF.'c_userblogs set message="'.$message.'" where sid='.$subcontent_id);
    }
 
на выходе - ничего.
 

Функция delete_content($subcontent_id)

Удаляет нужный субконтент.
 
function delete_content($subcontent_id){
    subd_query('delete from '.DB_PREF.'c_userblogs where sid='.$subcontent_id);
}
 
 

Теперь, разберемся с инсталляцией модуля.

эта часть будет немного посложнее.
 
файл install.php
 
function rcms_userblogs_install(){
global $rcms_main;
 
//создаем таблицу в базе
subd_query('CREATE TABLE '.DB_PREF.'_c_userblogs (
`sid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`message` LONGTEXT NOT NULL
) ENGINE = InnoDB ');



//добавляем блок меню
$rcms_main->insert_admenu('userblogs','userblogs','content','add','&module_id=userblogs','1110','Добавить запись в блог');
$rcms_main->insert_admenu('userblogs','','content','edit','&module_id=userblogs','1110','Редактировать запись');
$rcms_main->insert_admenu('userblogs','userblogs','content','showlist','&module_id=userblogs','1110','Список записей');
 
 
//добавляем модуль в список установленных модулей.
$rcms_main->insert_module('userblogs','Пользовательские блоги','Позволяет каждому пользователю вести личный дневник','0.1','http://www.richcms.ru/','http://www.richcms.ru/','Rich CMS',true);
 
последнее значение (true) - флаг, определяющий является ли устанавливаемый модуль контентным.

subd_query('update '.DB_PREF.'modules set installed=1 where id="userblogs"');
rcms_delete_cache_tree('modules_opt');
//включаем модуль.
}

 

Удаление модуля.

function rcms_userblogs_uninstall(){
subd_query('update '.DB_PREF.'modules set installed=0 where id="userblogs"');
rcms_delete_cache_tree('modules_opt');
}

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

 

Управление контентом модуля

Самое вкусное - под самый занавес :)

файл admin.php

3 функции

function rcms_userblogs_new(){
global $_POST;
return array('message'=>$_POST['message']);
}

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



function rcms_userblogs_edit(){
global $_POST;
return array('message'=>$_POST['message']);
}

эта функция формирует массив, отправляемый в функцию editcontent

на этом шаге можно обработать значения, выполнить проверку и т.п.


function rcms_userblogs_showeditform(&$out=array()){
echo '‹tr›‹td valign=top colspan=2›Ваше сообщение‹br /›
‹textarea cols=60 style="width:100%" rows=3 name="message"›'.$out['message'].'‹/textarea›‹/td›‹/tr›';
}

здесь дополнятся  форма ввода контента.

Обратите внимание, что нет ни тега открытия/закрытия таблицы, ни тега формы.

все это определено ранее в файле /modules/main/admin.php и это лучше не трогать :)

Итак, все три файла готовы

кстати, вы можете скачать готовый пример. загрузить «готовый модуль».
Последний штрих: инсталляция модуля.
- заходим в сайт/модули сайта
- ставим галочку возле userblogs
- нажимаем кнопку рядом с галочкой

модуль создан и проинициализирован.

Вы видите раздел "пользовательские дневники". Там можно создавать записи.
Модератор/администратор может видеть и редактировать все записи. Пользвоатель может видеть только свои записи.

 

Здесь - тестовое сообщение.


Добавить комментарий
Сообщение будет добавлено после проверки
Ваше имя:
E-mail:
Ваше сообщение
Запросов: 10