Пробежимся еще раз по структуре модуля.
Полная конструкция модуля:
корень сайта
-admin(папка)
-modules(папка)
-mod_module_main(папка)
-backend.xml(файл настройки модуля, отображается в админке)
-languages(папка для языковых файлов)
-ru(соответственно русский язык)
-modules(папка языковых файлов модуля)
-mod_module_main.php (файл языковых ассоциаций)
-modules
-mod_module_main(папка)
-index.html (пустой индексный файл)
-install.php (обязательный файл для установки модуля)
-install.sql (запрос в базу для создания таблицы для модуля(не обязательно))
-module.php (само тело модуля)
-templates(папка)
-Ваш_шаблон(папка)
-modules(папка)
-mod_module_main.tpl(шаблон модуля)
Так же можно обойтись основной конструкцией:
корень сайта -modules -mod_module_main(папка) -index.html (пустой индексный файл) -install.php (обязательный файл для установки модуля) -module.php (само тело модуля)
Конструкция модуля подбирается соответственно потребностям самого модуля и желаниям разработчика, тоесть по желанию могут быть включенны языковые файлы, шаблон модуля и настройка. Основная конструкция должна присутствовать в любом случае.
Для примера создадим модуль который будет при определенном колличестве рейтинга его уменьшать, а так же модуль будет задавать загадку и при правильном ответе пользователя модуль будет добавлять рейтинг.
Начнем с инсталятора.
install.php
<?php function info_module_mod_module_main(){ //Заголовок (на сайте) $_module['title'] = 'Демо модуль для Wiki instantCMS'; //Название (в админке) $_module['name'] = 'Демо модуль для Wiki instantCMS'; //описание $_module['description'] = 'модуль будет при определенном колличестве рейтинга его уменьшать, будет задавать загадку и при правильном ответе пользователя модуль будет добавлять рейтинг'; //ссылка (идентификатор) $_module['link'] = 'mod_module_main'; //позиция $_module['position'] = 'sidebar'; //автор $_module['author'] = 'maix'; //текущая версия $_module['version'] = '1.9'; // Настройки по-умолчанию $_module['config'] = array(); $_module['config']['настройка1'] = '100'; $_module['config']['настройка2'] = '#ff0000'; $_module['config']['настройка3'] = 'yes'; $_module['config']['настройка4'] = '20'; return $_module; } function install_module_mod_module_main(){ $inCore = cmsCore::getInstance(); $inDB = cmsDatabase::getInstance(); $inConf = cmsConfig::getInstance(); //если нужно выполняем запрос из файла install.sql include($_SERVER['DOCUMENT_ROOT'].'/includes/dbimport.inc.php'); dbRunSQL($_SERVER['DOCUMENT_ROOT'].'/modules/mod_module_main/install.sql', $inConf->db_prefix); return true; } function upgrade_module_mod_module_main(){ return true; } ?>
теперь сам модуль:
module.php
<?php function mod_module_main($module_id){ $inCore = cmsCore::getInstance(); // подключаем ядро $inDB = cmsDatabase::getInstance(); // подключаем базу $inUser = cmsUser::getInstance(); //подключаем пользователей global $_LANG; //подключаем языковой файл $cfg = $inCore->loadModuleConfig($module_id); // подключаем настройки //если настройки не передались, задаем принудительно if (!isset($cfg['настройка1'])) { $cfg['настройка1'] = '100'; } if (!isset($cfg['настройка2'])) { $cfg['настройка2'] = '#ff0000'; } if (!isset($cfg['настройка3'])) { $cfg['настройка3'] = 'no'; } if (!isset($cfg['настройка4'])) { $cfg['настройка4'] = '20'; } $userid = $inUser->id; //id пользователя $login = $inUser->login; //логин пользователя $nickname = $inUser->nickname; //никнейм пользователя $admin = $inCore->userIsAdmin($inUser->id); //администратор $moderator = $inCore->userIsEditor($inUser->id); //модератор //код модуля echo $_LANG['MESSAGES_1'] ; echo '<br>' ; if ($cfg['настройка3'] == yes) { $sql = "SELECT rating FROM `cms_users` WHERE `id` = $userid "; $result = $inDB->query($sql); while ($user=$inDB->fetch_assoc($result)){ $rating = $user['rating']; } if ($rating >= $cfg['настройка1']) { $inDB->query("UPDATE cms_users SET rating = rating - ".$cfg['настройка4']." WHERE id = ".$userid.""); // отправляем личное сообщение $colormess = $cfg['настройка2']; $minus = $cfg['настройка4']; cmsUser::sendMessage(USER_UPDATER,$userid,"<b style='color: $colormess ;'>У вас слишком много рейтинга, поэтому мы решили его уменьшить на $minus баллов!<br>Претензии можете отправить Деду Морозу.</b><br>Администрация "); } } $otvetmodulemain = $inCore->request('otvetmodulemain'); //получаем ответ из формы в шаблоне if($otvetmodulemain == "осторожно"){ $inDB->query("UPDATE cms_users SET rating = rating + ".$cfg['настройка4']." WHERE id = ".$userid.""); //отправляем сообщение в сессию cmsCore::addSessionMessage('Вы правильно ответили на вопрос !', 'success'); // так же может быть : // cmsCore::addSessionMessage('текст сообщения', 'error'); // cmsCore::addSessionMessage('текст сообщения', 'info'); $mess = 1; } // передаем в шаблон переменные $smarty = $inCore->initSmarty('modules', 'mod_module_main.tpl'); $smarty->assign('LANG', $_LANG); // языковая переменная $smarty->assign('mess', $mess); $smarty->assign('ballrating', $cfg['настройка4']); $smarty->display('mod_module_main.tpl'); return true; } ?>
Дальше шлЕпаем шаблон:
mod_module_main.tpl
{*** солим, перчим по вкусу ***}
<link rel="stylesheet" type="text/css" href="/modules/mod_module_main/css/style1.css">
<script type="text/javascript" src="/modules/mod_module_main/js/script1.js"></script>
{*** если нужно прописать скрипт прямо в шаблоне модуля то обязательно нужно заключать в литерал ***}
{literal}
<script type="text/javascript">
{*** скрипт ***}
</script>
{/literal}
{if $mess == 1}
<div>Прибежал домовой и добавил вам {$ballrating} баллов рейтинга.</div>
{/if}
{$LANG.MESSAGES_2}
<form method=post valign=top >
<textarea name="otvetmodulemain" ></textarea>
<br>
<input type=submit value="ответ" >
</form>
Теперь создаем языковой файл:
mod_module_main.php
<?php if(!defined('VALID_CMS')) { die('ACCESS DENIED'); } $_LANG['MESSAGES_1'] = 'ДЕМО МОДУЛЬ'; $_LANG['MESSAGES_2'] = 'Как размножаются ежики ?'; ?>
И заканчиваем мы все это файлом настроек, который будет отображаться у нас в админке:
backend.xml
<?xml version="1.0" encoding="windows-1251"?> <backend> <module> <id>mod_module_main</id> <title>Демо модуль для Wiki instantCMS</title> </module> <params> <param type="number" name="настройка1" title="Колличество свыше которого будет идти вычитание" units="в рейтинге" default="100" /> <param type="string" name="настройка2" title="Цвет шрифта в личном сообщении" default="#ff0000" /> <param type="list" name="настройка3" title="Вычитание рейтинга включенно ?"> <option title="Да" value="yes" /> <option title="Нет" value="no" /> </param> <param type="number" name="настройка4" title="Сколько вычитать и прибавлять рейтинга" default="20" /> </params> </backend>
Ну вот, впринципе, и все.
Автор: Максим Шорин ICQ : 488074747