Серверная часть системы создания и управления сайтами

Анализ существующих систем создания и управления сайтами, их общая характеристика и оценка функциональности на современном этапе. Требования к серверной части, средства ее разработки. Тестирование интерфейса. Формирование руководства пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 11.04.2012
Размер файла 1,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Введение

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

Наибольшая доля информации приходится на Интернет-сайты. Поэтому для решения вышеуказанных задач были созданы различные системы создания и управления сайтами. И на данный момент их число измеряется тысячами. Это системы разного уровня, профессиональные и любительские, узкоспециализированные и общего назначения, платные и бесплатные. Но, как известно, Интернет развивается стремительными шагами. Еще недавно в нем господствовала концепция статических html-файлов. Теперь это динамическое интерактивное содержимое. Раньше страницы сайтов состояли в основном из текста, сейчас внедряются оформительские решения, применяемые в операционных системах. Именно благодаря постоянным изменениям, внедрение новых систем создания и управления сайтами является актуальной задачей.

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

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

В данном дипломном проекте автор создал серверную часть системы, которая вместе с клиентской частью составляет полную систему создания и управления сайтами.

Автор попытался выделить основные на его взгляд недостатки современных систем создания и управления сайтами и исправить их в данной версии системы. Кроме того, планируется дальнейшее развитие всей системы в целом с выводом ее в сеть Интернет. Для этого потребуется доработка и развитие системы уже вне дипломного времени.

1. Постановка задачи

1.1 Анализ существующих систем создания и управления сайтами

1.1.1 Выбор систем для анализа

Систем создания и управления сайтами (ССУС) на сегодняшний день существует большое множество. На одном из самых популярных Интернет-ресурсов, посвященном обзору современных ССУС, http://www.cmsmatrix.org/, зарегистрировано около 1000 систем. [1] Проанализировать их все не представляется возможным. Поэтому разумно выбрать несколько наиболее популярных продуктов. Более того, чтобы анализ получился достоверным, необходимо в какой-то степени изучить все эти системы самостоятельно, а не опираться на предоставленные сторонними лицами обзоры.

Основываясь на различной статистике и опросах общественного мнения, свободно публикуемых в сети Интернет, [2] а также на личном опыте автора, были выбраны следующие ССУС для анализа:

· Drupal http://drupal.org/;

· Joomla http://www.joomla.org/;

· Wordpress http://wordpress.org/;

· Ucoz http://www.ucoz.ru/.

Стоит обратить внимание на систему Ucoz. Она является представителем особой группы онлайн-ССУС. Среди таких систем сложно выделить наиболее популярную в мировом масштабе, поэтому была выбрана наиболее популярная система в русском Интернете. Wordpress изначально позиционируется как система для создания блогов, но при этом успешно используется для создания сайтов любой направленности. Joomla является представителем универсальных ССУС для подготовленных пользователей. Drupal представляет продвинутую систему для профессиональных пользователей. [3]

Конечно, эти описания весьма условны. К примеру, тот же Drupal в какой-то степени может использоваться и неподготовленными пользователями, но все преимущества этой системы создания и разработки сайтов проявляются только в руках профессионала.

1.1.2 Анализ установщиков выбранных систем

Анализ установщика Wordpress

Для того чтобы установить эту систему на свой хостинг, необходимо проделать следующие шаги:

· Скачать архив с системой с официального сайта

· Распаковать архив на локальной машине

· Перейти в созданную папку

· Открыть файл wp-config-sample.php в текстовом редакторе

· Изменить значения php-переменных на соответствующие конкретному хостингу

· Сохранить изменения

· Переименовать файл wp-config-sample.php в wp-config.php

· Загрузить все файлы на сервер с помощью FTP-клиента

· Открыть в браузере /wp-admin/install.php

· Пройти процедуру первоначальной настройки

Анализ установщика Joomla

Для того чтобы установить эту систему на свой хостинг, необходимо проделать следующие шаги:

· Скачать архив с системой с официального сайта

· Распаковать архив на локальной машине

· Загрузить все файлы на сервер с помощью FTP-клиента

· Открыть в браузере /index.php

· Пройти процедуру предустановки

· Скопировать предложенный текст файла конфигурации в буфер обмена

· Создать файл configuration.php

· Открыть файл

· Вставить текст конфигурации в него

· Сохранить изменения

· Загрузить файл на сервер в директорию установленной системы

· Удалить директорию installation с сервера

Анализ установщика Drupal

Для того чтобы установить эту систему на свой хостинг, необходимо проделать следующие шаги:

· Скачать архив с системой с официального сайта

· Распаковать архив на локальной машине

· Скопировать файл default.settings.php в settings.php

· Загрузить все файлы на сервер с помощью FTP-клиента

· Установить права на запись для файла settings.php

· Установить права на запись для директории sites/default/

· Пройти процедуру первоначальной настройки

· Убрать права на запись для файла settings.php

Анализ установщика Ucoz

Система Ucoz не предоставляет возможности установки на сервер пользователя. Сайты создаются путем регистрации на сайте. Во время регистрации необходимо вводить конфиденциальные данные: имя, фамилию, дату рождения. После регистрации открывается доступ к панели управления, в которой можно создать сайт. Ресурсы под сайт предоставляет сама система.

1.1.3 Анализ серверной части выбранных систем

В системе Wordpress данные о структуре и содержимое сайта хранятся в базе данных. В установочной директории находится ядро системы, написанное на языке php. В папке wp-content хранятся шаблоны страниц. Различные опции и настройки сохраняются в базе данных.

При этом страницы сайта генерируются «на лету» при обращении по адресу. Это реализуется с помощью специального модуля http-сервера под названием mod_rewrite. При обращении к физически несуществующей странице http://example.com/mypage/ адрес видоизменяется http-сервером, делая обращение не к самой странице, а к специальному php-скрипту, который формирует на выходе страницу, обращаясь к базе данных в поисках содержимого. Этот способ делает создание страниц сайта динамическим.

Кроме текстового содержимого, на сайтах присутствуют и другие типы содержимого: графика, музыка, видео, анимация. Их нецелесообразно хранить в базе данных в силу большой нагрузки на сервер. Поэтому в системе Wordpress они хранятся в директории wp-content/uploads/.

Joomla и Drupal представляют точно такой же подход к управлению системой, различаясь лишь в именах файлов и папок.

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

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

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

В обоих случаях раз в N минут происходит автоматическая генерация статических html страниц сайта. И все последующие обращения к сайту минуют скрипт динамического создания страниц. Это позволяет достичь максимальной скорости работы сайта (в некоторых случаях в стократном размере). При этом могут возникать различные проблемы с динамическим содержимым страниц. К примеру, если автор изменил страницу, то посетители сайта увидят изменения не сразу, а только по прошествии N минут. Для более сложных страниц, содержащих постоянно обновляемое содержимое, управляемое таймерами, задержка может стать катастрофической и привести к неверной работе сайта. Различие в обоих вариантах только в методе хранения кэша. В первом случае запрос идет к базе данных, во втором - к файловой системе. Чтобы произвести запрос в базу данных, необходимо сначала открыть скрипт с файловой системы, поэтому второй вариант оказывается быстрее.

Стоить отметить также излишнюю сложность структуры файлов и папок на сервере после установки системы. Не происходит логического разделения файлов на серверные и клиентские, и не разделяется пользовательское содержимое и системное.

1.1.4 Выводы на основе проведенного анализа

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

· Неудобный установщик системы. Его можно улучшить. Следует убрать лишние действия по установке. Процесс должен приближаться к аналогичному в системе Ucoz, при этом, все еще позволяя пользователю установить систему на свой сервер. Следует скрыть от пользователя шаги по загрузке файлов на FTP, выставлении прав доступа и ручного запуска инсталлятора.

· Динамическое создание страниц сайта. Данный подход является наиболее простым с точки зрения реализации, но наиболее плохим с точки зрения быстродействия. В качестве улучшения этого подхода, необходимо изначально включать полное кэширование страниц в файловую систему, подключая динамику лишь по мере необходимости.

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

1.2 Общая структура системы создания и управления сайтами

управление сайт серверная руководство

После анализа существующих систем, была предложена общая структура системы создания и управления сайтами.

В системе присутствуют два логических блока: серверная часть и клиентская часть.

Клиентская часть решает вопросы взаимодействия системы с пользователем и сокрытия технических деталей функционирования системы.

Серверная часть реализует внутреннюю работу всей системы и предоставляет клиентской части интерфейс для управления системой.

Кроме того, на физическом уровне присутствуют еще два важных блока: база данных и файловая система.

База данных (СУБД) позволяет реализовать внутренние процедуры хранения и доступа к данным.

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

На рисунке 2.1 показана общая схема системы создания и управления сайтами.

Размещено на http://www.allbest.ru/

Рисунок 2.1 - Общая схема системы создания и управления сайтами

1.3 Требования к серверной части системы

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

· Простой установщик системы;

· Полное кэширование в файловую систему;

· Понятная пользователю структура файловой системы;

· Возможность простого и легкого соединения сервера с клиентом в связи с параллельной разработкой;

· Возможность быстрой адаптации системы под различные СУБД.

1.4 Средства разработки серверной части системы создания и управления сайтами

В настоящее время стандартом де-факто для создания веб-содержимого является язык разметки HTML. С помощью него создается логическое разделение содержимого страницы. [4]

Чтобы это содержимое имело наглядный вид, используется язык стилей. Самым популярным решением является CSS.

С первого взгляда эти средства не относятся к серверной части. Но стоит понимать, что так или иначе сервер будет иметь дело с содержимым, поставляемым пользователем с клиентской стороны. А это содержимое будет создано именно в связке HTML+CSS.

Теперь рассмотрим непосредственно серверную часть.

Для создания серверной логики сегодня существуют как минимум четыре достойных варианта: PHP, Python, Ruby, ASP.NET.

Выбор одного из них произведем на основе доступности и популярности. В данном случае очевидным вариантом является PHP. [5] Этот язык программирования является самым популярным языком создания веб-приложений. Он также поддерживается на всех современных платформах.

Среди баз данных для веб-разработки наиболее выделяются MySQL и PostgreSQL. Но в отличие от PostgreSQL, MySQL завоевал свою популярность очень давно. Более того, MySQL как и PHP поддерживается всеми современными платформами. [6]

Для того, чтобы все эти средства могли работать, необходим http-сервер. Самым простым и весьма надежным решением является Apache HTTP Server. Он доступен для большинства операционных систем и, вообще говоря, является самым популярным выбором среди разработчиков. Вторым вариантом мог бы стать Internet Information Services (IIS), но, в силу его привязки к операционной системе Windows и, соответсвенно, высокой цены, он исключается из рассмотрения.

Итак, мы получаем связку технологий и средств разработки, необходимых для создания серверной части системы создания и управления сайтами: HTML, CSS, PHP, MySQL, Apache.

2 Описание серверной части системы создания и управления сайтами

2.1 Структура серверной части

Для удобства разделим серверную часть и установщик. Это возможно сделать, потому что установщик по сути является совершенно независимым модулем.

С учетом заявленных ранее требований, а также рассуждений, указанных ниже, можно представить следующую структуру серверной части на рисунке 3.1.

Размещено на http://www.allbest.ru/

Рисунок 3.1 - Структура серверной части

Данная структура минимизирует усилия по совмещению серверной и клиентской частей за счет наличия между ними всего лишь одного канала связи. Это связь между блоками «Клиент» и «Координатор». Координатор иначе можно назвать интерфейсом для взаимодействия с клиентом.

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

Так как серверная часть будет иметь дело, как с файловой системой, так и с базой данных, следует ввести некоторые абстракции, чтобы уменьшить сложность разработки и повысить масштабируемость системы. Поэтому был добавлен блок «Менеджер хранилища». Общение с ним происходит в рамках таких понятий как «страница», «шаблон», «ресурс». Это всё термины системы создания и управления сайтами. Введение такой прослойки позволяет значительно уменьшить сложность Координатора.

Менеджер хранилища используется внутри Координатора, т.е. его логика доступна только разработчику серверной части. Если в Координаторе имеется некоторая команда «сохранить страницу», то благодаря Менеджеру Хранилища отпадает необходимость описывать всю логику внутри координатора, достаточно просто вызвать подходящий метод Менеджера Хранилища.

Менеджер хранилища в зависимости от ситуации общается с Менеджером базы данных и Генератором сайта.

При инициализации Менеджера Хранилища происходит автоматическая инициализация Менеджера базы данных в соответствии с настройками системы.

Менеджер базы данных позволяет абстрагироваться от языка запросов SQL, что повышает скорость разработки и качество отладки. Более того, введение данной прослойки позволяет выполнить требование адаптации системы под различные СУБД.

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

На уровне реализации были использованы объектно-ориентированные возможности языка PHP для упрощения разработки и понимания системы. Диаграмма классов в данном случае излишня, так как классы использованы только в качестве пространства имен.

Менеджер хранилища содержит множество методов для «смыслового» общения с системой. Например, метод MccGetTemplates ($project_uid) достает из базы данных список шаблонов, соответствующих проекту $project_uid. Такой подход позволяет понизить сложность разработки системы в целом. По большому счету, менеджер хранилища содержит соответствующий метод для каждого действия координатора. Все доступные методы Менеджера Хранилища представлены в таблице 3.1.

Таблица 3.1 - Методы Менеджера Хранилища

Метод

Описание

AddProject ($project_uid)

Добавляет новый проект

AddResource ($uid, $isglobal, $path, $type, $project_uid, $usedin_uid = NULL, $usedin_type = NULL)

Добавляет новый ресурс

AddTemplate ($template_uid, $draft_uid, $creation_time, $modification_time, $object_data, $project_uid)

Добавляет новый шаблон

AddPage ($page_uid, $draft_uid, $template_uid, $creation_time, $modification_time, $page_url, $object_data, $published, $generated_modification_time, $generated_draft_uid, $project_uid)

Добавляет новую страницу

AddDraft ($project_uid, $page_uid, $draft_uid, $template_uid, $creation_time, $modification_time, $object_data, $published)

Добавляет новый черновик для страницы

SaveTemplate ($project_uid, $template_uid, $draft_uid, $modification_time = FALSE, $object_data = FALSE, $new_uid = FALSE)

Изменяет шаблон

SavePageDraft ($project_uid, $page_uid, $draft_uid, $template_uid = FALSE, $modification_time = FALSE, $page_url = FALSE, $object_data = FALSE, $published = FALSE, $new_draftuid = FALSE, $new_pageuid = FALSE)

Изменяет черновик страницы

RemoveResource ($project_uid, $uid, $fromdisk = FALSE)

Удаляет ресурс

RemovePage ($project_uid, $uid, $fromdisk = FALSE)

Удаляет страницу

RemoveTemplate ($project_uid, $uid)

Удаляет шаблон

RemoveDraft ($project_uid, $page_uid, $draft_uid, $fromdisk = FALSE)

Удаляет черновик страницы

GetTemplate ($project_uid, $template_uid, $draft_uid)

Возвращает шаблон

GetPageDraft ($project_uid, $page_uid, $draft_uid)

Возвращает черновик страницы

MccGetPages ($project_uid)

Возвращает список всех страниц проекта

MccGetTemplates ($project_uid)

Возвращает список всех шаблонов проекта

MccGetStatus ($project_uid)

Возвращает общую информацию о проекте

GetResources ($project_uid, $usedin_type = FALSE, $usedin_uid = FALSE)

Возвращает список ресурсов

Посмотрим, как введение Менеджера Хранилища упрощает логику системы в целом. Возьмем команду Координатора для удаления шаблона.

 // Remove template

case «template_remove»:

{

if (! isset ($_POST['project_uid'])) $project_uid = «default»;

else $project_uid = $_POST ['project_uid'];

$template_uid = $_POST ['template_uid'];

echo $stm->RemoveTemplate ($project_uid, $template_uid);

}

break;

В данном представлении использован Менеджер Хранилища. Теперь попробуем вставить логику Менеджера прямо в Координатор.

 // Remove template

case «template_remove»:

{

if (! isset ($_POST['project_uid'])) $project_uid = «default»;

else $project_uid = $_POST ['project_uid'];

$template_uid = $_POST ['template_uid'];

 // Checking if input is correct

if (! valcheck:isuid ($project_uid) ||! valcheck:isuid($uid))

{

echo «Bad input»;

}

$this->dbm->SelectDatabase ($this->db_name);

$project_id = $this->getIdByUid ($this->db_tables_projects, 'project_uid', $project_uid);

 // Removing template

$table_name = $this->db_tables_templates;

$condition = array ('template_uid'=>$uid,

'project_id'=>$project_id);

$this->dbm->RemoveData ($table_name, $condition);

echo «OK»;

}

break;

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

Менеджер базы данных на уровне кода состоит из интерфейса IDbm, который реализуется соответсвующим определенной СУБД классом. В данной версии системы это MysqlDbm, который реализует СУБД MySQL. Интерфейс позволяет в будущем нарастить число поддерживаемых СУБД путем реализации его вторично. При этом уже существующая логика системы не будет нарушена, так как интерфейс гарантирует наличие сходного функционала в производных от него классах.

Рассмотрим этот момент более детально. Ниже представлен данный интерфейс.

interface IDbm

{

function __construct ($host, $user, $password);

function __destruct();

 // Removes db

function RemoveDatabase ($db_name);

 // Creates new db

function CreateDatabase ($db_name);

 // Makes db active

function SelectDatabase ($db_name);

 // Executes multiple queries from.sql file

function ExecQueryFromFile ($file_name);

 // Adds row of data, $values is an array

function AddData ($table_name, $values);

 // Executes sql query

function ExecQuery($query);

 // Upadate data

function UpdateData ($table_name, $new_data, $condition = NULL);

 // Get one row of data with equality condition

function GetData ($what, $from, $condition = NULL);

 // Removes data with equality condition

function RemoveData ($from, $condition = NULL);

 // Get all rows of data with equality condition

function GetAllData ($what, $from, $condition = NULL);

 // Gets number of rows by equality condition

function GetCount ($from, $condition = NULL);

}

Для реализации поддержки системой создания и управления сайтами СУБД MySQL, необходимо реализовать данный интерфейс. Т.е. создать производный от данного интерфейса класс, в котором существуют все перечисленные методы. Если эти методы будут реализованы правильно, то система обретет поддержку новой БД. Для примера возьмем метод Менеджера Хранилища для удаления шаблона.

 // Removes template

function RemoveTemplate ($project_uid, $uid)

{

 // Checking if input is correct

if (! valcheck:isuid ($project_uid) ||! valcheck:isuid($uid))

{

return «Bad input»;

}

$this->dbm->SelectDatabase ($this->db_name);

$project_id = $this->getIdByUid ($this->db_tables_projects, 'project_uid', $project_uid);

 // Removing template

$table_name = $this->db_tables_templates;

$condition = array ('template_uid'=>$uid,

'project_id'=>$project_id);

$this->dbm->RemoveData ($table_name, $condition);

return «OK»;

}

Как видно, он использует метод Менеджера базы данных RemoveData. При этом нет никакой привязки к конкретному типу БД, потому что поддержка всех баз данных реализована через общий интерфейс. Поэтому при добавлении новой БД изменять логику Менеджера Хранилища не требуется, что в разы сокращает время разработки и отладки.

Описание методов интерфейса представлено в таблице 3.2.

Таблица 3.2 - Методы интерфейса IDbm

Метод

Описание

__construct ($host, $user, $password)

Подключение к базе данных

__destruct()

Отключение от базы данных

RemoveDatabase ($db_name)

Удаление базы данных

CreateDatabase ($db_name)

Создание базы данных

SelectDatabase ($db_name)

Выбор рабочей базы данных

ExecQueryFromFile ($file_name)

Выполнение sql-сценария из файла

AddData ($table_name, $values)

Добавление строки данных в таблицу

ExecQuery($query)

Выполнение sql-запроса

UpdateData ($table_name, $new_data, $condition = NULL)

Обновление существующих данных

GetData ($what, $from, $condition = NULL)

Возвращение строки данных

RemoveData ($from, $condition = NULL)

Удаление данных

GetAllData ($what, $from, $condition = NULL)

Возвращение всех строк данных

GetCount ($from, $condition = NULL)

Возвращение числа строк данных

Генератор сайта также позволяет упростить логику систему. Именно он реализует функцию полного кеширования страниц сайта в файловую систему. В таблице 3.3 представлены методы Генератора.

Таблица 3.3 - Методы Генератора сайта

Метод

Описание

GeneratePage ($url_name, $page_data, $template_data, $old_url_name = FALSE)

Компанует страницу из содержимого и шаблона и записывает готовую страницу в файловую систему

RemovePage ($url_name)

Удаляет страницу

RemoveResourceFile($path)

Удаляет файл ресурса

Менеджеру Хранилища не требуется самому обращаться к файловой системе. Достаточно вызвать соответсвующий метод Генератора. Также вся логика совмещения содержимого страниц и соответсвующих шаблонов переносится на Генератор сайта. Генератор сам определяет, требуется ли создавать структуру файловой системы или она уже присутствует. Также он сам обрабатывает специальный формат содержимого и сопоставляет части содержимого и предназначенные для него места в шаблоне. При этом затраты на отладку данных действий в Менеджере Хранилища сходят до нуля и переносятся в Генератор, а в силу многократного использования методов Генератора, отладка всей системы заметно упрощается.

Рассмотрим на примере связь всех этих модулей между собой. Допустим, клиент хочет сохранить черновик страницы. Он обращается к Координатору с командой «page_savedraft». Координатор обрабатывает запрос и вызывает метод Менеджера Хранилища «SavePageDraft». Менеджер Хранилища обрабатывает данные и выбирает базу данных с помощью метода «SelectDatabase» Менеджера базы данных. Далее Менеджер Хранилища обновляет данные с помощью метода «UpdateData» Менеджера базы данных. Далее происходит публикация страницы. Для этого с помощью метода «GetData» Менеджер Хранилища производит выборку шаблона и страницы, и вызывает метод Генератора сайта «GeneratePage», который обновляет страницу в файловой системе. В конце Координатор возвращает статус «ОК», сигнализирующий об успешном выполнении команды. Описанный выше процесс изображен на рисунке 3.2. Пунктирный стрелки обозначают возврат результатов запросов к модулям. На их основе формируется возврат Координатора.

Размещено на http://www.allbest.ru/

Рисунок 3.2 - Структура серверной части

Помимо основных логических модулей, в системе присутствуют вспомогательные библиотеки, которые вынесены в специальную папку lib. Их выделение основано на независимости от основной структуры системы, в силу чего они могут быть использованы в различных ее частях несколько раз.

2.2 Структура базы данных

База данных была спроектирована на основе существующих в системе логических элементов: страниц (pages), шаблонов (templates), ресурсов (resources) и самого проекта (projects).

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

После согласования с клиентской частью удалось выделить дополнительные логические единицы: черновики (drafts). Предполагалось наличие черновиков у страниц, а также планировалось внедрение черновиков в шаблоны в будущем. Также планировалась реализация поддержки множества сайтов в рамках одной системы создания и управления сайтами (каждый сайт при этом выделялся в логическую единицу «проект»).

На основе этих рассуждений была предложена структура базы данных. Ее диаграмма сущность-связь предоставлена на рисунке 3.3. При этом наименование «projectx» означает кодовое имя проекта и не имеет отношения к базе данных как таковой.

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

Рисунок 3.3 - Диаграмма базы данных системы

Описание структуры всех таблиц базы данных представлено в таблицах 3.4 - 3.10.

Во главе структуры находится таблица projects. У каждого проекта есть уникальное имя, которое записывается в текстовое поле project_uid.

В каждом проекте присутствуют страницы. Они представлены таблицей pages. В поле page_uid содержится уникальное имя страницы. Project_id определяет к какому проекту относится данная страница. Поле page_url задает под каким именем будет видна страница в строке браузера. Поля generated_modification_time и generated_draft_uid используются для сохранения времени последней генерации данной страницы и имени последнего сгенерированного черновика. Они позволяют не генерировать данную страницу повторно в случае наличия самой последней версии.

У страницы предполагается наличие нескольких черновиков. Они хранятся в таблице page_drafts. Поле draft_uid представляет уникальное имя черновика. Template_id указывает какой шаблон был использован при создании черновика. Creation_time и modification_time хранят время создания черновика и его последней модификации. Эти данные используются для генерации страниц. А также могут использоваться как справочная информация клиентом. Поле object_data типа TEXT содержит саму страницу.

Шаблоны хранятся в таблице templates. Поле template_uid содержит уникальное имя шаблона. В project_id указывается принадлежность определенному проекту.

Черновики для шаблонов находятся в таблице template_drafts. Где draft_uid содержит уникальное имя черновика. Внешний ключ template_id задает принадлежность черновика определенному шаблону. Creation_time и modification_time хранят время создания черновика и его последней модификации. Они могут использоваться как справочная информация клиентом. Поле object_data типа TEXT содержит сам шаблон.

Ресурсы хранятся в таблице resources. Поле resource_uid содержит уникальное имя ресурса, project_id указывает принадлежность ресурса проекту. В поле path указывается путь до файла ресурса. В поле data_type сохраняется тип ресурса (формат изображения или другая информация). Поле isglobal булевского типа определяет, является ли ресурс глобальным.

С ресурсами связана таблица resource_usedin, с помощью которой определяется, где задействован ресурс. Поле resource_id указывает какой ресурс имеется ввиду. Usedin_type определяет тип содержимого, в котором задействован ресурс: страница или шаблон. Usedin_id является внешним ключом на содержимое, в котором задействован ресурс. Глобальные ресурсы не отмечаются в этой таблице.

Таблица 3.4 - Описание структуры таблицы projects

Поле

Содержание

Тип данных

Размер

id

Уникальный числовой идентификатор записи

INT

10

project_uid

Уникальное имя проекта

VARCHAR

256

Таблица 3.5 - Описание структуры таблицы pages

Поле

Содержание

Тип данных

Размер

id

Уникальный числовой идентификатор записи

INT

10

page_uid

Уникальное имя страницы

VARCHAR

256

generated_modification_time

Время последней генерации страницы

INT

12

generated_draft_uid

Имя последнего сгенерированного черновика

VARCHAR

256

page_url

Имя страницы, видимое в адресной строке браузера

VARCHAR

256

project_id

Идентификатор проекта, в котором находится страница

INT

10

Таблица 3.6 - Описание структуры таблицы page_drafts

Поле

Содержание

Тип данных

Размер

id

Уникальный числовой идентификатор записи

INT

10

draft_uid

Уникальное имя черновика страницы

VARCHAR

256

template_id

Идентификатор используемого в черновике щаблона

VARCHAR

256

creation_time

Время создания черновика

INT

12

modification_time

Время последней модификации черновика

INT

12

object_data

Содержимое страницы для данного черновика

TEXT

published

Опубликованность черновика

TINYINT

1

page_id

Идентификатор связанной с черновиком страницы

INT

10

Таблица 3.7 - Описание структуры таблицы templates

Поле

Содержание

Тип данных

Размер

id

Уникальный числовой идентификатор записи

INT

10

template_uid

Уникальное имя шаблона

VARCHAR

256

project_id

Идентификатор проекта, в котором находится страница

INT

10

Таблица 3.8 - Описание структуры таблицы template_drafts

Поле

Содержание

Тип данных

Размер

id

Уникальный числовой идентификатор записи

INT

10

draft_uid

Уникальное имя черновика шаблона

VARCHAR

256

creation_time

Время создания черновика

INT

12

modification_time

Время последней модификации черновика

INT

12

object_data

Содержимое шаблона для данного черновика

TEXT

Таблица 3.9 - Описание структуры таблицы resources

Поле

Содержание

Тип данных

Размер

id

Уникальный числовой идентификатор записи

INT

10

resource_uid

Уникальное имя ресурса

VARCHAR

256

isglobal

Является ли черновик глобальным или локальным

TINYINT

1

path

Путь в файловой системе до файла черновика

TEXT

data_type

Тип ресурса

VARCHAR

10

project_id

Идентификатор проекта, в котором находится ресурс

INT

10

Таблица 3.10 - Описание структуры таблицы resource_usedin

Поле

Содержание

Тип данных

Размер

id

Уникальный числовой идентификатор записи

INT

10

resource_id

Идентификатор ресурса

INT

10

usedin_id

Идентификатор страницы или шаблона, в котором используется ресурс

INT

10

usedin_type

Тип содержимого в котором используется ресурс (страница или шаблон)

CHAR

1

2.3 Структура файловой системы

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

Вследствие наличия в ССУС логических блоков «клиентская часть» и «серверная часть», разумно ввести такое же разделение и на уровне файловой системы.

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

Также следует выделить отдельно инсталлятор, хотя он и не включается в непосредственно систему после установки.

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

В результате мы получаем следующие папки.

· client Папка клиентской части

· server Папка серверной части

· installer Папка установщика системы

· site Папка сайта

· uploads Папка для загрузки файлов

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

Папку server должна внутри быть организована в соответствии со структурой серверной части.

После этих уточнений представим более полную структуру файловой системы.

· client Папка клиентской части

· server Папка серверной части

o dbm Папка менеджера базы данных

o generator Папка генератора сайта

o stm Папка менеджера хранилища

o coordinator Папка координатора

· installer Папка установщика системы

· site Папка сайта

· uploads Папка для загрузки файлов

· config Файл конфигурации системы

2.4 Интерфейс для взаимодействия с клиентом

Интерфейс представляет собой php-скрипт с именем coordinator.php. В структуре серверной части он называется Координатором. Для взаимодействия, клиент должен вызвать данный скрипт, передав ему список параметров (вместе со значениями) с помощью метода POST. Какие именно параметры необходимо передать зависит от решаемой задачи.

Но существует обязательный параметр «cmd». Именно он определяет тип выполняемого действия. Каждый тип может иметь список дополнительных параметров, некоторые из которых можно опускать, а некоторые необходимы для выполнения действия.

Интерфейс оперирует понятиями «страница», «шаблон», «ресурс».

На рисунке 3.4 представлена схема взаимодействия между интерфейсом и клиентом.

Размещено на http://www.allbest.ru/

Рисунок 3.4 - Схема взаимодействия между интерфейсом и клиентом

В таблице 3.11 перечислены команды Координатора.

Таблица 3.11 - Команды Координатора

Команда

Описание

project_add

Добавление нового проекта

resource_add

Добавление нового ресурса

template_add

Добавление нового шаблона

page_add

Добавление новой страницы

template_save

Сохранение изменений в шаблоне

page_savedraft

Сохранение изменений в черновике страницы

page_adddraft

Добавление нового черновика страницы

resource_remove

Удаление ресурса

page_remove

Удаление страницы

page_removedraft

Удаление черновика страницы

template_remove

Удаление шаблона

template_get

Возвращение содержимого шаблона

page_getdraft

Возвращение содержимого черновика страницы

mcc_get_pages

Возвращение списка страниц

mcc_get_templates

Возвращение списка шаблонов

mcc_get_status

Возвращение информации о проекте

resources_get

Возвращение списка ресурсов

Подробное описание команд находится в документации к серверной части.

При таком подходе, для создания клиентской части не требуется знания структуры и принципов работы сервера.

2.5 Удаленный установщик

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

Чтобы избавиться от этих сложных и трудоемких для пользователя действий, введем понятие «удаленного установщика».

Удаленный установщик позволяет установить систему на любой доступный по сети сервер, при этом сам он может находиться на совершенно независимом сервере. Это позволяет реализовать установку системы прямо с сайта поставщика.

В процессе установки пользователь должен ввести некоторые необходимые для установки данные. Основываясь на средствах, используемых в системе, можно выделить эти данные:

· Имя сайта;

· Имя FTP хоста;

· FTP порт;

· FTP логин;

· FTP пароль;

· Корневая директория сайта на FTP;

· Имя хоста СУБД;

· Логин СУБД;

· Пароль СУБД;

· Имя базы данных.

Все эти данные пользователь получает при покупке хостинга.

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

Схема удаленного установщика представлена на рисунке 3.5.

Размещено на http://www.allbest.ru/

Рисунок 3.5 - Схема удаленного установщика

На уровне реализации весь процесс состоит из нескольких этапов:

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

2. Пользователь нажимает кнопку установки.

3. Запускается установочный php-скрипт с параметрами, введенными пользователем.

4. Происходит соединение с FTP сервером.

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

6. Скрипт проходит по списку и загружает необходимые файлы и папки, выставляя права доступа по умолчанию.

7. Скрипт генерирует файл настроек системы, адаптированный под сервер пользователя.

8. Файл настроек загружается на сервер пользователя.

9. Загруженным файлам и папками устанавливаются специальные права, необходимые для успешной установки системы.

10. Удаленно запускается скрипт установки системы.

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

12. Система готова к работе.

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

3 Тестирование серверной части

3.1 Тестирование интерфейса для взаимодействия с клиентом

В связи со сложностью системы, было решено автоматизировать тестирование. Для этого был написан специальный php-скрипт, который автоматически выполнял все заданные в нем прецеденты. Сами прецеденты состоят из команд к координатору. В случае успешного прохождения прецедента, на экран выводится фраза «ОК» или результат возврата. В противном случае выводится код ошибки и завершается выполнение тестирования.

Тестирование можно производить как в простом, так и в подробном режиме. Подробный режим выводит помимо сообщений о результатах прохождения прецедентов, также выводит краткое содержимое базы данных. Оно позволяет более детально проследить изменения, которые были произведены.

Ниже приводится отчет успешного прохождения автоматической системы тестирования. Исходный код системы тестирования можно найти в приложении В.

Для лучшего понимания вывода системы, предлагается таблица 4.1 с описанием всех произведенных шагов.

Таблица 4.1 - Описание шагов автоматической системы тестирования

Шаг

Описание

1

Изначальное состояние системы

2

Добавлен проект по-умолчанию

3

Добавлен шаблон «Меню, содержимое 1, содежимое 2, копирайт»

4

Добавлена страница «О кроликах»

5

Изменен шаблон «Меню, содержимое 1, содежимое 2, копирайт»

6

Изменена страница «О кроликах»

7

Добавлен шаблон «Содержимое и копирайт»

8

Добавлена страница «О кошечках and dogs»

9

Добавлена страница «Заготовочка о пушистиках»

10

Добавлен ресурс «01.mid»

11

Удален ресурс «01.mid»

12

Добавлен ресурс «02.mid»

13

Изменен шаблон «Меню, содержимое 1, содежимое 2, копирайт»

14

Изменен черновик по-умолчанию страницы «О кроликах»

15

Удалена страница «О кошечках and dogs»

16

Удален шаблон «О кошечках and dogs»

17

Добавлен черновик «черновичок my» для страницы «О кроликах…»

18

Добавлен черновик «черновичок my2» для страницы «О кроликах…»

19

Удален черновик «черновичок my2» страницы «О кроликах…»

20

Добавлен ресурс «2009-04-13-1239634885_1024x600_scrot.png»

21

Добавлен ресурс «aleaf.jpg»

22

Изменен черновик по-умолчанию страницы «Заготовочка о пушистиках»

23

Запрошено содержимое шаблона «Меню. Содержимое 1. Содежимое 2. Копирайт.»

24

Запрошено содержимое черновика «черновичок my» страницы «О кроликах…»

25

Запрошен список страниц

26

Запрошен список шаблонов

27

Запрошен статус проекта

28

Запрошен глобальный список ресурсов

29

Запрошен список ресурсов для страницы «Заготовочка о пушистиках»

OK

Step 1

Pages

Templates

Template Drafts

Page Drafts

Resources

OK

Step 2

Pages

Templates

Template Drafts

Page Drafts

Resources

OK

Step 3

Pages

Templates

id: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

Page Drafts

Resources

OK

Step 4

Pages

id: 1, page_uid: О кроликах, page_url: bunnies

Templates

id: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

Page Drafts

id: 1, draft_uid: default, page_id: 1 published: 1

Resources

OK

Step 5

Pages

id: 1, page_uid: О кроликах, page_url: bunnies

Templates

id: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

Page Drafts

id: 1, draft_uid: default, page_id: 1 published: 1

Resources

OK

Step 6

Pages

id: 1, page_uid: О кроликах, page_url: bunniesnew

Templates

id: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

Page Drafts

id: 1, draft_uid: default, page_id: 1 published: 1

Resources

OK

Step 7

Pages

id: 1, page_uid: О кроликах, page_url: bunniesnew

Templates

id: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: default, page_id: 1 published: 1

Resources

OK

Step 8

Pages

id: 1, page_uid: О кроликах, page_url: bunniesnew

id: 2, page_uid: О кошечках and dogs, page_url: pets

Templates

id: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: default, page_id: 1 published: 1

id: 2, draft_uid: default, page_id: 2 published: 1

Resources

OK

Step 9

Pages

id: 1, page_uid: О кроликах, page_url: bunniesnew

id: 2, page_uid: О кошечках and dogs, page_url: pets

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: default, page_id: 1 published: 1

id: 2, draft_uid: default, page_id: 2 published: 1

id: 3, draft_uid: default, page_id: 3 published: 0

Resources

OK

Step 10

Pages

id: 1, page_uid: О кроликах, page_url: bunniesnew

id: 2, page_uid: О кошечках and dogs, page_url: pets

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: default, page_id: 1 published: 1

id: 2, draft_uid: default, page_id: 2 published: 1

id: 3, draft_uid: default, page_id: 3 published: 0

Resources

id: 1, resource_uid: 01.mid, isglobal: 0

OK

Step 11

Pages

id: 1, page_uid: О кроликах, page_url: bunniesnew

id: 2, page_uid: О кошечках and dogs, page_url: pets

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: default, page_id: 1 published: 1

id: 2, draft_uid: default, page_id: 2 published: 1

id: 3, draft_uid: default, page_id: 3 published: 0

Resources

OK

Step 12

Pages

id: 1, page_uid: О кроликах, page_url: bunniesnew

id: 2, page_uid: О кошечках and dogs, page_url: pets

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню, содержимое 1, содежимое 2, копирайт

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: default, page_id: 1 published: 1

id: 2, draft_uid: default, page_id: 2 published: 1

id: 3, draft_uid: default, page_id: 3 published: 0

Resources

id: 2, resource_uid: 02.mid, isglobal: 0

OK

Step 13

Pages

id: 1, page_uid: О кроликах, page_url: bunniesnew

id: 2, page_uid: О кошечках and dogs, page_url: pets

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: default, page_id: 1 published: 1

id: 2, draft_uid: default, page_id: 2 published: 1

id: 3, draft_uid: default, page_id: 3 published: 0

Resources

id: 2, resource_uid: 02.mid, isglobal: 0

OK

Step 14

Pages

id: 1, page_uid: О кроликах…, page_url: bunniesnew

id: 2, page_uid: О кошечках and dogs, page_url: pets

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: Крольчатина, page_id: 1 published: 1

id: 2, draft_uid: default, page_id: 2 published: 1

id: 3, draft_uid: default, page_id: 3 published: 0

Resources

id: 2, resource_uid: 02.mid, isglobal: 0

OK

Step 15

Pages

id: 1, page_uid: О кроликах…, page_url: bunniesnew

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: Крольчатина, page_id: 1 published: 1

id: 3, draft_uid: default, page_id: 3 published: 0

Resources

id: 2, resource_uid: 02.mid, isglobal: 0

OK

Step 16

Pages

id: 1, page_uid: О кроликах…, page_url: bunniesnew

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: Крольчатина, page_id: 1 published: 1

id: 3, draft_uid: default, page_id: 3 published: 0

Resources

id: 2, resource_uid: 02.mid, isglobal: 0

OK

Step 17

Pages

id: 1, page_uid: О кроликах…, page_url: bunniesnew

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: Крольчатина, page_id: 1 published: 0

id: 3, draft_uid: default, page_id: 3 published: 0

id: 4, draft_uid: черновичок my, page_id: 1 published: 1

Resources

id: 2, resource_uid: 02.mid, isglobal: 0

OK

Step 18

Pages

id: 1, page_uid: О кроликах…, page_url: bunniesnew

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: Крольчатина, page_id: 1 published: 0

id: 3, draft_uid: default, page_id: 3 published: 0

id: 4, draft_uid: черновичок my, page_id: 1 published: 1

id: 5, draft_uid: черновичок my2, page_id: 1 published: 0

Resources

id: 2, resource_uid: 02.mid, isglobal: 0

OK

Step 19

Pages

id: 1, page_uid: О кроликах…, page_url: bunniesnew

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: Крольчатина, page_id: 1 published: 0

id: 3, draft_uid: default, page_id: 3 published: 0

id: 4, draft_uid: черновичок my, page_id: 1 published: 1

Resources

id: 2, resource_uid: 02.mid, isglobal: 0

OK

Step 20

Pages

id: 1, page_uid: О кроликах…, page_url: bunniesnew

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: Крольчатина, page_id: 1 published: 0

id: 3, draft_uid: default, page_id: 3 published: 0

id: 4, draft_uid: черновичок my, page_id: 1 published: 1

Resources

id: 2, resource_uid: 02.mid, isglobal: 0

id: 3, resource_uid: 2009-04-13-1239634885_1024x600_scrot.png, isglobal: 1

OK

Step 21

Pages

id: 1, page_uid: О кроликах…, page_url: bunniesnew

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1

id: 2, draft_uid: default, temp_id: 2

Page Drafts

id: 1, draft_uid: Крольчатина, page_id: 1 published: 0

id: 3, draft_uid: default, page_id: 3 published: 0

id: 4, draft_uid: черновичок my, page_id: 1 published: 1

Resources

id: 2, resource_uid: 02.mid, isglobal: 0

id: 3, resource_uid: 2009-04-13-1239634885_1024x600_scrot.png, isglobal: 1

id: 4, resource_uid: aleaf.jpg, isglobal: 1

OK

Step 22

Pages

id: 1, page_uid: О кроликах…, page_url: bunniesnew

id: 3, page_uid: Заготовочка о пушистиках, page_url: shushpan

Templates

id: 1, template_uid: Меню. Содержимое 1. Содежимое 2. Копирайт.

id: 2, template_uid: Содержимое и копирайт

Template Drafts

id: 1, draft_uid: default, temp_id: 1


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.