![]() cms4site™ :: Руководство разработчика D91RU
ОГЛАВЛЕНИЕ
МАССИВЫ И КОНСТАНТЫ$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): $xmcarray Массив содержит строки файла контента в момент вызова функции разработчика через xmcengine(). array[] -> array[data] $LINE = $XMCARRAY[$i]; $DATA = $LINE["data"] $FLAGS = $LINE["flags"] $xmmthisisprintversion Логическая переменная, содержит true при вызове движка сайта в режиме версии для печати, false в противном случае.
$xmcmask Приведены элементы массива xmcmask, используемые как шаблоны для вывода объектов, определенных Процессором контента. CONTENT, FIRST, SECOND, LAST, XTRA - поля для подстановки, указываемые в шаблоне как %%ИМЯ%%, например: $XMCMASK["tableimage"] = '<IMG SRC="%%CONTENT%%" %%LAST%% BORDER=0 WIDTH=%%FIRST%% HEIGHT=%%SECOND%%>';
МОДУЛИОбщие 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 - текстовый броузер
ФУНКЦИИПроцессор контента XMCEngine($file[,$userfunction]) $file - полное имя файла контента, может быть получено по xmcfilename(). $userfunction - имя функции разработчика, получающей управление после чтения файла контента и замены констант. Должна объявить глобальный массив $XMCARRAY и произвести в нем требуемые изменения. XMCFileName($fileid[,$fileadd[,$fileext]]) $fileid - идентификатор страницы. $fileadd - дополнительный элемент имени. $fileext - замена стандартного расширения имени файла. XMCMakeLinks($string,$msgopen,$msgopennew,$msgmailto) $string - исходная строка. $msgopen - сообщение для подсказки "открыть". $msgopennew - сообщение для подсказки "открыть в новом окне". $msgmailto - сообщение для подсказки "написать письмо". xrustrtoupper($string) xrustrtolower($string) $string - исходная строка. XMMLimitWords($fulltext,$limit[,$dots=true]) $fulltext - строка или массив строк (массив объединяется в одну строку. $limit - максимальное количество слов или знаков (для знаков - отрицательное число). $dots - добавлять многоточие. XMIEngine($carray) XMMTrimArray($ia) XMMSkipArray($ia) XMMGetFile($file) XMMPutPrint($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] - название города на английском языке
Многоязыковая поддержка 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='']) $lang - идентификатор другого языка $branch - ветка страницы (если не задано, берется текущая страница) Функция модуля валют XMMCurrency($from,$to,&$date) Пример: print('EUR/USD: '.number_format(XMMCurrency('EUR','USD',$date),2).' '.$date); Движок сайта XMMHasLevelMenu($level) XMMGetLevelMenu($level) XMMGetMyLevel() XMMGetMyTitle() XMMGetAnyTitle($index) XMMGetMyBranch() XMMGetAnyBranch($index) XMMGetMyValue($name)
XMMGetAnyValue($index, $name) XMMHasLanguageLevel() XMMGetMyLanguage() XMMGetAnyLanguage($index) XMMIAmIndex() XMMGetGeneral() XMMGetLevels() XMMGetCurrent() XMMGetMaxLevel() XMMDebugPrint() XMMGetPageByLabel([$val='HOME'[,$datan=1[,$lang=true]]]) $val - значение метки $datan - номер поля data структуры сайта, в котором ищется метка $lang - учитывать языковую версию XMMGetPagesByLabel([$val='HOME'[,$datan=1[,$lang=true]]]) $val - значение метки $datan - номер поля data структуры сайта, в котором ищется метка $lang - учитывать языковую версию XMMGetPageById([$id='index'[,$lang=true]]) $id - значение идентификатора $lang - учитывать языковую версию XMMGetPagesById([$id='index'[,$lang=true]]) $id - значение идентификатора $lang - учитывать языковую версию XMMGetPageByBranch([$branch='ru-index']) $branch - значение идентификатора XMMGetChildren([$ix]) XMMForce404now()
Функции модуля xmmstandard XMMStandardGetPageTitle([$site]) $site - имя сайта, добавляемое к массиву. XMMStandardPutPageTitle([$site]) $site - имя сайта, начинающее титул. XMMStandardPutPageHeading([$level]) $level - число предшествующих уровней. XMMStandardPutContent([$area[,$directcall[,$userfunction]]]) $area - область контента (не задано - основной .dat, задано, например, '.2' - .2.dat). $directcall - номер поля данных в структуре сайта, где размещается имя модуля для прямого вызова (не задано или 0 - вызовов нет). $userfunction - имя функции разработчика, получающей управление после чтения файла контента и замены констант. Должна объявить глобальный массив $XMCARRAY и произвести в нем требуемые изменения. XMMStandardPutCopyright($text[,$startyear]) $startyear - год начала действия, если не задан или совпадает с текущим, выводится только текущий. $text - текст информации об авторском праве. XMMStandardPutEmail($email) $email - адрес электронной почты. XMMStandardPutGoTop([$speed]) $speed - скорость прокрутки (по умолчанию - 3). XMMStandardPutHorizontalMenu([$level [, $data, $op, $values]]) $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]]) XMMStandardPutLanguageMenu([$level]) $level - уровень меню, по умолчанию - 0
Функции авторизации XMMAuthPutUser([$text]) $text - текст перед выводом. XMMAuthPutLogout([$text[,$where]]) $where - ветка страницы перехода, если не задано, перезагружается текущая страница с потерей авторизации. $text - текст перед выводом. XMMAuthGetUserName() XMMAuthGetUserLevel() XMMAuthGetUserInfo() XMMAuthExists() XMMAuthorized() XMMAuthorizedLink($id) $id - индекс в массиве xmmgeneral. XMMAuthorizedThis($element) $element - элемент массива xmmgeneral или xmmlevels. Функции модуля каталога XMMEcat() XMMEcatPrintTree($ECAT) XMMEcatPrintInfo($ECAT) XMMEcatPrintCat($ECAT) Вызов страницы с модулем xmmmysite Для формирования запроса на добавление в закладки, страница вызывается с параметром xmmask=ветка, с главной страницы делается вызов без параметра. Примеры: /ru-mysite.html?xmmask=ru-info-user-11 /ru-mysite.html
Полный список функций
РАЗРАБОТКА САЙТААктивизация дистрибутива Стандартная структура директорий сайта (обязательные помечены *), одинаковая как в локальной копии или на локальном сервере, так и на хостинге, такова: Для активизации сайта необходимо выполнить следующие действия: Начальный шаблон В качестве шаблона можно использовать следующий код с вызовом модуля xmmcms4site.php, загружающий систему в полном объеме (настраивается по некоторым компонентам): <?PHP include("xmmfiles/xmmcms4site.php"); print('<BODY>'); xmmstandardputlanguagemenu(); xmmstandardputhorizontalmenu(); xmmstandardputcontent(); print('</BODY>'); print('</HTML>'); include("xmmfiles/xmmobflush.php"); ?> Этот пример УЖЕ дает работающий сайт с языковым и главным меню и одной областью контента.
Настройки модулей Все модули cms4site™ настраиваются по функциональным требованиям и дизайну сайта. Настройки делаются в директории xmmsetup. Например, для модуля modulename.php файл настроек называется modulename.setup.php. В самих модулях имеются такие же настройки, поэтому, если вы внесете ошибки в код настроечных модулей, изменений не произойдет. Проверить правильность кода и увидеть сообщение PHP об ошибке можно, вызвав модуль настройки в броузере: http://www.yoursite.com/xmmsetup/modulename.setup.php Все операторы присваивания в модулях настройки снабжены комментариями. Стили меняются в файле xmmstyles.css.setup, функции JavaScript размещены в файле xmmscript.js
ПРАКТИЧЕСКИЕ РЕКОМЕНДАЦИИПример построения меню Функция 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);
Разные меню для одного уровня Некоторые страницы, например, поиск, карта сайта и др., относятся к "служебным". Отметим их в структуре сайта: <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
Контент из родительского уровня Можно ли на подстраницах некоторого уровня в дополнительной области контента использовать один и тот же контент из родительского уровня? Рассмотрим пример фрагмента структуры: <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
Подстановка коллажей Часто для разных страниц сайта уровня 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 При этом поддиректории должны быть добавлены в настройки Администратора, чтобы владелец сайта имел к ним доступ. |