cms4site™ :: Руководство разработчика
cms4site™ система построения сайтов и управления контентом 3.5.11
 D91RU 



cms4site™ :: Руководство разработчика
[2]



ОГЛАВЛЕНИЕ

          МАССИВЫ И КОНСТАНТЫ         3
          МОДУЛИ         6
                    Общие         6
                    Администратора         6
          ФУНКЦИИ         7
                    Процессор контента         7
                    Функции модуля погоды         7
                    Многоязыковая поддержка         8
                    Функция модуля валют         8
                    Движок сайта         8
                    Функции модуля xmmstandard         10
                    Функции авторизации         11
                    Функции модуля каталога         11
                    Вызов страницы с модулем xmmmysite         11
                    Полный список функций         12
          РАЗРАБОТКА САЙТА         13
                    Активизация дистрибутива         13
                    Начальный шаблон         13
                    Настройки модулей         14
          ПРАКТИЧЕСКИЕ РЕКОМЕНДАЦИИ         15
                    Пример построения меню         15
                    Прямое включение модулей         15
                    Хранение даты и времени         15
                    Разные меню для одного уровня         16
                    Настройки для отдельной страницы         16
                    Контент из родительского уровня         17
                    Автоматическое формирование заголовка         17
                    Подстановка коллажей         18
                    Поддиректории         18
©2000-2008 cms4site group. All rights reserved
http://web.demos-spb.ru,


cms4site™ :: Руководство разработчика
[3]



МАССИВЫ И КОНСТАНТЫ



$xmmmaxlevel

Переменная показывает максимальное число уровней (вложенность) сайта.

$xmmcurrent

Переменная показывает индекс текущей страницы в $XMMGENERAL.

$thislanguage

Переменная содержит двухсимвольное обозначение текущего языка.

$xmcparameter

При вызове функционального модуля содержит строку параметров вызова.

$xmmgeneral

Массив содержит все элементы структуры сайта в той последовательности, в какой они там заданы. Закомментированные страницы не входят в массив.

Array[] -> Array[name] -> value;
$ELEMENT = $XMMGENERAL[$i]; $VALUE = $ELEMENT[$name];

$xmmlevels

Массив содержит систему меню всех уровней (level) для текущей страницы.

array[level] -> array[] -> array[name] -> value;
$MENU = $XMMLEVELS[$level]; $ELEMENT = $MENU[$i]; $VALUE = $ELEMENT[$name];

Элементы массивов XMMGENERAL и XMMLEVELS доступны по ключу (name):

  • "line" - порядковый номер строки в исходном файле (для диагностики);
  • "level" - номер уровня;
  • "next" - признак "прыжка" (X - прыжок, T - нормальный);
  • "self" - индекс страницы в массиве XMMGENERAL;
  • "parentindex" - индекс родительской страницы в массиве XMMGENERAL (-1 для страниц уровня 0);
  • "link" - вызов страницы в тэге <A HREF=>;
  • "call" - вызов страницы внутри системы;
  • "data" - путь для имени файла данных;
  • "id" - идентификатор страницы;
  • "name" - имя страницы;
  • "info" - пояснения для страницы;
  • "dataN" - дополнительные поля данных в структуре сайта (N начинается с 1);
  • "current" - признак текущей страницы (1 - текущая, 2 - родительская для текущей, 0 - другая).

$xmcarray

Массив содержит строки файла контента в момент вызова функции разработчика через xmcengine().

array[] -> array[data]
$LINE = $XMCARRAY[$i]; $DATA = $LINE["data"] $FLAGS = $LINE["flags"]

$xmmthisisprintversion

Логическая переменная, содержит true при вызове движка сайта в режиме версии для печати, false в противном случае.


cms4site™ :: Руководство разработчика
[4]



$xmcmask

Приведены элементы массива xmcmask, используемые как шаблоны для вывода объектов, определенных Процессором контента. CONTENT, FIRST, SECOND, LAST, XTRA - поля для подстановки, указываемые в шаблоне как %%ИМЯ%%, например:
$XMCMASK["tableimage"] = '<IMG SRC="%%CONTENT%%" %%LAST%% BORDER=0
WIDTH=%%FIRST%% HEIGHT=%%SECOND%%>';


ИмяОписаниеCONTENTFIRSTSECONDLASTXTRA
beforeвыводится перед всем остальным выводом     
afterвыводится после всего вывода     
emptyпустая строка     
bodytextобычная строкастрока    
allcapsвсе прописныестрока    
filephpвызов php-модуляпараметры    
fileфайл, не определенный иначеимя файла    
listbeginначало списка первого уровня     
listelementэлемент списка первого уровнястрока    
list2elementэлемент списка второго уровнястрока    
listendконец списка первого уровнястрока    
list2endконец списка второго уровнястрока    
numlistxbeginначало нумерованного списка     
numlistxelementэлемент нумерованного спискастрока    
numlistxendконец нумерованного спискастрока    
filegifизображение в формате gifимя файлапараметрыхарактеристики  
filejpgизображение в формате jpgимя файлапараметрыхарактеристики  
filepngизображение в формате pngимя файлапараметрыхарактеристики  
tableimageизображение внутри ячейки таблицыимя файлаширинавысотапараметры 
linkimageизображение как объект ссылкиимя файлаширинавысотапараметры 
bracketedimageизображение внутри квадратных скобокимя файлаширинавысотапараметры 
filegifpopupgif в отдельном окнеимя файлаширинавысотаобъекттекст
filejpgpopupjpg в отдельном окнеимя файлаширинавысотаобъекттекст
filepngpopuppng в отдельном окнеимя файлаширинавысотаобъекттекст
fileexeфайл exeимя файларазмердататекст 
filezipфайл zipимя файларазмердататекст 
filepdfфайл pdfимя файларазмердататекст 


cms4site™ :: Руководство разработчика
[5]



ИмяОписаниеCONTENTFIRSTSECONDLASTXTRA
tablebeginначало таблицы     
tableendконец таблицы     
tablerowbeginначало строки таблицы     
tablerowendконец строки таблицы     
tablecellячейка нечетной строкиячейкаячейка1ячейка2посл.ячейка 
tablecell2ячейка четной строкиячейкаячейка1ячейка2посл.ячейка 
tablecellspanallобъединенная на всю строку ячейкаячейкаcolspan   
tablecellfirstячейка первой колонки нечетной строкиячейкаячейка1ячейка2посл.ячейка 
tablecellfirst2ячейка первой колонки четной строкиячейкаячейка1ячейка2посл.ячейка 
tablecellsecondячейка второй колонки нечетной строкиячейкаячейка1ячейка2посл.ячейка 
tablecellsecond2ячейка второй колонки четной строкиячейкаячейка1ячейка2посл.ячейка 
tablecelllastячейка последней колонки нечетной строкиячейкаячейка1ячейка2посл.ячейка 
tablecelllast2ячейка последней колонки четной строкиячейкаячейка1ячейка2посл.ячейка 
tablecellfirstrowячейка первой строки таблицыячейкаячейка1ячейка2посл.ячейка 


cms4site™ :: Руководство разработчика
[6]



МОДУЛИ


Общие

xmmauthcontent.php* - информационные функции системы авторизации
xmmauthorize.php - система авторизации
xmmcalendar.php* - календарь
xmmcms4site.php - интегрированный движок сайта (кроме сжатия выходного потока)
xmmcollect.php* - вывод подменю
xmmcontent.php - процессор контента
xmmcontentcheck.php* - проверка контента
xmmcurrency.php* - кросс-курсы валют по ЦБРФ
xmmdatetime.php* - дата и время
xmmdatetime.show.php - демо-функция определения часового пояса
xmmdatetime.template.php* - шаблон для вызова xmmdatetime.show.php
xmmdirlist.php* - оглавление директорий
xmmdmenu.php - динамическое меню
xmmecat.php* - каталог продукции с навигацией и поиском
xmmecatprod.php - вывод описания продукции из каталога
xmmengine.php - движок сайта
xmmformsender.php* - формоотправитель
xmmgblight.php* - гостевая книга
xmmgetfile.php - скачивание файла в прозрачном режиме
xmmguest.php* - проба контента
xmminner.php* - внутренняя навигация
xmmishow.php - показ изображения
xmmlocale.php - многоязыковая поддержка
xmmnewsline.php* - новости
xmmobflush.php - закрытие буферизации
xmmobstart.php - открытие буферизации
xmmorder.js.php - корзина заказа
xmmorder.php* - корзина заказа
xmmorderbasket.php* - корзина заказа
xmmorderitem.php* - корзина заказа по отдельному товару
xmmorderprint.php - распечатка корзины заказа
xmmpoll.php* - опрос
xmmprevnext.php* - пердыдущий/следующий
xmmquiz.php* - приз
xmmrandom.php* - выборка
xmmscript.js - javascript-программы
xmmsearch.php* - поиск
xmmsitemap.php* - карта сайта
xmmstandard.php - стандартные функции
xmmstatcounter.php - вывод счетчика
xmmtemplate.php* - вывод по шаблону
xmmthumbnail.php - изображение предпросмотра
xmmtoplevel.php* - ветка страницы
xmmvacancy.php* - список вакансий фирмы
xmmversion.php - версия cms4site™
xmmweather.php - прогноз погоды по городам

* - могут вызываться в файлах контента или из структуры сайта.

Администратора

mds.php, service.php - редактор MySQL
phpinfo.php - информация РНР
xmmcsv2dat.php - конвертер csv-dat
xmmwindow.php - просмотр изображения в отдельном окне
xmmeditor.php - редактор текста
xmmhtm2dat.php - конвертер htm-dat
xmmhtm2htm.php - конвертер html-htm
xmmimages.php - выбор изображений
xmmmystat.php - обработка статистики
xmmstat.php - сбор статистики
xmmstatlog.php - журнал посещений
xmmtree.php - работа со структурой сайта
xmmupdate.php - администратор
xmmbrowser.php - текстовый броузер



cms4site™ :: Руководство разработчика
[7]



ФУНКЦИИ


Процессор контента

XMCEngine($file[,$userfunction])
Чтение, обработка и вывод файла контента. При успешном выводе возвращает TRUE, в противном случае - FALSE (как правило, если файл не найден или пустой).
$file - полное имя файла контента, может быть получено по xmcfilename().
$userfunction - имя функции разработчика, получающей управление после чтения файла контента и замены констант. Должна объявить глобальный массив $XMCARRAY и произвести в нем требуемые изменения.

XMCFileName($fileid[,$fileadd[,$fileext]])
Функция возвращает полное имя файла контента по идентификатору и необязательному дополнению к имени.
$fileid - идентификатор страницы.
$fileadd - дополнительный элемент имени.
$fileext - замена стандартного расширения имени файла.

XMCMakeLinks($string,$msgopen,$msgopennew,$msgmailto)
Реализует кликабельность ссылок в заданной строке слов $string, возвращая измененную строку.
$string - исходная строка.
$msgopen - сообщение для подсказки "открыть".
$msgopennew - сообщение для подсказки "открыть в новом окне".
$msgmailto - сообщение для подсказки "написать письмо".

xrustrtoupper($string)
xrustrtolower($string)

Функции возвращают исходную строку, переведенную в верхний или нижний регистр соответственно, независимо от текущей языковой версии.
$string - исходная строка.

XMMLimitWords($fulltext,$limit[,$dots=true])
Функция предназначена для "укорачивания" текста на заданное число слов или знаков. В обоих случаях текст укорачивается по словам. Анализируется и удаляется окончание фразы на тире и другие знаки пунктуации.
$fulltext - строка или массив строк (массив объединяется в одну строку.
$limit - максимальное количество слов или знаков (для знаков - отрицательное число).
$dots - добавлять многоточие.

XMIEngine($carray)
Вывод контента из массива. $carray - массив строк, аналогичных строкам обычного файла контента.
XMMTrimArray($ia)
Применяет очистку правых и левых пробелов и спецзнаков в массиве строк. $ia - исходный массив или одна строка. Возвращает всегда массив.
XMMSkipArray($ia)
Возвращает массив $ia, очищенный от пустых и закомментированными знаками '#' и '@' строк.
XMMGetFile($file)
Возвращает массив, прочитанный из файла $file, с почищенными от крайних спецсимволов строками и пропущенными пустыми и закомментированными знаками '#' и '@'.
XMMPutPrint($object)
Формирует ссылку на показ print-версии текущей страницы, $object - объект ссылки.

Функции модуля погоды

XMMWeather($call)
Возвращает хэш-массив данных прогноза погоды (по всем городам).
$call = 'GETALL'; $WW = XMMWeather($call); $WL = $WW[];
$WL[code] - код города
$WL[dyn] - динамика изменения температуры red,green,e
$WL[from] - нижний предел температуры
$WL[to] - верхний предел температуры
$WL[rus] - название города на русском языке
$WL[eng] - название города на английском языке



cms4site™ :: Руководство разработчика
[8]



Многоязыковая поддержка

XMMLocale($item[,$entity[,$language]])
Возвращает значение указанного термина для текущей языковой версии. Используются как стандартные термины (приведены в документации), так и определенные пользователем.
$item - имя термина.
$entity - TRUE или FALSE - режим перевода спецсимволов в HTML-коды (стандартно FALSE).
$language - идентификатор языка, если отличается от текущего.

XMMAddLocaleArray($item,$langvaluesarray)
Добавляет к внутреннему списку терминов указанный. Если такой термин уже есть, он заменяется.
$item - идентификатор термина.
$langvaluesarray - массив значений термина для предусмотренных в системе языков, например:
xmmaddlocalearray("myterm",array("english","deutsch","russian","slovak"));

XMMAddLocaleArrayFile($file)
Добавляет к внутреннему списку терминов термины, размещенные в указанном файле.
$file - имя файла, содержащего в каждой строке идентификатор термина и языковые значения, разделенные вертикальной чертой, например:
myterm|english|deutsch|russian|slovak

XMMGetPageInOtherLanguage($lang[,$branch=''])
Поиск страницы на другом языке. Возвращает элемент массива $XMMGENERAL (если найдена).
$lang - идентификатор другого языка
$branch - ветка страницы (если не задано, берется текущая страница)


Функция модуля валют

XMMCurrency($from,$to,&$date)
Возвращает коэффициент перевода валюты $from в $to и дату актуальности данных ($date - текстовая).
Пример: print('EUR/USD: '.number_format(XMMCurrency('EUR','USD',$date),2).' '.$date);


Движок сайта

XMMHasLevelMenu($level)
Возвращает TRUE, если текущая страница имеет меню уровня $level, в противном случае FALSE.
XMMGetLevelMenu($level)
Возвращает массив меню уровня $level для текущей страницы. Если меню этого уровня для данной страницы нет, длина массива нулевая. Используйте XMMHasLevelMenu() или sizeof() для проверки перед применением foreach().
XMMGetMyLevel()
Возвращает уровень текущей страницы.
XMMGetMyTitle()
Возвращает массив полей name по ветке текущей страницы.
XMMGetAnyTitle($index)
Возвращает массив полей name по ветке страницы, заданной индексом $index в массиве $XMMGENERAL.
XMMGetMyBranch()
Возвращает массив индексов в $XMMGENERAL для ветки текущей страницы.
XMMGetAnyBranch($index)
Возвращает массив индексов в $XMMGENERAL для ветки страницы, заданной индексом $index в массиве $XMMGENERAL.
XMMGetMyValue($name)
Возвращает поле, заданное ключом $name для текущей страницы.


cms4site™ :: Руководство разработчика
[9]



XMMGetAnyValue($index, $name)
Возвращает поле, заданное ключом $name для страницы, заданной индексом $index в массиве $XMMGENERAL.
XMMHasLanguageLevel()
Возвращает TRUE, если сайт мультиязыковый, в противном случае FALSE.
XMMGetMyLanguage()
Возвращает название языка текущей страницы.
XMMGetAnyLanguage($index)
Возвращает название языка для страницы, заданной индексом $index в массиве $XMMGENERAL.
XMMIAmIndex()
Возвращает TRUE, если id текущей страницы "index", в противном случае FALSE.
XMMGetGeneral()
Возвращает массив $XMMGENERAL.
XMMGetLevels()
Возвращает массив $XMMLEVELS.
XMMGetCurrent()
Возвращает переменную $XMMCURRENT.
XMMGetMaxLevel()
Возвращает переменную $XMMMAXLEVEL.
XMMDebugPrint()
Отладочная печать массивов $XMMGENERAL и $XMMLEVELS для текущей страницы.
XMMGetPageByLabel([$val='HOME'[,$datan=1[,$lang=true]]])
Поиск первой страницы по метке. Возвращает элемент массива $XMMGENERAL (если найдена).
$val - значение метки
$datan - номер поля data структуры сайта, в котором ищется метка
$lang - учитывать языковую версию

XMMGetPagesByLabel([$val='HOME'[,$datan=1[,$lang=true]]])
Поиск всех страниц по метке. Возвращает массив элементов массива $XMMGENERAL (если найдены).
$val - значение метки
$datan - номер поля data структуры сайта, в котором ищется метка
$lang - учитывать языковую версию

XMMGetPageById([$id='index'[,$lang=true]])
Поиск первой страницы по идентификатору. Возвращает элемент массива $XMMGENERAL (если найден).
$id - значение идентификатора
$lang - учитывать языковую версию

XMMGetPagesById([$id='index'[,$lang=true]])
Поиск всех страниц по идентификатору. Возвращает массив элементов массива $XMMGENERAL (если найдены).
$id - значение идентификатора
$lang - учитывать языковую версию

XMMGetPageByBranch([$branch='ru-index'])
Поиск страницы по ветке. Возвращает элемент массива $XMMGENERAL (если найден).
$branch - значение идентификатора

XMMGetChildren([$ix])
Возвращает массив - подмножество элементов массива $XMMGENERAL дочерних страниц (с уровнем на 1 больше) для заданной индексом $ix в массиве $XMMGENERAL или текущей страницы, если параметр не задан. При недопустимом значении индекса или отсутствии дочерних страниц возвращается пустой массив. Имеющиеся у дочерних страниц дочерние же в массив не попадают.
XMMForce404now()
Аварийное прекращение генерации страницы с выдачей 404 заголовка ответа сервера.


cms4site™ :: Руководство разработчика
[10]



Функции модуля xmmstandard

XMMStandardGetPageTitle([$site])
Возвращает массив имен страниц ветки текущей страницы. Если сайт многоязыковый, нулевой уровень исключается. Если задано $site, значение добавляется в начало массива.
$site - имя сайта, добавляемое к массиву.

XMMStandardPutPageTitle([$site])
Выводит в выходной поток титул страницы, начинающийся с $site. Титул берется по функции xmmstandardgetpagetitle().
$site - имя сайта, начинающее титул.

XMMStandardPutPageHeading([$level])
Выводит в выходной поток заголовок страницы, ограничивая его указанным в $level количеством имен старших страниц. По умолчанию - 1 - только имя текущей страницы.
$level - число предшествующих уровней.

XMMStandardPutContent([$area[,$directcall[,$userfunction]]])
Обеспечивает вызов Процессора контента для любой контентной области на странице ($area) с подключением функции разработчика ($userfunction) или прямую загрузку функционального модуля ($directcall).
$area - область контента (не задано - основной .dat, задано, например, '.2' - .2.dat).
$directcall - номер поля данных в структуре сайта, где размещается имя модуля для прямого вызова (не задано или 0 - вызовов нет).
$userfunction - имя функции разработчика, получающей управление после чтения файла контента и замены констант. Должна объявить глобальный массив $XMCARRAY и произвести в нем требуемые изменения.

XMMStandardPutCopyright($text[,$startyear])
Выводит знак авторского права, правильно построенный диапазон годов от $startyear или один год и $text.
$startyear - год начала действия, если не задан или совпадает с текущим, выводится только текущий.
$text - текст информации об авторском праве.

XMMStandardPutEmail($email)
Выводит защищенную средствами антиспама ссылку для отправки электронной почты.
$email - адрес электронной почты.

XMMStandardPutGoTop([$speed])
Выводит ссылку для прокрутки страницы наверх с заданной скоростью $speed. Ссылка не попадает в history броузера (т.е. не считается адресом новой страницы).
$speed - скорость прокрутки (по умолчанию - 3).

XMMStandardPutHorizontalMenu([$level [, $data, $op, $values]])
Строит горизонтальное меню уровня $level. Если заданы три других параметра, выводится выборка.
$level - уровень меню, по умолчанию - 1.
$data - номер поля данных в структуре сайта для проверки условия выборки.
$op - операция выборки (0 или 1) - исключать или включать.
$values - массив значений меток для выборки.
xmmstandardputhorizontalmenu(1,1,0,array("SERVICE")); -
выводит все, кроме помеченных в data1 значением SERVICE
xmmstandardputhorizontalmenu(1,2,1,array("SERVICE","ADDITION")); -
выводит только помеченные в data2 значениями SERVICE или ADDITION.

XMMStandardPutVerticalMenu([$level[,$data,$op,$values]])
Действия и параметры аналогичны xmmstandardputhorizontalmenu(), но выводится вертикальное меню. По умолчанию уровень 2.
XMMStandardPutLanguageMenu([$level])
Выводит языковое меню.
$level - уровень меню, по умолчанию - 0



cms4site™ :: Руководство разработчика
[11]



Функции авторизации

XMMAuthPutUser([$text])
Выводит данные об авторизованном пользователе, предваряя их необязательным текстом $text.
$text - текст перед выводом.

XMMAuthPutLogout([$text[,$where]])
Выводит ссылку для выхода из авторизованного доступа.
$where - ветка страницы перехода, если не задано, перезагружается текущая страница с потерей авторизации.
$text - текст перед выводом.

XMMAuthGetUserName()
Возвращает имя пользователя.
XMMAuthGetUserLevel()
Возвращает уровень пользователя.
XMMAuthGetUserInfo()
Возвращает информацию о пользователе.
XMMAuthExists()
Определяет, активизирован ли механизм авторизации (TRUE - активизирован, FALSE - нет).
XMMAuthorized()
Определяет, достаточен ли уровень авторизации пользователя для просмотра данной страницы (TRUE - достаточен, FALSE - нет).
XMMAuthorizedLink($id)
Определяет, является ли страница, заданная индексом в массиве xmmgeneral, доступной (TRUE - доступна, FALSE - нет).
$id - индекс в массиве xmmgeneral.

XMMAuthorizedThis($element)
Определяет, является ли страница, заданная элементом массива xmmgeneral или xmmlevels, доступной (TRUE - доступна, FALSE - нет).
$element - элемент массива xmmgeneral или xmmlevels.


Функции модуля каталога

XMMEcat()
Обрабатывает каталог и возвращает массив данных для функций вывода. $ECAT = XMMEcat();
XMMEcatPrintTree($ECAT)
Строит форму поиска и дерево навигации по массиву данных функции XMMEcat.
XMMEcatPrintInfo($ECAT)
Строит заголовок страницы с дополнительной информацией по массиву данных функции XMMEcat.
XMMEcatPrintCat($ECAT)
Печатает страницу каталога или результат поиска по массиву данных функции XMMEcat.

Вызов страницы с модулем xmmmysite

Для формирования запроса на добавление в закладки, страница вызывается с параметром xmmask=ветка, с главной страницы делается вызов без параметра.

Примеры: /ru-mysite.html?xmmask=ru-info-user-11
/ru-mysite.html


cms4site™ :: Руководство разработчика
[12]



Полный список функций

xmcaddflag();    xmcaddparameter();    xmcdebugprint();
xmcengine();    xmcfilename();    xmcfiletype();
xmcfindlinkbody();    xmchasflag();    xmcifallcaps();
xmcifbody();    xmciffile();    xmciflist2element();
xmciflistbegin();    xmciflistelement();    xmciflistend();
xmcifnumlistxbegin();    xmcifnumlistxelement();    xmcifnumlistxend();
xmciftablebegin();    xmciftablecellspanall();    xmciftableend();
xmciftablefirstrow();    xmciftablerow();    xmciftablerowempty();
xmclearstring();    xmcmakelinks();    xmcnoflag();
xmcprintcontent();    xmcprocesscontent();    xmcreadcontent();
xmcreplace();    xmcreplacelocales();    xmcscancontent();
xmctryimageinbrackets();    xmctryimageinlink();    xmctryimageintable();
xmctrysquarebrackets();    xmiengine();    xmmaddlocalearray();
xmmaddlocalearrayfile();    xmmauthclearcookie();    xmmauthengine();
xmmauthenteredpassword();    xmmauthexistingpassword();    xmmauthexists();
xmmauthexit();    xmmauthgetuser();    xmmauthgetuserinfo();
xmmauthgetuserlevel();    xmmauthgetusername();    xmmauthlistusers();
xmmauthnocache();    xmmauthorized();    xmmauthorizedlink();
xmmauthorizedthis();    xmmauthprintform();    xmmauthputlogout();
xmmauthputuser();    xmmauthreload();    xmmauthstorepassword();
xmmauthuserpasswordexists();    xmmbuildmenues();    xmmbuildpath();
xmmchecklanguage();    xmmclearreferer();    xmmcms4sitestatisticslight();
xmmcreatemenu();    xmmdaysdifference();    xmmdebugprint();
xmmdoseodescription();    xmmdoseokeywords();    xmmdoseotitle();
xmmemailantispam();    xmmengine();    xmmevaluateexpression();
xmmexcludeip();    xmmexpression();    xmmfatalerror();
xmmfatalprint();    xmmforce404();    xmmforce404now();
xmmgetanybranch();    xmmgetanylanguage();    xmmgetanytitle();
xmmgetanyvalue();    xmmgetchildren();    xmmgetcurrent();
xmmgetexpression();    xmmgetfile();    xmmgetgeneral();
xmmgethostinterval();    xmmgetlevelmenu();    xmmgetlevels();
xmmgetmaxlevel();    xmmgetmybranch();    xmmgetmylanguage();
xmmgetmylevel();    xmmgetmytitle();    xmmgetmyvalue();
xmmgetpagebybranch();    xmmgetpagebyid();    xmmgetpagebylabel();
xmmgetpageinotherlanguage();    xmmgetpagesbyid();    xmmgetpagesbylabel();
xmmgetstatinterval();    xmmgetvariables();    xmmhaslanguagelevel();
xmmhaslevelmenu();    xmmiamindex();    xmmjumpdown();
xmmlimitwords();    xmmlocale();    xmmobgetinterval();
xmmputdeveloper();    xmmputemail();    xmmputprint();
xmmsetexpressions();    xmmskiparray();    xmmstandardgetpagetitle();
xmmstandardputcontent();    xmmstandardputcopyright();    xmmstandardputemail();
xmmstandardputgotop();    xmmstandardputhorizontalmenu();    xmmstandardputlanguagemenu();
xmmstandardputpageheading();    xmmstandardputpagetitle();    xmmstandardputverticalmenu();
xmmstatclearreferer();    xmmstatgetallip();    xmmstathook();
xmmstathourlyvalues();    xmmswitchdomain2();    xmmtrimarray();
xmmwhoami();    xrustrtgenconvert();    xrustrtolower();
xrustrtoupper();    


cms4site™ :: Руководство разработчика
[13]



РАЗРАБОТКА САЙТА



Активизация дистрибутива

Стандартная структура директорий сайта (обязательные помечены *), одинаковая как в локальной копии или на локальном сервере, так и на хостинге, такова:

  • (корневая)* - содержит основной файл для обращения к сайту index.php и служебные файлы;
  • mycontent* - контент сайта (файлы .dat);
  • mycurrency - файлы данных модулей пересчета валют и погоды;
  • myecat - данные каталога продукции xmmecat
  • mydownload - файлы для модуля xmmdirlist;
  • myecat - файлы для модуля каталога продукции xmmecat;
  • myfiles - файлы для скачивания (.zip, .exe, .pdf);
  • mygblight - записи гостевой книги;
  • myguest - отладка файлов контента;
  • myimages* - изображения для контента страниц сайта;
  • myphp - нестандартные программные модули для данного сайта;
  • mysend - отправленные через форму письма и заказы;
  • mysitemenu* - структура сайта и константы сайта: sitemenu.dat, sitedata.dat;
  • mysqldata - данные обмена с MySQL;
  • mystat - данные сбора статистики посещений;
  • myuauth - данные для авторизации посетителей сайта;
  • myupdatelog - журнал обновлений сайта Администратором;
  • qlayout* - шаблоны дизайна и программы данного сайта;
  • qimages* - изображения для шаблонов дизайна данного сайта;
  • xmmadmin - Администратор сайта, программы сбора и обработки статистики, MySQL-редактор;
  • xmmdocs - документация по системе в формате pdf;
  • xmmfiles* - стандартные программы cms4site™;
  • xmmimages - изображения дистрибутивного сайта-примера;
  • xmmlayout - шаблон дистрибутивного сайта-примера;
  • xmmscript* - подгружаемые стили и программы javascript
  • xmmsetup* - настройка программ cms4site™ для данного сайта;
  • xmmutils - полезные утилиты.

Для активизации сайта необходимо выполнить следующие действия:

  1. Скопировать дистрибутив системы в корневую директорию сайта со всеми поддиректориями.
  2. Назначить всем директориям my* и файлам внутри них атрибуты 777 (drwxrwxrwx).
  3. Защитить директорию xmmadmin паролем или по IP (файлы .htaccess и .htpasswd имеются).
  4. Настроить виртуальный сервер (файл .htaccess в корневой директории).
  5. Проверить работоспособность сайта.
  6. Удалить ненужные файлы из директорий my* (в myimages оставит xmmspace.gif, а в mystat - xmmicon-16.gif). Можно оставить и другие файлы, используя их в качестве образца (структуру и данные сайта, авторизацию, myphp и др.).
  7. Создать директории qlayout и qimages.
  8. Создать в qlayout начальный шаблон и вызвать его в index.php и indexprint.php
  9. Удалить директорию xmmlayout или оставить ее как образец.


Начальный шаблон

В качестве шаблона можно использовать следующий код с вызовом модуля xmmcms4site.php, загружающий систему в полном объеме (настраивается по некоторым компонентам):

<?PHP
include("xmmfiles/xmmobstart.php");
include("xmmfiles/xmmcms4site.php");
print('<BODY>');
xmmstandardputlanguagemenu();
xmmstandardputhorizontalmenu();
xmmstandardputcontent();
print('</BODY>');
print('</HTML>');
include("xmmfiles/xmmobflush.php");
?>

Этот пример УЖЕ дает работающий сайт с языковым и главным меню и одной областью контента.



cms4site™ :: Руководство разработчика
[14]



Настройки модулей

Все модули cms4site™ настраиваются по функциональным требованиям и дизайну сайта. Настройки делаются в директории xmmsetup. Например, для модуля modulename.php файл настроек называется modulename.setup.php. В самих модулях имеются такие же настройки, поэтому, если вы внесете ошибки в код настроечных модулей, изменений не произойдет. Проверить правильность кода и увидеть сообщение PHP об ошибке можно, вызвав модуль настройки в броузере:

http://www.yoursite.com/xmmsetup/modulename.setup.php

Все операторы присваивания в модулях настройки снабжены комментариями. Стили меняются в файле xmmstyles.css.setup, функции JavaScript размещены в файле xmmscript.js


cms4site™ :: Руководство разработчика
[15]



ПРАКТИЧЕСКИЕ РЕКОМЕНДАЦИИ



Пример построения меню

Функция putmenuoflevel строит вертикальное меню уровня $level, если оно существует на данной странице.

function putmenuoflevel($level) {
 if (XMMHasLevelMenu($level)) { # IS THERE MENU AT ALL
  $MM = XMMGetLevelMenu($level); # GET LEVEL MENU
  foreach ($MM as $MK => $ML) { # PARSE MENU
   switch ($ML["current"]) { # ACCORDING TO FLAG
    case 0: # OTHER PAGES IN MY SUBLEVEL
     print('<A TITLE="'.$ML["info"].'" HREF="'.$ML["link"].'">'.$ML["name"].'</A><BR>');
     break;
    case 1: # I AM CURRENT PAGE
     print('<FONT COLOR="blue" TITLE="'.$ML["info"].'">'.$ML["name"].'</FONT><BR>');
     break;
    case 2: # I AM PARENT PAGE OF NEXT LEVEL MENU WHERE CURRENT PAGE IS
     print('<A TITLE="'.$ML["info"].'" HREF="'.$ML["link"].'">');
     print('<FONT COLOR="red">'.$ML["name"].'</FONT></A><BR>');
     break;
    default: break;
    }
   }
  }
 }



Прямое включение модулей

Некоторые модули можно вызывать напрямую, минуя файлы контента. Например, страница поиска требует всего одной строчки с вызовом модуля xmmsearch.php в файле контента, но, если мы зададим в структуре сайта что-то подобное:

<1>search|Search|Search this site||xmmsearch.php

можно легко запрограммировать вызов модулей по непустому полю data2 и избавиться от файла контента вообще:

if (XMMGetMyValue("data2")!="") { # DIRECT CALL
 @include("xmmfiles/".XMMGetMyValue("data2"));
 }
else { # NORMAL CONTENT PROCESSING
 if (!XMCEngine(XMCFileName(XMMGetMyValue("data")))) {
  print(XMCFileName(XMMGetMyValue("data"))." ".XMMLocale("notfoundm"));
  }
 }



Хранение даты и времени

Формат даты и времени зависит от языка. Например, русскому 11.03.2003 соответствует английское March 11, 2003.
Поэтому, дату и время лучше хранить в виде Unix timestamp: time(); или date("U"); выдавая нужный формат при выводе:

print(date(XMMLocale("dateformat")." ".XMMLocale("timeformat"),$storedtimestamp);


cms4site™ :: Руководство разработчика
[16]



Разные меню для одного уровня

Некоторые страницы, например, поиск, карта сайта и др., относятся к "служебным". Отметим их в структуре сайта:

<1>contacts|Contacts|Contact us
<1>search|Search|Search this site|SERVICE
<1>sitemap|Site Map|See it all|SERVICE


нам останется применить оператор if для пропуска таких страниц в функции вывода основного меню:

function putmenuoflevel($level) {
 if (XMMHasLevelMenu($level)) { # IS THERE MENU AT ALL
  $MM = XMMGetLevelMenu($level); # GET LEVEL MENU
  foreach ($MM as $MK => $ML) { # PARSE MENU
   if (XMMGetMyValue("data1")!="SERVICE") {
    switch ($ML["current"]) { # ACCORDING TO FLAG
     case 0: # OTHER PAGES IN MY SUBLEVEL
      print('<A TITLE="'.$ML["info"].'" HREF="'.$ML["link"].'">'.$ML["name"].'</A><BR>');
      break;
     case 1: # I AM CURRENT PAGE
      print('<FONT COLOR="blue" TITLE="'.$ML["info"].'">'.$ML["name"].'</FONT><BR>');
      break;
     case 2: # I AM PARENT PAGE OF NEXT LEVEL MENU WHERE CURRENT PAGE IS
      print('<A TITLE="'.$ML["info"].'" HREF="'.$ML["link"].'">');
      print('<FONT COLOR="red">'.$ML["name"].'</FONT></A><BR>');
      break;
     default: break;
     }
    }
   }
  }
 }


а для "служебного" меню написать другую функцию.


Настройки для отдельной страницы

Что делать, если для некоторых страниц нужно задать другие шаблоны обработчика контента?

Рассмотрим пример, когда таблицы имеют рамку красного цвета, заданную в xmmcontent.setup.php так:

$XMCMASK["tablebegin"] = "<TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0><TR VALIGN=top><TD BGCOLOR=#FF0000><TABLE WIDTH=100% CELLPADDING=4 CELLSPACING=1 BORDER=0>";

Если на некоторых страницах нужна оранжевая рамка таблиц, создайте модуль, например, myorangetable.setup.php:

<?PHP $XMCMASK["tablebegin"] = "<TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0><TR VALIGN=top><TD BGCOLOR=#FF9900><TABLE WIDTH=100% CELLPADDING=4 CELLSPACING=1 BORDER=0>";?>

поместите его в директорию myphp и вызывайте в файлах контента:

Некоторый текст.
myorangetable.setup.php
Наименование|Параметр|Описание|Цена

|AE3400 Extended
AE3401x|111|---|260
AE3402v|117|---|290


cms4site™ :: Руководство разработчика
[17]



Контент из родительского уровня

Можно ли на подстраницах некоторого уровня в дополнительной области контента использовать один и тот же контент из родительского уровня? Рассмотрим пример фрагмента структуры:

<1>prod|Продукция
  <2>ct100|CT100
  <2>ct200|CT200
  <2>ct210|CT210
<1>service|Услуги
  <2>development|Разработка
  <2>research|Исследования


Вот как в дополнительную область помещается "родительский" контент:

XMCEngine(XMCFileName(XMMGetAnyValue(XMMGetMyValue("parentindex"),"data"),".common"));

для уровня 1 контент в дополнительную область выводится так:

XMCEngine(XMCFileName(XMMGetMyValue("data"),".2"));

Можно и "родительский" контент вывести на родительской странице, например, в третью область:

XMCEngine(XMCFileName(XMMGetMyValue("data"),".common"));

А вот какие файлы контента нам понадобятся для этого:

en-prod.dat - основной контент Продукция;
en-prod.2.dat - дополнительный контент Продукция;
en-prod.common.dat - дополнительный контент для подстраниц Продукции;
en-prod-ct100.dat - основной контент подстраницы;
en-prod-ct200.dat - основной контент подстраницы;
en-prod-ct210.dat - основной контент подстраницы;
en-service.dat - основной контент Услуги;
en-service.2.dat - дополнительный контент Услуги;
en-service.common.dat - дополнительный контент для подстраниц Услуг;
en-service-development.dat - основной контент подстраницы;
en-service-research.dat - основной контент подстраницы.

Другими словами, на странице en-prod мы увидим:

en-prod.dat основной контент;
en-prod.2.dat дополнительный контент;
en-prod.common.dat третья область с контентом для подстраниц.

а на странице en-prod-ct200 будут:

en-prod-ct200.dat в основной области;
en-prod.common.dat в дополнительной области.


Автоматическое формирование заголовка

Нужно избавить владельца сайта от размещения заголовков страниц в файле контента. Это можно сделать подобно тому, как извлекался TITLE в предыдущих примерах, или иным образом, с учетом уровня страниц. В примере для страниц уровня 1 выводится ее имя, а для бóльших уровней - добавляется имя родительской:

$H = XMMGetMyValue("name"); # GET CURRENT PAGE NAME
if (XMMGetMyLevel()>1) $H = XMMGetAnyValue(XMMGetMyValue("parentindex"),"name")." - ".$H # ADD PARENT NAME FOR LEVEL>1
print("<H2>".$H."</H2>"); # PRINT HEADING



cms4site™ :: Руководство разработчика
[18]



Подстановка коллажей

Часто для разных страниц сайта уровня 1 и любых их подстраниц изготавливаются различные коллажи:

$BRANCH = XMMGetMyBranch();
$ID1 = XMMGetAnyValue($BRANCH[1],"id");
print('<IMG SRC="/images/collages/'.$ID1.'.jpg">');


Для страниц en-contacts или en-contacts-form потребуется файл коллажа images/collages/contacts.jpg. Поскольку владелец сайта может добавить новую страницу уровня 1, для которой еще нет коллажа, лучше усложнить алгоритм, проверив наличие картинки, и, в случае ее отсутствия подставлять какую-либо "дежурную" картинку.


Поддиректории

Группы изображений или файлов можно разместить в поддиректориях, тогда вызывать их из файлов контента нужно так:

product1/image01.jpg
product1/image02.jpg
product2/image01.jpg

При этом поддиректории должны быть добавлены в настройки Администратора, чтобы владелец сайта имел к ним доступ.