«Кактус CMS» поможет быстро создать и легко редактировать веб-сайт

Спецификация создания нового модуля

 

В данном документе "modname" является именем модуля.

 

Файлы модулей распологаются в двух директориях:

  • /modules/modname/* - пользовательские файлы (frontend)
  • /admin/modules/modname/* - файлы администрирования модуля, доступ защищен (backend)

Файлы каждого модуля находятся в директории, которая является его именем (не названием). Например, "/modules/price", имя модуля - "price". В директории модуля

могут содержаться любые файлы.

 

 

 

Пользовательские файлы

 

/modules/modname/big.php

Файл развёрнутого вида модуля, используется для отображения на центральной панели.


/modules/modname/small.php

Файл краткого вида модуля. Вставляется на правую или левую панель сайта. 

 

/modules/modname/mod_data.php

Файл с названием и версией модуля. Пример:

<?
$mod_title = array(
"ru" => "Контакты",
"en" => "Contacts",
);
$mod_version = "1.0.3";
?>

/modules/modname/module.css

CSS для модуля. Всегда подключается при отображении сайта, т.е. стили могут быть использованы в любом месте сайта,  даже из других модулей. Все названия стилей желательны в формате "имямодуля_названиестиля", например,  "price_header".


/modules/modname/icon.png

Файл иконки модуля для отображения в панели, для отображения прозрачности цветовая модель должна быть Indexed, не RGB.

 

/modules/modname/inheader.php

Файл будет включаться каждый раз при отображении любой страницы сайта до вывода какого-либо текста. Т.е. сюда можно помещать код связанный с HTTP редиректами, cookie и т.д.


/modules/modname/consts_descr.php

Описание настроек модуля на нескольких языках.

Пример:

<?
$CONST_DESCR = array(
"PRICE_PER_PAGE" => array(
"title" => array(
"ru" => "Позиций на странице",
"en" => "Positions on the page",
),
"description" => array(
"ru" => "По сколько позиций будут разбиваться страницы.",
"en" => "Paging value.",
)
),
);
?>

/modules/modname/lang.ru.php, lang.en.php, lang.*.php

Файлы с языковыми строковыми перменными. Но вам надо будет их самим подключать из big.php или small.php, например так:

include "lang.".$LANGS_SHORTNAMES[LANG].".php";

 

 

Обязательными файлами являются только "mod_data.php" и "icon.png", остальные создаются исходя из задач модуля.

 

Файлы "big.php", "small.php", "inheader.php" не требуют специального включения в себя "db.php" и "consts.php", все включения уже сделаны в "index.php".

Если из "small.php" надо сделать ссылку на "big.php" (а на сайте у "modules/modname/big.php" URL скорее всего не big.php, а просто "modname"), то надо сделать так:
$module_url = mysql_queryResultField("SELECT url FROM core_site_map WHERE module_name='$modname'");


 

 

Файлы администрирования

 

/admin/modules/modname/admin.php

Файл админиcтрирования модуля. Если существует, то ссылка на него появляется в меню панели управления в секции активных модулей (и если модуль активен). Также необходимо в этом файле включать header.php и footer.php для отображения в дизайне панели, а также для использования всех PHP и Javascript функций.

<? $_TITLE = "Modname title"; include $_SERVER["DOCUMENT_ROOT"]."/admin/header.php";?>

<? include $_SERVER["DOCUMENT_ROOT"]."/admin/footer.php";?>

 

/admin/modules/modname/install.php
Если желаете автоматизировать установку модуля, то здесь производятся установочные действия. Если файл существут, то появится  иконка "Уствновить" напротив модуля в панели. Как прило, файл содержит SQL скрипт создания скелета в базе для его работы (именно его таблиц). Иногда содержит скрипт добавления себя в карту сайта и константы. Никаких возвратов об ошибках или die() по ошибке, это лишнее.

Пример:

<?
mysql_batch("
CREATE TABLE IF NOT EXISTS `gallery2` (
`id_gallery` int(11) NOT NULL auto_increment,
`name` varchar(200) collate cp1251_bin NOT NULL,
`dir` varchar(200) collate cp1251_bin NOT NULL,
`descr` mediumtext collate cp1251_bin NOT NULL,
`count` int(11) NOT NULL default '0',
`n` int(11) NOT NULL,
PRIMARY KEY (`id_gallery`)
) ENGINE=InnoDB
");



$modname = "gallery2";
/*КОНСТАНТЫ*/
mysql_query("
INSERT INTO core_consts (module_name, const_name, value, `order`)
VALUES ('$modname', 'GAL2_COLS', '4', 1)
");
mysql_query("
INSERT INTO core_consts (module_name, const_name, value, `order`)
VALUES ('$modname', 'GAL2_SMALLIMG_SIZE', '150', 5)
");
mysql_query("
INSERT INTO core_consts (module_name, const_name, value, `order`)
VALUES ('$modname', 'GAL2_JPEG_QUALITY', '80', 10)
");


/*ДОБАВЛЕНИЕ В МЕНЮ*/
$site_map = mysql_query("SELECT COUNT(*) AS c FROM core_site_map WHERE module_name='$modname'") or die(mysql_error());
$row = mysql_fetch_array($site_map, MYSQL_ASSOC);
if (!$row["c"]){
include "{$_SERVER['DOCUMENT_ROOT']}/modules/$modname/mod_data.php";
$id_title = lang_insertValues(lang_convertArrayKey_Shortname2Index($mod_title));

mysql_query("
INSERT INTO core_site_map (url, file, id_title, in_menu, module_name)
VALUES ('$modname', 'modules/$modname/big.php', $id_title, '1', '$modname')
");

}

?>