Пробежимся еще раз по структуре модуля.

Полная конструкция модуля:

корень сайта
-admin(папка)
  -modules(папка)
    -mod_module_main(папка)
      -backend.xml(файл настройки модуля, отображается в админке)
-languages(папка для языковых файлов)             
  -ru(соответственно русский язык)
    -modules(папка языковых файлов модуля)
      -mod_module_main.php (файл языковых ассоциаций)
-modules
 -mod_module_main(папка)
  -install.php (обязательный файл для установки модуля)
  -install.sql (запрос в базу для создания таблицы для модуля(не обязательно))
  -module.php (само тело модуля)
-templates(папка)
  -Ваш_шаблон(папка)
    -modules(папка)
      -mod_module_main.tpl(шаблон модуля)

Так же можно обойтись основной конструкцией:

корень сайта
-modules
 -mod_module_main(папка)
  -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']       = 'Автор модуля';
 
        //текущая версия
        $_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(){
 
        $inDB = cmsDatabase::getInstance();
 
        //если нужно выполняем запрос из файла install.sql
        $inDB->importFromFile(PATH . '/modules/mod_module_main/install.sql');
 
        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('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="utf-8"?>
<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>

Ну вот, в принципе, и всё.

Автор: Максим Шорин

 
разработка/модули/разработка_модуля_mod_module_main.txt · Последние изменения: 2015/02/10 15:55 От Aquarius