CMS ITWEB
руководство для разработчика сайтов

 

Введение

Система управления сайтом ITWEB спроектирована таким образом, чтобы максимально облегчить процесс создания сайта. В сравнении с большинством других систем она принципиально отличается в том, что все её основные действующие компоненты абстрагированы от непосредственного обращения к Базе Данных и оптимизированы под конечные, наиболее актульные большинству Интернет-проектов нужды.

Система отлично зарекомендовала себя на более чем 30-ти разноплановых проектов, и в сравнении с другими системами продемонстрировала свою универсальность и практичность.

Для создания сайта на базе ITWEB не требуется большого опыта программирования и даже знания MySQL. Как правило, чтобы разобраться в общих принципах системы и начать уверенно конструировать сайты требуется не больше недели, после чего создание небольшого сайта типа http://poline.ru или http://gtsresort.ru у вас будет занимать не более 3-5 дней.

В следующих главах вы ознакомитесь с основными принципами ITWEB и функционалом её основных модулей. Первые три главы приведены по большей части просто для ознакомления, вы можете их даже пропустить и перейти сразу к практической части.

При чтении руководства обращайте внимание на ссылки См. Видео т.к. после просмотра Видео курса вам будет легче понять о чём идёт речь. Вполне возможно, что в процессе чтения этого руководства у вас будет возникать много вопросов, но не спешите самостоятельно выдумывать на них, быть может когда вы дочитаете до конца или после повторного прочтения они сами собой решатся.

Для детального знакомства с исходным кодом библиотек и модулей ITWEB вы можете использовать мануал.


Основные принципы ITWEB

CMS ITWEB построена на принципах Объектно Ориентированного Программирования PHP4, что определяет её жесткую архитектурную иерархию и взаимосвязь компонентов. Вам нет необходимости вникать во все тонкости системы, достаточно просто иметь представление о том каким образом устроена система.

Как и большинство других систем, функциональность ITWEB разделяется на две части:
FrontOffice - сам сайт, его внешняя часть
BackOffice - Администрирование сайта, внутренняя часть

Основные компоненты

Контроллеры. ITWEB - контроллер FrontOffice, определяет текущий сайт, текущую страницу, формирует содержимое текущей страницы. AdminITWEB - контроллер BackOffice, производный от ITWEB, определяет базовый функционал админки и модулей в админке.

Абстрактный класс каталога. Предоставляет функционал доступа к древовидным стукрутрам данных типа Каталог. Аналогия структуры Каталога - структура файловой системы, где папки - Категории, файлы - Элементы. Таким образом:

Модули. Каждый модуль имеет главную FrontOffice часть, и производную админскую BackOffice часть. Каждый модуль является в своей основе отдельным Каталогом(т.е. каждый модул наследует функционал Абстрактного класса каталога и работает с ним, как со своим собственным).

Модель ITWEB



Модель основных объектов образующих Каталоги ITWEB


Создание сайта на базе CMS ITWEB

Установка

» См. Видео «

Минимальные системные требования:

Разрабатывать сайт на ITWEB всегда быстрее и удобней на собственном локальном сервере, к тому же последующий перенос ITWEB c готовым сайтом на удалённый хостинг-сервер займёт у вас не более 5 минут.

Инсталяция ITWEB

1. Скопируйте файлы дистрибутива в папку DOCUMENT_ROOT (обычно public_html или www) сервера.

2. Настройте основные параметры ITWEB в /itweb/config/config.php. Как минимум, необходимо прописать:
    // сайты поддерживаемые системой
    $SITES = array('sitename' => array('sitedomain.local','sitedomain.ru','www.sitedomain.ru'));

3. Настройте параметры доступа к Базе Данных
    /itweb/config/_db.local.php - на локальном сервере с доменом *.local
    /itweb/config/_db.php - на удалённом сервере хостинга

4. http://sitename.local/itweb/install.php
     - Имя сайта идентичное тому, что задали в /itweb/config.php
     - версия системы - 5.5.6 (требуется для дальнейшего обновления ITWEB)
     - выбираем необходимые модули (требуется для дальнейшего обновления ITWEB)
     - ... press any key ;)

5. http://sitename.local/itweb, логин - администратор, пароль - 12345

Создание структуры сайта

Предположим дизайн сайта у нас уже готов, осталось только "оживить" его, подключить к системе управления ITWEB. В большинстве подобных случаев лучше придерживаться следующего порядка действий:

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

» См. Видео «

По умолчанию модули создаются с настройками наиболее актуальными для большинства проектов в Интернете, вам остаётся только добавить/удалить недостающие наборы свойств.

Программировать сайт с пустым наполнением крайне не уодбно, так что вполне разумно сперва наполнить Модули (особенно это касается Новостей, Каталога товаров/услуг, Материалов сайта) какими-нибудь временными значениями.

2. Определение Видов

» См. Видео «

Виды - блоки вставляемые в шаблон страницы сайта. Т.е. если к примеру страницу визульно разбить на области - шапка, левое меню, главная область... тогда Видами будут блоки: "меню" (в области главное меню), "форма авторизации" (в области шапка), "содержание" (в главной области), "новости" (в главной области)..

Основные составляющие Вида:
- набор динамических свойств-конфигураций, передаваемых в PHP-процессор Вида
- PHP процессор - файл, в котором описывается функциональность Вида и генерируются переменные для HTML-шаблона Вида
- HTML-шаблон - Smarty шаблон

Важно заметить, что каждый Вид относится к тому или иному Модулю ITWEB, что позволяет использовать функциональность Модуля внутри PHP процессора. За всё, что касается настройки Видов отвечает модуль "Виды модулей".

И так. Взгляните в общем на страницы дизайна создаваемого сайта и выделите для себя какие блоки будут определяться динамически. К примеру таковыми обычно являются:

- разделы каталога товаров (модуль Каталог товаров/услуг)
- список новостей (модуль Новости)
- форма подписки на новости (модуль Новости)
- меню страниц сайта (модуль Страницы и структура)
- текст на главной (модуль Материалы сайта)
- текст на странице Контакты (модуль Материалы сайта)
- корзина товаров (модуль Заказы)
- форма регистрации Клиентов (модуль Клиенты)
- и т.д. и т.п.

При установке ITWEB автоматически создаётся набор наиболее популярных Видов, если они не подходят для создаваемого сайта - просто удалите их. Так же не забывайте, что PHP-процессоры Видов не имеют жесткой привязки к проекту в котором были созданы и могут быть повторно использованы в других проектах со схожими задачами.

3. Определение Шаблонов страниц

Теперь, когда вы создали соответствующие текущему проекту Виды, нужно определить Шаблоны страниц и Страницы, в которых эти Виды будут располагаться.

В Шаблонах страниц вы задаёте настройки по умолчанию для будущих Страниц.

Основные составляющие Шаблона:
-
HTML-шаблон для группы страниц, с проставленными переменными {$area.1}...{$area.N} основных областей (пример)
    переменные доступные в шаблоне:
    {$siteFilesDir} - путь к общим файлам сайта (/files/имя_сайта/)
    {$siteImgsDir} - путь к общим изображениям сайта (/img/имя_сайта/)
    {$head} - ассоциативный массив meta и title параметров страницы
- HTML-файл экскиза HTML-шаблона, для динамического наполнения видами в BackOffice ITWEB. (пример)
    соответствие областей в эскизе и в самом шаблоне происходит по:
    {$area.1} в шаблоне - в эскизе <div id="view_block0"></div>
    {$area.2} в шаблоне - в эскизе <div id="view_block1"></div>
- Виды с настройками по умолчанию для Страниц этого Шаблона

К примеру, если вам нужно создать сайт, который будет состоять из страниц двух типов, с областями:
1. шапка, левая, главная
2. шапка, главная, нижняя
Вы создаёте 2 шаблона с соответственно расположенными областями и проставляете в них Виды, которые будут фигурировать на большистве страниц этих Шаблонов (это делается, чтобы потом не проставлять отдельно для каждой страницы один и тот же Вид). Таким образом, в область шапки логично станут Виды "верхнее меню" и "авторизация", в левую область разумно будет расположить Вид "левое меню". В то же время главную область лучше оставить пустой, т.к. для большинства страниц в этой области будут разные Виды.

4. Определение Страниц

Теперь, когда у нас есть полный набор необходимых для сайта Видов и соответствующие всем необходимым Страницам сайта Шаблоны, остаётся задать сами Страницы.

Основные составляющие Страницы:
- Шаблон - из списка созданных Шаблонов
- Линк - адрес, по которому страница будет доступна на сайте
- Заголовок(tittle)
- Ключевые слова(meta keywords)
- Описание(meta description)

При создании структуры сайта вы должны чётко представлять себе всю структуру(каталог) его страниц.

Часто для создания многоуровнего сайта, на котором требуются разного рода меню навигации, удобно разбить страницы по категориям. У категорий модуля Страницы и структура есть свойства "Линк" и "Страница по умолчанию", которые задают перенаправление на выбранную "Страницу по умолчанию" при запросе "Линка". Также следует учитывать, что при задании Линка для категории Страниц, Линки всех подкатегорий и элементов-Страниц будут изменены подстановкой заданного Линка.

Программирование процессоров Видов

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

Таким образом, для того чтобы научиться программировать Виды нужно в первую очередь освоить функционал доступа к Каталогам системы ITWEB, после чего ознакомиться с базовым функционалом управления модулями.

Базовые функции Каталогов в ITWEB

Каталоги в ITWEB состоят из 4-х основных абстрактных объектов (см. Модель основных объектов образующих Каталоги ITWEB). Мы называем эти объекты "абстрактными", потому что фактически они не являются как таковыми "объектами" с точки зрения Объектно Ориентированного Программирования. На самом деле Тип данных, Тип свойства, Категория и Элемент - просто основные условные понятия на которых строится структура всех Каталогов ITWEB.

Далее будет приведён список основных функций Каталога.

Предположим, что мы работаем с процессором Вида модуля Новости (где $this - объект модуля Новости), тогда все нижеследующие функции будут иметь отношение к Каталогу модуля Новости.

Категории

В Каталогах ITWEB все функции для работы с Категориями и Элементами работают относительно текущей Категории(CurrentCategory) или текущего Элемента(CurrentItem).

$this->CurrentCategory
$this->GetParentCategory
$this->RootCategory
$this->GetCurrentLevel
$this->CountItems
$this->isCategoryExist
$this->AddCategory
$this->DelCategory
$this->ModifyCategory
$this->GetCategory
$this->GetCategoryProperties
$this->GetCategoryProperty
$this->GetCategoryPropertyTypes
$this->isCategoryPropertyTypeExist

Элементы

$this->CurrentItem
$this->AddItem
$this->DelItem
$this->ModifyItem
$this->GetItem
$this->GetItemProperties
$this->GetItemProperty
$this->GetItemPropertyTypes
$this->isItemPropertyTypeExist

Типы свойств

$this->AddPropertyType
$this->DelPropertyType
$this->ModifyPropertyType
$this->GetPropertyType

Типы данных

$this->AddDataType
$this->DelDataType
$this->GetDataType
$this->GetDataTypes
$this->isDataTypeExist

Выборка-поиск Категорий и Элементов, работа с фильтрами

$this->GetCategories
$this->GetItems

Функции фильтрации-поиска:

$this->SetCategoriesFilter
$this->GetCategoriesFilter
$this->ResetCategoriesFilter

$this->SetItemsFilter
$this->GetItemsFilter
$this->ResetItemsFilter

$this->SetItemsRange
$this->SetItemsLimit
$this->SetItemsOffset

Функции сортировки:

$this->SetItemsSorting
$this->SetItemsRandomSorting
$this->ResetItemsSorting

Оптимизация работы функций выборки

При программировании Видов вы должны учитывать, что результаты функций:
GetCategory
GetCategories
GetItem
GetItems
всегда кешируются в памяти, что можно использовать для оптимизации работы процессора Вида

Т.е. к примеру если вы напишете:
$iIDs = array(1,2,3,4,5,6,7);
// $this->SetItemsRange($iIDs);
// $this->GetItems(1, 2, '*', 1);
foreach($iIDs as $iID)
{
  $this->CurrentItem($iID);
  $items[] = $this->GetItem();
}
то фактически будет выполнено 7 запросов к БД. А если раскомментируете 2ю и 3ю строчки, то запрос будет всего 1.

Аналогичный пример с выбором отдельных свойств:
// $this->GetCategory();
$name        = $this->GetCategoryProperty('Наименование');
$announce = $this->GetCategoryProperty('Анонс');
$date          = $this->GetCategoryProperty('Дата');
раскомментирование 1ой строчки позволит сэкономить 2 запроса к БД.

Функции работы с закешированными Категориями и Элементами:

$this->GetCachedCategories()
$this->SetCachedCategories()
$this->ClearCategoriesPropertiesCache()

$this->GetCachedItems()
$this->SetCachedItems()
$this->ResetCachedItems()

Работа с модулями ITWEB

По умолчанию в функцию PHP-процессора Вида передаётся статичный объект Модуля, к которому этот Вид относится.

Сохранение-восстановление состояния Модулей

У Модулей есть переменные статуса хранящие информацию об их текущих настройках (текущая категория/элемент, установки фильтров, кеш выбранных элементов/категорий...). Для сохранения и восстановления состояния модуля есть функции $this->SaveStatus и $this->LoadStatus. Например:

$this->CurrentCategory(3);
$this->SaveStatus();
$this->CurrentCategory(5);
$this->LoadStatus();
echo $this->CurrentCategory(); // выведет 3

Загрузка модулей

Порой возникает необходимость внутри PHP-процессора Вида одного из модулей использовать функции и данные другого модуля. Например что если нам вдруг понадобится внутри PHP-процессора Вида "форма поиска" модуля "Каталог товаров/услуг", получить список Элементов Категории Бренды, которая задана в модуле "Справочники"?

Для этих целей в ITWEB есть функция загрузки модулей. Модуль может быть загружен как статичный(глобальный), либо как временный(локальный).

Если модуль загружается как статичный
$oEnum =& $this->LoadModule('Справочники');
то все его настройки будут сохранены в процессе всего выполнения скрипта и обработки всех видов. В последствии он может быть также загружен в другом Виде, в том же состоянии.

Если модуль загружается как временный
$oEnum =& $this->LoadModule('Справочники', 0, 0);
то грубо говоря создаётся новая копия модуля, для которого текущие настройки по умолчанию сброшены, т.е. $oEnum->CurrentCategory() == $oEnum->RootCategory() и т.д.

Написание PHP-процессоров Видов

PHP-процессор Вида представляет из себя отдельный PHP-файл, который генерируется при создании Категории этого Вида в модуле "Виды модулей". Пример:

файл: /itweb/views/FrontOffice/poline.ru/News/News_tape.php
<?
function GetTemplate_News_tape(&$this, &$settings, &$assigns)
{
}
?>

т.е. по сути PHP-процессор представляет из себя функцию, которая вызывается с параметрами:

$this - объект модуля Вида
$settings - настройки Вида
$assigns - переменные в дальнейшем передаваемые в HTML-шаблон Вида (к примеру $assigns['item'] будет доступна в шаблоне как {$item}

настройки заголовков страницы по умолчанию передаются в $assigns['__globals']:
$assigns['__globals']['head']['title']
$assigns['__globals']['head']['meta_keywords']
$assigns['__globals']['head']['meta_description']
$assigns['__globals']['head']['etc']

Для каждого модуля автоматически генерируется загрузочный PHP-процессор, который вызывается перед каждым из всех Видов модуля и нужен для общих настроек Видов:

файл: /itweb/views/FrontOffice/poline.ru/News/News_tape.php
<?
function GetTemplate_News(&$this, &$settings, &$assigns)
{
}
?>

Написание HTML-шаблонов Видов

Функциональность HTML-шаблонов Видов основывается на шаблонизаторе Smarty.

Как уже было сказано, в HTML-шаблоны Видов передаются переменные сгенерированные соответствующиими PHP-процессорами. Помимо этого, в HTML-шаблоны автоматически также передаются переменные:

{$siteFilesDir} - путь к общим файлам сайта (/files/имя_сайта/)
{$siteImgsDir} - путь к общим изображениям сайта (/img/имя_сайта/)
{$filesDir} - путь к файлам модуля Вида (/files/имя_сайта/имя_модуля/)
{$imgsDir} - путь к изображениям модуля Вида (/img/имя_сайта/имя_модуля/)

последние две нужны для формирования ссылок на файлы-изображения загруженные в Каталог модуля Вида.

Часто возникает необходимость вывести определённые значения некоторого ассоциативного массив, в котором ключи записаны русскими символами. К сожалению функционал Smarty не позволяет этого сделать, и нам пришлось расширить его своей функцией. Для подобных случаев, используйте в шаблонах следующую кострукцию:

{itweb_prps_assign names="Наименование,Дата" assigns="name,date" prps=$item}

где names - ключи ассоциативного массива, assigns - назначаемые переменные, $item - ассоциативный массив

после чего $item['Наименование'] и $item[Дата'] будут доступны в шаблоне как {$name} и {$date}