6127

Система управления сайтами. Обзор основных CMS. Создание собственной системы управления контентом

Дипломная

Информатика, кибернетика и программирование

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

Русский

2012-12-29

1.16 MB

158 чел.

Введение

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

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

Необходимость систем управления для владельцев сайтов начала проявляться в тот момент, когда количество материалов на веб-сайтах начало стремительно расти. Это привело к тому, что традиционные «ручные» технологии разработки и поддержки сайтов, когда сайт состоял из статических страниц и набора дополнительных специализированных скриптов, стали не успевать за быстро меняющимися условиями бизнеса. Ввод данных на сайт требовал (как минимум) знания технологий HTML/CSS верстки, изменения структуры сайтов были сопряжены с каскадным изменением большого количества взаимосвязанных страниц. Различные автоматизированные механизмы, вроде гостевых книг и новостных лент, внедренные на сайтах как отдельные скрипты и, как правило, написанные разными специалистами, перестали удовлетворять требованиям безопасности.

Актуальность разработки систем управления сайтом обусловлена необходимостью автоматизировать процесс работы с сайтом. Оперативное обновление (добавление/удаление/редактирование) содержания, настройка модулей системы должны выполняться не разработчиками, а людьми, чьи познания в IT  можно охарактеризвать как "пользователь ПК", т.е. сотрудниками компании.

Цель данного дипломного проекта: «Проектирование и разработка системы управления сайтами»

В процессе дипломного проекта требуется решить следующие задачи:

  1.  Подготовка к разработке системы управления сайтами.
  2.  Необходимость внедрения системы усправления сайтами.
  3.  Обзор и анализ существующих CMS.
  4.  Задачи и функции разрабатываемой системы управления сайтами.
  5.  Проектирование системы управления сайтами.
  6.  Структура организации и хранения данных системы управления сайтами.
  7.  Проектирование модулей управления. 
  8.  Проектирование модулей  пользовательской части.
  9.  Программная реализация системы управления сайтами.
  10.   Алгоритмы системы управления сайтами. 
  11.   Программная реализация модулей управления системы.
  12.   Программная реализация модулей пользовательской части.

   


1 Подготовка к разработке системы УПРАВЛЕНИЯ САЙТАМИ

1.1 Понятие и функции системы управления сайтами

Любой Web-сайт состоит из набора страниц, а различия заключаются лишь в том, как они организованы. Существует два вида организации Web-сайта – статический и динамический. В первом случае специалисты, отвечающие за создание и поддержку сайта, пишут в HTML-форме каждую в отдельности страницу, включая ее оформление и контент. Во втором – в основе любой Web-страницы лежит шаблон, определяющий расположение в окне Web-браузера всех компонентов страницы и вставка конкретной информации производится с использованием стандартных средств, не требующих от участника процесса знания языка HTML и достаточно сложных для неспециалиста процедур публикации Web-страницы.

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

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

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

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

Система управления содержимым/контентом (англ. Content management system, CMS) – компьютерная программа или система, используемая для обеспечения и организации совместного процесса создания, редактирования и управления текстовых и мультимедиа документов (содержимое или контента). Обычно это содержимое рассматривается как неструктурированные данные предметной задачи в противоположность структурированным данным, обычно находящимися под управлением СУБД) [9].

В общем случае CMS делятся на:

ECMS – Enterprise Content Management System (Система управления контентом масштаба предприятия)

WCMS – Web Content Management System (Система управления Web-контентом).

В силу того, что ECMS имеют глубокую внутреннюю классификацию по предметным областям (HRM, DMS, CRM, ERP и т.д.) термин CMS заместил собой WCMS, превратившись в синоним системы управления сайтами. Подобные CMS позволяют управлять текстовым и графическим наполнением веб-сайта, предоставляя пользователю удобные инструменты хранения и публикации информации.

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

Генерация страниц по запросу. Системы такого типа работают на основе связки «Модуль редактирования → База данных → Модуль представления». Модуль представления генерирует страницу с содержанием при запросе на него, на основе информации из базы данных. Информация в базе данных изменяется с помощью модуля редактирования. Страницы заново создаются сервером при каждом запросе, что в свою очередь создаёт дополнительную нагрузку на системные ресурсы. Нагрузка может быть многократно снижена при использовании средств кэширования, которые имеются в современных веб-серверах [1, c. 325].

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

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

Термин контент-менеджер обозначает род профессиональной деятельности – редактор сайта.

Большая часть современных систем управления содержимым реализуется с помощью визуального (WYSIWYG) редактора – программы, которая создаёт HTML-код из специальной упрощённой разметки, позволяющей пользователю проще форматировать текст [10].

1.2 Функции системы управления сайтами

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

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

Управление – хранение контента в едином репозитории. Это позволяет следить за версиями документов, контролировать, кто и когда их изменял, убеждаться, что каждый пользователь может изменить только тот раздел, за который он отвечает. Кроме того, обеспечивается интеграция с существующими информационными источниками и ИТ-системами. CMS поддерживает контроль над рабочим потоком документов, т.е. контроль за процессом их одобрения. Таким образом, управление контентом включает в себя хранение, отслеживание версий, контроль за доступом, интеграцию с другими информационными системами и управление потоком документов.

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

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

Системы управления контентом делятся на четыре основных категории, которые частично перекрываются:

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

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

Системы управления web-контентом представляют собой новую индустрию программных продуктов. Эти системы предназначены для разработки и управления Web-сайтами различной степени сложности. Обычно такие системы поддерживают и некоторый тип управления потоками работ.

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

Использование CMS предоставляет следующие преимущества:

Оперативное обновление информации – информацию публикует сотрудник, владеющий информацией, без дополнительных посредников в виде технических специалистов. CMS предназначены для автоматизации процесс публикации информации на web-сайте, предоставляя пользователям возможность самим публиковать материалы в WWW и определять их визуальное представление, используя для этого стандартные средства, не требующие знания языка HTML и достаточно сложных для неспециалиста процедур. С помощью CMS можно, не будучи профессиональным разработчиком, создавать и модифицировать информационное наполнение сайтов.

Снижение стоимости поддержки – обновление информация производится самостоятельно, нет необходимости оплачивать труд собственного или внешнего web-мастера. Снижение стоимости происходит за счет снижения потерь времени на поиски документов, пресечения дублирования и ошибок, увеличения скорости связи с партнерами и клиентами.

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

Уменьшение сроков и стоимости разработки – наиболее востребованная функциональность уже реализована в CMS и может быть сразу использована.

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

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

Среди CMS-систем часто выделяют так называемые каркасы (content management framework, CMF) – инструментарии для создания системы.

Разработкой систем управления контентом занимаются многие компании, в том числе IBM, Microsoft, Oracle, Macromedia.

Стандартизация CMS.

В последнее время начали появляться организации, пытающиеся объединить разработчиков CMS, создать единую информационную среду для потенциальных пользователей подобных систем, продвигать и утверждать единые стандарты. Прежде всего, это ассоциации OSCOM (Open Source Content Management, и CMSWatch).

OSCOM утвердила такие стандарты, как WebDav, RSS, ATOM и JSR-170.

В свою очередь, CMSWatch ежегодно выпускает отчет, включающий в себя обзор рынка CMS-систем, сравнение некоторых из них, описание жизненного цикла контента и управления им в CMS-системах [8].

Модели представления данных в CMS.

Существует классификация CMS, основанная на модели представления данных – объектной, сетевой или модульной.

Объектная модель.

Объектная модель представления данных оперирует такими понятиями, как класс и объект. Классы определяют структуру данных и представляют собой набор атрибутов (текстовая строка, целое число, изображение и т.д.). Экземпляры класса (объекты) имеют определенную структуру и могут содержать другие объекты, образуя произвольную иерархическую структуру. Объекты могут наследовать свойства, содержание и поведение объектов, которые в них содержатся. Примерами объектов служат документы, картинки, папки и учетные записи пользователей. Класс контента не хранит в себе реальных данных – такую информацию содержат объекты (экземпляры класса). Определив один класс, можно создать множество его представителей (контент объектов).

В CMS-системах данные обычно хранятся в реляционной или объектной базе данных. В первом случае объектная модель данных отображается на реляционную модель базы данных.

Как правило, системы, основанные на объектно-ориентированной модели данных, наиболее функциональные, гибкие, но, в то же время, и наиболее сложные [7, c. 78].

Сетевая модель.

Данная модель представления данных опирается на теорию графов: структура информации представляется в виде узлов с помеченными связями между ними. Фундаментом системы может служить как сетевая, так и традиционная реляционная СУБД, на которую отображена сетевая модель описания данных. В реляционных таблицах хранится информация об узлах, их атрибутах и связях между ними. Связь отличается от атрибута тем, что в ней хранится ссылка на другой узел, а в атрибуте – собственно значение. Для извлечения данных из направленного графа обычно используются рекурсивные процедуры обработки, такие как составление списков узлов, определение атрибутов узла по атрибутам родителя и др.

Модульная модель.

В подобных системах контент разделен на отдельные модули по типам содержимого. Структура данных зависит от модуля, и вся работа с контентом сосредоточена внутри модуля. Модули независимы и полностью отвечают за работу с документами данного типа. Документы описываются с помощью фиксированного набора характеристик – типы документов строго фиксированы. Расширять функциональность можно за счет добавления нового модуля, замены или редактирования существующего кода. Чаще всего нет никакой системы связей между документами разных модулей и между документами одного и того же модуля. Стандартный набор типов контента (модулей) таков: ссылки, статьи, файлы, новости, разделы, форум.

Несмотря на очевидную ограниченность модели данных, системы на ее основе наиболее популярны благодаря своей простоте. У модульных CMS-систем есть один общий недостаток – строго фиксированная в пределах модуля структура содержимого. Однако для расширения их функциональности можно воспользоваться внешними модулями, которых в Сети немало. Очевидное преимущество этих систем – возможность получения почти полностью готового к использованию портала за короткое время. 

1.3 Обзор рынка CMS, выбор в сторону разработки собственного решения

В мире существует множество систем управления контентом. Условно можно выделить три основных класса подобных приложений:

  1.  Системы крупных производителей. Наиболее известными приложениями такого класса являются Microsoft Content Management Server, Documentum, Plumtree Portal, IBM WebSphere Portal и т.д. Стоимость внедрения проектов на базе данных решений составляет от 50 000 у.е. Поэтому сфера их применения очень узкая и ограничивается в основном созданием интранет-решений для крупных предприятий.
  2.  Системы с открытым исходным кодом, например, RedHat CMS и OpenCMS. Преимуществами таких систем является доступность, наличие исходного кода, возможность локализации. Однако их использование связано с определенного рода проблемами:
  3.  Отсутствие техподдержки – системы предлагаются в основном без технической поддержки и все проблемы, связанные с использованием таких систем разработчик должен решать самостоятельно.
  4.  Узкая сфера применения – чаще всего продукт явился побочным результатом решения одной из собственных задач.

Очевидно, что подобное решение может хорошо решать задачи создания такого же рода сайтов, но может быть совершенно неприспособленно для решения задач другого плана (электронная коммерция, b2b и т.д.).

  1.  Разработки небольших компаний, которые применяются на нескольких проектах, созданных непосредственно компанией-разработчиком, их подклассом являются российские разработки. Эти продукты созданы в основном различными web-студиями, имеющими большой опыт в реализации сайтов разных типов. Данные решения занимают промежуточную нишу. Практически все решения являются коммерческими, но с достаточно низкой стоимостью (100-3000$) и могут быть использованы для создания сайтов разных типов.

Zope CMF и iNetSite

Среди объектно-ориентированных CMS-систем можно встретить каркасы. Классический пример – Zope CMF. Вообще, Zope – ведущий свободно распространяемый сервер приложений, специализирующийся на управлении контентом в порталах и пользовательских – приложений. На основе этого сервера приложений построен каркас управления контентом Zope CMF, с помощью которого, в свою очередь, создан целый ряд CMS-систем, в частности, Plone.

На основе сервера приложений Zope разработана отечественная CMS iNetSite (http://www.ramax.ru/services/web_content/inetsite) – комплексный программный продукт, предназначенный для создания и последующего сопровождения веб-сайтов любой сложности и назначения.

eZ Publish

Еще одна очень распространенная объектно-ориентированная CMS – eZ Publish. Системы семейства eZ базируются на свободно распространяемом продукте eZ Publish. Наличие двух лицензий – GPL и профессиональной  позволяет создавать коммерческие продукты на основе каркаса eZ Publish, обеспечивая этой системе поддержку как сообщества Open Source, так и профессиональных разработчиков.

Система eZ Publish предназначена также для создания и управления содержимым Internet-магазина, новостного сайта, фотогалереи или форума.

Платформа: PHP, MySQL, Apache. На этапе инсталляции присутствует мультиязычность (русский язык тоже есть), а очень удобный и продуманный пошаговый инсталлятор позволяет без особых осложнений установить систему на любой хостинг. eZ publish имеет возможность устанавливаться сразу в настроенной конфигурации, соответственно предназначению сайта. Среди конфигураций есть новостной сайт, корпоративный портал, интернет-магазин, блог, форум, галерея изображений и интранет-портал.

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

MS Content Management Server

Microsoft Content Management Server (MCMS) представляет собой систему управления Web-контентом, которая дает возможность создавать, развертывать и поддерживать динамично меняющиеся Web-сайты. Благодаря интеграции с Visual Studio .NET и поддержке функций управления исходными кодами, MCMS позволяет разработчикам создавать сайты, которые потом могут управляться и поддерживаться как ИТ-специалистами, так и бизнес-пользователями. Первые могут централизованно управлять брэндингом, рабочим потоком документов и безопасностью, тогда как вторые – создавать собственный контент, управлять им и публиковать его, используя знакомые приложения, такие как Word или Internet Explorer.

Объектная модель поддерживает разработку в среде Visual Studio .Net и .Net Framework. Возможно объединение через Microsoft Solutions for Internet Business (MSIB) Content Connector с сервером Microsoft Commerce Server для создания решений в области электронной коммерции.

Content Management Server 2002 позволит публиковать материалы непосредственно из Microsoft Word, взаимодействовать с другими системами, производить быстрое развертывание, управлять цифровыми хранилищами и идентификацией, осуществлять перевод Web-серверов, XML-редактирование и поиск.

Communiware

Communiware (http://www.communiware.ru) соответствует сетевой модели представления данных. Эта система представляет собой инструментарий нового поколения для создания вертикальных Web-сайтов и порталов.

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

Рекомендуется его для проектов среднего масштаба, где важна гибкость системы.

Функционирует под ОС Unix, с использованием СУБД Oracle или PostgreSQL.

Предназначен для поддержки корпоративных сайтов, электронных СМИ, электронных магазинов, порталов.

Для некоммерческих проектов распространяется бесплатно. Для других – 150 у.е.

DynaSite

Система DynaSite (http://www.reksoft.ru/products/dynasite/) ориентирована на управление сложными структурами данных. Возможны следующие варианты поставки:

DynaSite Publishing – предназначен для создания и управления корпоративном сайтом или онлайновым информационным изданием. В базовую комплектацию входят все необходимые компоненты для управления содержанием (созданием сайта и его информационным наполнением). При необходимости дополняется маркетинговыми инструментами, а также средствами электронной коммерции.

DynaSite Publishing Enterprise Edition – специализированное решение, предназначенное для компаний с разветвленной структурой, позволяющее создать неограниченное число сайтов с различными адресами. При этом все сайты будут объединены в одной базе данных DynaSite и иметь общий список пользователей и настройки.

DynaSite Commerce – позволяет в максимально короткие сроки организовать центр электронной коммерции в сети Интернет. В базовую комплектацию входят все необходимые для электронной торговли модули. Разнообразие опций позволяет использовать систему, как в розничной торговле, так и для создания сложной сбытовой структуры и управления дилерской сетью.

DynaSite Hosting – организовать на одном ядре DynaSite хостинг неограниченного числа независимых друг от друга сайтов и электронных магазинов. Решение для хостинг-провайдеров. Имеет все необходимые средства для управления системой в целом и интеграции с внешними информационными системами.

Работает в серверной ОС Microsoft с СУБД MS SQL Server и web-серверами ColdFusion Application Server, IIS, Apache.

В ядре объединены модули, реализующие базовую функциональность системы:

  •  модуль управления содержанием (Content Management). Включает управление дизайном, структурой, шаблонами страниц. Позволяет полностью контролировать все вопросы, связанные с информационным наполнением сайта;
  •  модуль динамической навигации (Dynamic Navigation) и персонализации (Personalization). Помогает предоставлять клиентам и партнерам именно ту информацию, в получении которой они действительно заинтересованы;
  •  модуль управления доступом и правами пользователей. С его помощью можно организовать и контролировать все рабочие процессы, связанные с созданием сайта, – от дизайна и разработки до редакторской правки и окончательного утверждения.

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

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

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

Предназначена для поддержки корпоративных сайтов, электронных СМИ, электронных магазинов, порталов и интернет-сообществ. Копия системы стоит 1500 у.е.

Saitistika

CMS Saitistika (http://www.saitistika.ru) – коробочный продукт. Ориентирован на дилеров (веб-разработчиков, провайдеров). Преусмотрен франчайзинг.

Работает с ОС Windows Server, web-сервером Internet Information Server и СУБД MS SQL Server.

Предназначена для поддержки корпоративных сайтов, электронных СМИ, электронных магазинов, порталов и интернет-сообществ.

NetCat

Система NetCat (http://www.netcat.ru) ориентирована на управление проектами среднего и высокого уровня сложности.

Использует СУБД Linux/FreeBSD, web-сервер Apache, технологию PHP и СУБД MySQL. Нетребовательна к системным ресурсам, что позволяет использовать ее на маломощных машинах. Стоимость 300 у.е.

PHPNuke

Модульная CMS. Распространяется бесплатно. PHPNuke это универсальная система построения сайта, с текстовым и графическим наполнением. Включает в себя все инструменты, необходимые для создания портала (в широком его понимании). Принимая во внимание большое количество реализованных по умолчанию функций, а так же наличие модулей, произведенных третьими лицами, данная CMS система может быть применена в следующих областях

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

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

Для работы PHP-Nuke требуется:

  •  Платформа на основе Linux или Windows
  •  Apache Web Server
  •  PHP версии 4.2.x или выше
  •  База данных MySQL

Так же система работает и на платформах: FreeBSD, OS/2, MacOS и д.р.; на базах данных: mSQL, PostgreSQL, PostgreSQL_local, ODBC, ODBC_Adabas и д.р.

Mambo и Joomla!

Mambo – одна из самых популярных модульных CMS. В ее состав входит полностью основанный на БД движок с использованием PHP/MySQL. Имеется возможность работы под ОС Linux, FreeBSD, MacOSX, Solaris, AIX, SCO, WinNT, Win2K, однако ее использование в различных ОС имеет свою специфику.

Для создания контента Mambo предоставляет выбор из 3 визуальных редакторов, что упрощает редактирование материалов до уровня редактирования текста в программе Word.

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

Joomla! появилась как результат многолетней работы над ее знаменитой предшественницей Mambo. Команда разработчиков создала Joomla! 1.0 на основе Mambo 4.5.2.3 и здесь пути этих двух систем разошлись. Принципиальных отличий между эти ми двумя CMS нет.

Xoops

Модульная CMS. Полная объектная ориентация всей архитектуры системы (сайту доступно большое количество дополнительных модулей, реализующих почти все необходимые функции). Для создания и управления внешним видом есть мощная система визуальных тем, которых достаточно много в библиотеке на сайте.

Documentum

Documentum – ведущий поставщик коммерческого программного обеспечения для интегрированного управления документами и контентом. В области управления документами его ближайшими соперниками являются Open Text, IBM и FileNet, а в сфере управления контентом – Vignette, Stellent и Interwoven.

В области управления документами решения от Documentum наиболее надежны благодаря возможностям репликации контента и управления им на очень высоком уровне детализации (для переиспользования и перенацеливания), а также поддержке преобразований сложно структурированных документов, расширяемости репозитория и поддержке XML. Важные достоинства Documentum состоят в глубоком знании процессов управления потоком документов, контроля версий и управления архивами. Однако решения Documentum могут оказаться менее эффективными, чем некоторые решения-конкуренты, при обработке представления документов на больших Web-сайтах.

Система Documentum имеет объектно-реляционную архитектуру (т.е. объектная модель данных отображается на реляционную базу данных), поэтому может быть отнесена к объектным CMS-системам.

FileNet

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

Предлагаются следующие пакеты: Business Process Manager – автоматизация сложных бизнес-процессов; Content Manager – управление, совместное использование и доступ к документам или другим формам контента; Web Content Manager – автоматизация создания, одобрения и публикации контента на Web-сайтах; Image Manager – управление фиксированными типами контента, включая изображения, факсы и т.п.

IBM Content Manager

Система IBM Content Manager позволяет организациям получать, хранить, управлять и распространять все формы цифрового контента, включая отсканированные текстовые документы, XML, HTML и мультимедиа. Content Manager – полное интегрированное решение для управления документами, предназначенное для потребителей, которые хотят пользоваться универсальным продуктом одного поставщика.

Другой ключевой момент – возможности управления web-контентом. Корпорация анонсировала объединение Content Manager с WebSphere Portal, который обеспечивает возможности публикации в Web. Теперь Content Manager будет представлять собой репозиторий для WebSphere-портала. Content Manager также объединен с WebSphere Portal с помощью портлетов, позволяющих пользователю получать доступ к контенту всех типов. После приобретения компании Tarian Software, поставщика решений для управления записями, IBM расширила спектр своего ECM-инструментария за счет средств управления жизненным циклом контента.

Модель данных Content Manager – объектно-ориентированная.

Заказчики web-сайтов на основе CMS.

Выбор наиболее подходящей CMS (Content Management System) для проекта или корпоративного сайта в первую очередь зависит от категории заказчика, бюджета, предполагаемой сложности сайта и технического обеспечения.

Предприятия и компании розничной торговли, дилеры.

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

Одним из основных требований является – обеспечить возможность управления веб-сайтом собственными силами, не прибегая к услугам разработчика или стороннего специалиста. Поэтому для данной категории заказчиков критичными являются требования удобства применения. Не менее важным является обеспечение модульности и возможность выбирать, компоновать необходимые функции веб-сайта в зависимости от пожеланий заказчика, а также добавлять новые функции по мере развития веб-сайта.

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

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

Разграничение прав доступа и установление групп пользователей и их полномочий требуются только для сайтов электронной коммерции.

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

Предприятия оптовой торговли.

Также заинтересованы в разработке представительских ресурсов. Освоение сети Интернет начинают, как правило, с создания обычного, зачастую статического сайта.

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

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

Производственные предприятия.

Для данной группы потенциальных заказчиков актуальным является не только создание представительских ресурсов, но и возможность организовать работу (т.н. "виртуальное координирование") с дилерами, поставщиками, партнерами, используя возможности Интернет. Речь об организации сетей internet/intranet, создании дилерских площадок, разработке и внедрении механизмов для проведения электронных торгов, аукционов и тендеров. Что касается последних, то они зачастую организуются в рамках отраслевых порталов.

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

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

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

Предприятия банковской и финансовой сферы.

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

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

Предприятия сферы услуг.

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

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

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

В процессе обзора коммерческих и свободных CMS мы можем наблюдать тенденцию по предоставлению заказчику системы, которая требует навыков программиста, поэтому было решено отказаться от такого подхода и следовать идеологии Microsoft Windows, т.е. система должна быть изначально ориентирована на обычного пользователя ПК.

 


  2 ПРОЕКТИРОВАНИЕ СИСТЕМЫ УПРАВЛЕНИЯ  САЙТАМИ

2.1 Структура организации и хранения данных системы управления сайтами

Структура базы данных приложения отражена на рисунке 2.1.

Рисунок 2.1 – Структура базы данных приложения

Основная идея систем управления контентом – разделение визуального дизайна сайта и его информационного наполнения. При создании сайта с помощью такой системы разрабатывается набор шаблонов страниц, в которых впоследствии размещается информация. В этом случае роль разработчиков (фактически это группа внедрения) ограничивается только созданием "начальной" информационной системы на основе системы управления контентом, затем пользователи сами публикуют требуемую информацию и определяют ее представление. Управление сайтом сводится к минимуму, – администратору остается только управлять пользователями.

Пользователи CMS делятся на две группы – создатели шаблонов страниц и авторы контента (информационного наполнения). Таким образом, одна группа пользователей создает структуру и оформление страниц, а другая наполняет его содержанием (рисунок 2.2).

Рисунок 2.2. – Схема функционирования CMS

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

Сначала группа внедрения разворачивает ядро CMS и создает в СУБД информационное хранилище контента – БД. Далее администратор предоставляет доступ к системе различным пользователям, затем создается контент, он публикуется, и в нем применяются шаблоны оформления [6, c. 317].

Создание контента.

На первом этапе необходимо создать все типы контента и схемы их метаописаний, а также настроить систему на определенный поток работ (если система поддерживает создание потоков работ, а не использует единственный встроенный). Понятие типа контента аналогично понятию класса, а элементы контента представляют собой набор экземпляров таких "классов". Типами контента являются, например, текст и изображение; экземпляром контента конкретный документ или картинка.

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

Кроме управления контентом, система должна предоставлять возможность создавать метаданные о нем. Метаданные – это сведения о данных, свойства данных. Примером метаданных служат ключевые (характерные) слова документов, предназначенные для поисковых или отчетных систем. Системы управления контентом, рассматриваемые в данном обзоре, не поддерживают метаданные, хотя можно специально ввести дополнительные типы контента, представляющие собой метаданные.

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

Кроме непосредственно редактирования элементов контента, необходимо предусмотреть разбиение контента по категориям или рубрикам.

Создание шаблонов оформления.

В качестве решения проблемы представления в системах управления контентом используется технология шаблонов, определяющих внешний вид страницы. Разработчику шаблонов не нужно знать никаких технических тонкостей. На ранних этапах существования WWW шаблоны представляли "заготовки" HTML-кода, из которого путем манипуляций в HTML-редакторе получались готовые страницы. Сегодня такими заготовками манипулируют уже не дизайнеры в своих редакторах, а серверные web-приложения. Таким образом, современный шаблон Web-страницы представляет собой блок HTML, который благодаря специальным тегам или внедренным сценариям, облегчает включение динамически сгенерированного содержания на этапе выполнения. При использовании подобных шаблонов программистам необходим некоторый стандартизированный интерфейс для работы с ними – шаблонный движок (в английском языке существует устоявшийся термин – template engine), который может иметь разнообразные дополнительные функции, например, поддерживать кэширование шаблонов, их динамическое обновление и т.д.

Публикация контента.

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

Типичный процесс публикации информации в World Wide Web реализован в Microsoft Content Management Server. Обычным приемом обеспечения оформления информационного наполнения являются шаблоны представления информации. Поэтому первым этапом процесса является создание наборов шаблонов. Типичный шаблон содержит разметку HTML и места, куда в дальнейшем будут вставлены данные (placeholder'ы в терминологии Microsoft). Далее на основе этих шаблонов авторы информационного наполнения создают страницы и представляют их редакторам для одобрения. Редакторы, в свою очередь, могут либо отклонить страницу и вернуть ее автору на доработку, либо одобрить ее и передать модератору сайта. В первом случае процесс повторяется снова, во втором же модератор сайта проверяет расположение страницы на сайте, дату и срок ее публикации. Если все в порядке, страница становится видна пользователям. Несмотря на то, что рабочий процесс в Microsoft Content Management Server фиксирован и не может быть изменен в дальнейшем, подобное решение подходит большинству пользователей, которым необходимо публиковать информацию в World Wide Web [3, c. 118].

Управление пользователями.

Управление пользователями включает создание, изменение и удаление учетных записей отдельных пользователей и их групп, а также назначение прав для работы с элементами контента. Важной частью требований является наличие пользовательских профилей (profiles), с помощью которых можно сгенерировать персональное представление информации для каждого пользователя. Полезной является и возможность пользователя делегировать свои права. Это позволяет пользователям переназначать исполнителя конкретной работы и избегать простоев из-за отсутствия отдельного лица.

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

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

В самом общем виде архитектуру систем управления Web-контентом можно представить следующим образом (рисунок 2.3).

Рисунок 2.3 – Архитектура CMS

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

В системе присутствует два хранилища. В первом (обычно реляционная СУБД) хранятся все данные, которые публикуются на сайте. Во втором (обычно файловая система) хранятся элементы представления – шаблоны, графические изображения и т.д.

Получая запрос, сервер приложений обрабатывает его, связываясь с хранилищем данных, в каком бы месте необходимые данные не находились. Клиент лишь получает результат в виде HTML-файла. Таким образом, сервер приложений является стандартизованной платформой для динамической доставки контента и построения основных приложений. Серверов приложений может быть много, а связь с ними происходит через Web-сервер.

Рассмотрим пример реализации архитектуры системы управления контентом на примере CMS DotNetNuke 4 (рисунок 2.4).

Рисунок 2.4 – Архитектура CMS на примере DNN

Ядро системы управления контентом представляет собой динамический сайт, созданный на языке Visual Basic.NET с использованием технологи и ASP.NET 2.0. Поэтому для ее функционирования требуется web-сервер с поддержкой этой технологии. В качестве такого сервера может выступать Microsoft Internet Information Services 5 или 6. В качестве хранилища данных CMS DotNetNuke 4 может использовать файловую систему web-сервера и базу данных под управлением СУБД Microsoft SQL Server. Поддерживаются все варианты поставки этой СУБД и версии 2000/2005. СУБД может функционировать как в операционной системе web-сервера, так и на удаленном компьютере. В первом случае возможно использование бесплатных версий MS SQL Server – Microsoft Desktop Engine и Microsoft SQL Server Express 2005.

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

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

  •  Элементы управления ввода информации.
  •  Элементы управления вывода информации.
  •  Элементы управления, которые реализуют логику, которая не относиться к первым двум категориям.

Работа модулей управления системы реализована следующим образом: существует две страницы, страница ввода и страница вывода. В зависимости от того, какой модуль меню выберет пользователь, на страницы будут загружаться соответствующие пользовательские элементы управления (рисунок 2.5).

Рисунок 2.5 Паттерн проектирования Carrier-Rider-Mapper

Общая архитектура продукта построена на паттерне проектирования Carrier-Rider-Mapper.

  •  База данных – носитель информации, к которой могут иметь доступ несколько клиентов одновременно.
  •  Rider (Reader или Writer) – ядро (API) – объекты доступа к хранимой в Carrier информации (интерфейсы доступа к информации). Считывать и записывать информацию, хранимую в Carrier, можно исключительно только посредством объектов типа Rider.
  •  Mapper (Scanner или Formatter) – компоненты – объекты обёртки над Rider. Отвечают за преобразование форматов данных в удобные для клиентов форматы.

Поток информации от носителя к клиенту (считывание): Carrier -> Reader -> Scanner->Client.
Поток информации от клиента к носителю (запись): Carrier <- Writer <- Formatter <-Client.
        Введение прослойки мапперов между Carrier-Rider и клиентами позволяет соединять один и тот же Carrier-Rider с разными типами клиентов посредством соответствующих (разных) мапперов (рисунок 2.6).

Рисунок 2.6 Архитектура продукта

Модульность, API, CMF:

  •  модули представляют собой независимые сборки (dll), файлы ресурсов (стили, картинки), страницы для административного раздела, компоненты (ascx). Также модуль может иметь свою структуру в БД;
  •  все страницы сайта и компоненты написаны с использованием API. Работа с БД напрямую запрещена – доступ к данным возможен только через API модули;
  •  обмен информацией между модулями происходит при помощи системы команд (событий);
  •  при обновлении происходит модификация только файлов продукта, при этом API функции остаются совместимы, поэтому обновление происходит без последствий для публичной части сайта.

Публичный раздел:

  •  структура сайта находится в физических файлах и папках – статика;
  •  страницы – обычные ASPX и могут содержать код (обычно вызов компонентов);
  •  динамический контент (новости, каталог) выводится компонентами из модулей (информационные блоки).

Компоненты:
Составные блоки сайта:

  •  компонент новостей, компонент каталога, компонент поиска и т.д.;
  •  разделение логики (компонент) и представления (шаблон компонента);
  •  компонент лежит в отдельной папке и может содержать ресурсы;
  •  многостраничные компоненты.

Многостраничные компоненты (рисунок 2.7):

Рисунок 2.7  Набор взаимосвязанных страниц

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

  •  приходится создавать множество страниц для размещения компонентов;
  •  приходится настраивать свойства каждого из компонентов (в том числе пересекающиеся);
  •   связи между компонентами либо жестко зашиты в код компонентов (что не универсально), либо сложны для настройки;
  •  нет возможности автоматически добавить новую страницу в смысловой блок (в публичной части).

Недостатки реализации одним большим компонентом:

  •  нет возможности использовать составные части по отдельности;
  •  дублирование кода.

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

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

Страницы системы:

  •  MasterPage.master;
  •  Default.aspx.

MasterPage – базовая страница приложения. Данную страницу наследуют (реализуют) все страницы пользовательской части. В этот контейнер помещаются необходимые контролы или модули в зависимости от страницы на которую заходит посетитель, то что необходимо вставить определяет PageModule.

Default.aspx – стартовая страница приложения.

Элементы управления и модули системы:

  •  BannerBlock.ascx;
  •  LastNews.ascx;
  •  SearchControl.ascx;
  •  SiteMapControl.ascx;
  •  SubscriptionControl.ascx;
  •  VoteQuestionControl.ascx;
  •  Feedback.aspx;
  •  ViewArticles.aspx;
  •  ViewNews.aspx;
  •  Error.aspx;
  •  Print.aspx;
  •  Login.aspx.

BannerBlock.ascx – банерный блок.

LastNews.ascx – блок из последних новостей.

SearchControl.ascx  – элемент управления для поиска по сайту.

SiteMapControl.ascx – элемент управления отображает карту сайта по связям страниц.

SubscriptionControl.ascx – модуль подписки на новости.

VoteQuestionControl.ascx – модуль для проведения опросов.

Feedback.aspx – форма обратной связи.

ViewArticles.aspx – блок, куда выводиться содержание статьи.

ViewNews.aspx – блок, куда выводиться содержание новости.

Error.aspx – блок, куда выводиться содержание ошибки.

Print.aspx – версия печати для статьи или новости.

Login.aspx – форма авторизации.

    


3 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СИСТЕМЫ УПРАВЛЕНИЯ  САЙТАМИ

3.1 Алгоритмы системы управления сайтами

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

namespace Cleopatra.Objects

{

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

 public abstract class Entity : IEntity

{

Идентификатор.

 #region Свойство ID

 public int ID

 {

  get { return _ID; }

 }

 [Mapped(true)]

 protected int _ID;

 #endregion

Для увеличения производительности за счет метода Метод GetHashCode, он предназаначен для получения некоторого числа (хэш-кода), которое используется обычно для получения быстрого доступа к элементу некоторой "структуры" (нет никакой параллели со struct), подобной System.Collections.Hashtable.

 public override int GetHashCode()

 {

  if (_ID > 0)

   return _ID;

  return base.GetHashCode();

 }

}

}

namespace Cleopatra.Objects

{

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

 public interface IEntity

{

Имя объекта.

 

 int ID { get; }

}

}

namespace Cleopatra.Objects

{

Cущность.

internal sealed partial class Essence : Entity, IComparable<Essence>, IDisposable, IKey, IName

 {

Название столбца для данной сущности (по умолчанию "Name").

 #region Свойство ColumnName

 public string ColumnName

 {

  get

  {

   if (_ColumnName == string.Empty)

    return "Name";

   return _ColumnName;

  }

 }

 [Mapped]

 private string _ColumnName;

 #endregion

Ссылка, ведущая с рабочего стола (по умолчанию "Records.aspx?table=" + _Key).

 #region Свойство URL

 public string URL

 {

  get

  {

   if (_URL == string.Empty)

    return "Records.aspx?table=" + _Key;

   return _URL;

  }

 }

 [Mapped]

 private string _URL;

 #endregion

Является ли данная сущность мапируемой сущностью.

 #region Свойство IsEntity

 public bool IsEntity

 {

  get

  {

   return ((_Key != string.Empty) || (_URL == string.Empty));

  }

 }

 #endregion

Будут ли отображены объекты сущности на рабочем столе.

 #region Свойство IsDesktop

 public bool IsDesktop

 {

  get

  {

   if (_IsEnabled == false)

    return false;

   return _IsDesktop;

  }

  set { _IsDesktop = value; }

 }

 [Mapped]

 private bool _IsDesktop;

 #endregion

Возвращает true, если пользователь с ID = userID имеет доступ к данной сущности.

 public bool GetAccess(int userID)

 {

  if (userID == Auth.AdminID)

   return true;

  List<User2Essence> AL = App.Storage.GetList<User2Essence>();

  foreach (User2Essence Item in AL)

   if ((Item.EssenceID == _ID) && (Item.UserID == userID))

    return true;

  return false;

 }

 #region Реализация IKey

 public string Key

 {

  get

  {

   if (_Key == string.Empty)

    return _Name;

   return _Key;

  }

  set { _Key = value; }

 }

 [Mapped]

 private string _Key;

 #endregion

}

}

namespace Cleopatra.Objects

{

Элемент алфавитного указателя.

[Logable]

public sealed partial class Index : Entity, IComparable<Index>, IName, IRow, ISearchable

{

Конструктор.

 public Index() { }

Текст. HTML код.

 

 #region Свойство Text

 public string Text

 {

  get { return _Text; }

  set { _Text = value; }

 }

 [Mapped]

 private string _Text;

 #endregion

 #region Реализация IName

 public string Name

 {

  get { return _Name; }

  set { _Name = value; }

 }

 [Mapped]

 private string _Name;

 #endregion

 #region Реализация IDate

 public DateTime DateModify

 {

  get { return _DateModify; }

  set { _DateModify = value; }

 }

 [Mapped]

 private DateTime _DateModify;

 #endregion

 #region Реализация ISearchable

 string[] ISearchable.Data

 {

  get

  {

   return new string[] { _Name, _Text };

  }

 }

 string ISearchable.URL

 {

  get

  {

   return string.Format("view{0}.aspx?ID={1}", this.GetType().Name, _ID);

  }

 }

 #endregion

 #region Реализация IComparable

 int IComparable<Index>.CompareTo(Index other)

 {

  return _Name.CompareTo(other._Name);

 }

 #endregion

}

}

3.2 Программная реализация модулей управления 

Т.к. объем всех алгоритмов модулей управления системы очень велик в данной главе будут описаны только основные модули.

Модуль редактирования статей.

namespace Cleopatra.UI.CMS

{

Страница редактирования Article.

public partial class EditArticle : TranslateblePage

{

 protected BoxText tbTags;

 protected BoxText tbName;

 protected BoxHTML tbText;

 protected Label lbKey;

 protected CheckBox cbProtect;

 protected void Page_Load(object sender, EventArgs e)

 {

  if (!IsPostBack)

   BindData();

 }

 private void BindData()

 {

  cbProtect.Visible = (Auth.CurrentUserID == Auth.AdminID);

  int ID = FooID;

  if (ID == -1)

   return;

  Article Node = App.Storage.GetItem<Article>(ID);

  tbName.Value = Node.Name;

  tbText.Value = Node.Text;

  tbTags.Value = Node.Tags;

  lbKey.Text = Node.Key;

  cbProtect.Checked = Node.IsProtect;

 }

 protected void btnSave_Click(object sender, EventArgs e)

 {

  if (this.IsValid == false)

   return;

  Article Node;

  int ID = FooID;

  if (ID == -1)

   Node = new Article();

  else

  Node = App.Storage.GetItem<Article>(ID);

  Node.Name = tbName.Value;

  Node.Text = tbText.Value;

  Node.Tags = tbTags.Value;

  Node.IsProtect = cbProtect.Checked;

if (Node.ID == 0)

{

Node.Key = GetUnique(TextJet.Translit(Node.Name, 36).ToLower(), 0);

App.Storage.Create(Node);

Page NewPage = new Page();

NewPage.Content = Cleopatra.Services.ContentType.Article;

   NewPage.Key = Node.Key;

   NewPage.Name = Node.Name;

   App.Storage.Create(NewPage);

Добавляет доступ для всех пользователей.

  User2Page Up;

  List<User> AL = App.Storage.GetList<User>();

  foreach (User Item in AL)

  {

   Up = new User2Page();

if

(Item.Name.Equals(Auth.GUEST_NAME,StringComparison.OrdinalIgnoreCase)==true)

 Up.UserID = Auth.GuestID;

    else

    Up.UserID = Item.ID;

    Up.PageID = NewPage.ID;

    App.Storage.Create(Up);

   }

  }

  else

   App.Storage.Update(Node);

string RedirectURL = "Records.aspx?table=" + typeof(Article).Name;

  Response.Redirect(RedirectURL);

 }

Возвращает уникальный URL для статьи, на уровне сайта.

 private string GetUnique(string value, int postNum)

 {

  string NewName = value;

  if (postNum > 0)

   NewName += postNum.ToString();

Проверка: нет ли уже статьи с таким Key.

  List<Article> Arts = App.Storage.GetList<Article>();

  foreach (Article Item in Arts)

   if (Item.Key == NewName)

    return GetUnique(value, ++postNum);

Проверка: нет ли уже подобного модуля.

string Folder = Server.MapPath("~/") + App.FOLDER_MODULES;

foreach (string Item in Directory.GetFiles(Folder, "*.aspx"))

  {

if (NewName == Path.GetFileNameWithoutExtension(Item).ToLower())

    return GetUnique(value, ++postNum);

  }

  return NewName;

 }

Для прав доступа.

 #region Свойство EssenceType

 public override Type EssenceType

 {

  get { return typeof(Article); }

 }

 #endregion

}

}

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

namespace Cleopatra.UI.CMS

{

Страница редактирования User.

public partial class EditUser : TranslateblePage

{

 protected BoxText tbName;

 protected BoxText tbPassword;

 protected BoxText tbCopy;

 protected HtmlContainerControl trCMS;

 protected HtmlContainerControl trPages;

 protected HtmlContainerControl trPassword;

 protected System.Web.UI.WebControls.Label lbExample;

 protected System.Web.UI.WebControls.Label lbError;

 protected System.Web.UI.WebControls.CheckBox cbProtect;

 protected System.Web.UI.WebControls.DataList dlCMS;

 protected System.Web.UI.WebControls.DataList dlPages;

 private const string DESKTOP = "Desktop";

 

 protected void Page_Load(object sender, EventArgs e)

 {

  if (!IsPostBack)

   BindData();

 }

 private void BindData()

 {

  cbProtect.Visible = (Auth.CurrentUserID == Auth.AdminID);

  tbPassword.tb.TextMode = System.Web.UI.WebControls.TextBoxMode.Password;

  tbCopy.tb.TextMode = System.Web.UI.WebControls.TextBoxMode.Password;

  lbExample.Text = PasswordGenerator.Generate(10);

  int ID = FooID;

  User Node = App.Storage.GetItem<User>(ID);

  // Поправка на гостя

  if (ID != -1)

  {

   if (Node.Name == Auth.GUEST_NAME)

   {

    ID = Auth.GuestID;

    tbName.tb.Attributes["readonly"] = "readonly";

    trPassword.Visible = false;

    tbCopy.Visible = false;

   }

   tbCopy.IsRequire = false;

   tbPassword.IsRequire = false;

  }

  // Собираем права

  if (Auth.CurrentUserID == Auth.AdminID)

  {

   List<AccessNode> Accessp = new List<AccessNode>();

   List<Page> ALp = App.Storage.GetList<Page>();

   foreach (Page Item in ALp)

   {

    // Исключения

    if (Item.Key == "error")

     continue;

    Accessp.Add(new AccessNode(Item, ID));

   }

   dlPages.DataSource = Accessp;

   dlPages.DataBind();

   if (ID != Auth.GuestID)

   {

    List<AccessNode> Accesse = new List<AccessNode>();

    List<Essence> ALe = App.Storage.GetList<Essence>();

    foreach (Essence Item in ALe)

    {

     if (Item.IsEnabled == true)

     {

      // Исключения

      if (Item.Name == DESKTOP)

       continue;

      Accesse.Add(new AccessNode(Item, ID));

     }

    }

    dlCMS.DataSource = Accesse;

    dlCMS.DataBind();

   }

   else

    trCMS.Visible = false;

  }

  else

  {

   trCMS.Visible = false;

   trPages.Visible = false;

  }

  if (ID == -1)

   return;

  tbName.Value = Node.Name;

  cbProtect.Checked = Node.IsProtect;

 }

 protected void btnSave_Click(object sender, EventArgs e)

 {

  if (this.IsValid == false)

   return;

  if (tbPassword.tb.Text != tbCopy.tb.Text)

  {

   lbError.Visible = true;

   return;

  }

  User Node;

  int ID = FooID;

  if (ID == -1)

   Node = new User();

  else

   Node = App.Storage.GetItem<User>(ID);

  if (tbPassword.tb.Text != string.Empty)

   Node.Password = tbPassword.tb.Text;

  Node.Name = tbName.Value;

  Node.IsProtect = cbProtect.Checked;

  if (ID == -1)

   App.Storage.Create(Node);

  else

   App.Storage.Update(Node);

  // Обновляем права сайта

  if (Node.Name == Auth.GUEST_NAME)

   ID = Auth.GuestID;

  else

   ID = Node.ID;

  if (FooID != 0)

  {

   List<IEntity> Deletes = new List<IEntity>();

   List<User2Page> ALup = App.Storage.GetList<User2Page>();

   foreach (User2Page Item in ALup)

    if (Item.UserID == ID)

     Deletes.Add(Item);

   if (ID != Auth.GuestID)

   {

    List<User2Essence> ALue = App.Storage.GetList<User2Essence>();

    foreach (User2Essence Item in ALue)

     if (Item.UserID == ID)

      Deletes.Add(Item);

   }

   // Удаляем устаревшие права

   foreach (IEntity Item in Deletes)

    App.Storage.Delete(Item as Entity);

  }

foreach (System.Web.UI.WebControls.DataListItem Item in dlPages.Items)

  {

System.Web.UI.WebControls.CheckBox cbAccess = (Item.FindControl("cbAccess") as System.Web.UI.WebControls.CheckBox);

   if (cbAccess.Checked)

   {

    User2Page Up = new User2Page();

    Up.UserID = ID;

    Up.PageID = (int)dlPages.DataKeys[Item.ItemIndex];

    App.Storage.Create(Up);

   }

  }

  // Обновляем парва на страницы CMS

 if (ID != Auth.GuestID)

 {

 bool IsAddDesktop = false;

 foreach (System.Web.UI.WebControls.DataListItem Item in dlCMS.Items)

   {

 System.Web.UI.WebControls.CheckBox cbAccess = (Item.FindControl("cbAccess") as System.Web.UI.WebControls.CheckBox);

 if (cbAccess.Checked)

 {

 User2Essence Ue = new User2Essence();

 Ue.UserID = ID;

 Ue.EssenceID = (int)dlCMS.DataKeys[Item.ItemIndex];

     App.Storage.Create(Ue);

     IsAddDesktop = true;

    }

   }

   // Если хотя бы одна страница CMS добавлена, необходимо добавить и рабочий стол

   if (IsAddDesktop == true)

   {

    List<Essence> AL = App.Storage.GetList<Essence>();

    foreach (Essence Item in AL)

    {

     if (Item.Name == DESKTOP)

     {

      User2Essence Ue = new User2Essence();

      Ue.UserID = ID;

      Ue.EssenceID = Item.ID;

      App.Storage.Create(Ue);

      break;

     }

    }

   }

  }

  string RedirectURL = "Records.aspx?table=" + typeof(User).Name;

  Response.Redirect(RedirectURL);

 }

Для прав доступа.

 #region Свойство EssenceType

 public override Type EssenceType

 {

  get { return typeof(User); }

 }

 #endregion

Определяет права доступа.

 /// <remarks>Нужен только для DataBinding</remarks>

 private class AccessNode

 {

Конструктор.

  /// <param name="p">Страница</param>

  /// <param name="userID">ID пользователя</param>

  public AccessNode(Page p, int userID)

  {

   _ID = p.ID;

   _Name = p.Name;

   if (userID == -1)

    return;

   List<User2Page> AL = App.Storage.GetList<User2Page>();

   foreach (User2Page Item in AL)

   {

    if ((Item.PageID == p.ID) && (Item.UserID == userID))

    {

     _IsRight = true;

     break;

    }

   }

  }

Конструктор.

  /// <param name="e">Сущность CMS</param>

  /// <param name="userID">ID пользователя</param>

  public AccessNode(Essence e, int userID)

  {

   _ID = e.ID;

   _Name = e.Name;

   _IsRight = e.GetAccess(userID);

  }

ID.

  #region Свойство ID

  public int ID

  {

   get { return _ID; }

   set { _ID = value; }

  }

  private int _ID;

  #endregion

Название.

  #region Свойство Name

  public string Name

  {

   get { return _Name; }

   set { _Name = value; }

  }

  private string _Name;

 #endregion

Доступ.

 

  #region Свойство IsRight

  public bool IsRight

  {

   get { return _IsRight; }

   set { _IsRight = value; }

  }

  private bool _IsRight;

  #endregion

 }

}

}

3.3 Программная реализация модулей пользовательской части

Класс страниц сайта.

namespace Cleopatra.UI.Site

{

public abstract class Module : System.Web.UI.Page

{

Параметр по умолчанию

 protected int FooID

 {

  get

  {

   int Result = 0;

   if (int.TryParse(Request["ID"], out Result) == false)

    FactoryUI.GoError(ErrorType.ParamNotValid);

   return Result;

  }

 }

Здесь происходит добавление ссылок на используемые "js" и "css".

 

 protected override void OnLoad(EventArgs e)

 {

  FactoryUI.AddReference(this);

  base.OnLoad(e);

 }

Здесь происходит вставка заголовков, если они не были вставлены в наследнике.

 /// </summary>

 protected override void OnLoadComplete(EventArgs e)

 {

  if (this._IsChangeTitle == true)

   return;

string value = this.Context.Items[CashKeys.PAGE_NAME].ToString();

  this.Title = value;

  this.Label = value;

 }

Заголовок в интерфейсе.

 #region Свойство Label

 protected string Label

 {

  get

  {

   if (this.Master != null)

  return (this.Master as Cleopatra.UI.Site.Master).Label;

   else

    return null;

  }

  set

  {

   if (this.Master != null)

  (this.Master as Cleopatra.UI.Site.Master).Label = value;

   this._IsChangeTitle = true;

  }

 }

 #endregion

Заголовок.

 #region Свойство Title

 public new string Title

 {

  get

  {

   return _Title;

  }

  set

  {

   _Title = value;

   base.Title += " | " + _Title;

   this._IsChangeTitle = true;

  }

 }

 private string _Title;

 #endregion

Строка ключевых слов.

 #region Свойство Tags

 public string Tags

 {

  set

  {

   HtmlMeta HM = new HtmlMeta();

   HM.Name = "keywords";

   HM.Content = value;

   this.Header.Controls.Add(HM);

  }

 }

 #endregion

Флаг, был ли изменён заголовок страницы.

 private bool _IsChangeTitle;

Возвращает короткую строку obj, длинной length.

 /// <param name="objStr">Исходная строка</param>

 /// <param name="length">Длинна строки выходной строки</param>

 /// <remarks>Используется в связке с методом Eval()</remarks>

 protected static string Cut(object objStr, int length)

 {

  return FactoryUI.Cut(objStr, length);

 }

Возвращает текст динамического блока (Embade) по ключу key.

 

 protected static string GetHTML(string key)

 {

  return Embade.GetHTML(key);

 }

}

}

namespace Cleopatra.UI.Site

{

Главная страница.

 public partial class Default : System.Web.UI.Page

 {

Возвращает текст динамического блока (Embade) по ключу key 

 protected static string GetHTML(string key)

 {

  return Embade.GetHTML(key);

 }

}

}

   namespace Cleopatra.UI.Site

{

public partial class Master : System.Web.UI.MasterPage

{

 protected void Page_Load(object sender, EventArgs e)

 {

this.Context.RewritePath(this.Request.RawUrl.Replace("/" + App.FOLDER_MODULES, null));

 }

Возвращает текст динамического блока (Embade) по ключу key.

 public static string GetHTML(string key)

 {

  return Embade.GetHTML(key);

 }

Заголовок отображаемый на странице. 

 #region Свойство Label

 public string Label

 {

  get { return _Label; }

  set { _Label = value; }

 }

 private string _Label;

 #endregion

}

}

   namespace Cleopatra.UI.Site

{

Форма обратной связи.

public partial class Feedback : Module

{

 protected Label lbResult;

 protected TextBox tbName;

 protected TextBox tbMail;

 protected TextBox tbText;

 protected HtmlContainerControl tblForm;

 protected HtmlContainerControl trRecipient;

 protected DropDownList ddlRecipients;

 protected void Page_Load(object sender, EventArgs e)

 {

  if (!IsPostBack)

   this.BindData();

 }

 private void BindData()

 {

  List<Recipient> AL = App.Storage.GetList<Recipient>();

  trRecipient.Visible = (AL.Count > 1);

  if (trRecipient.Visible == true)

  {

   ddlRecipients.DataSource = AL;

   ddlRecipients.DataBind();

   foreach (Recipient Item in AL)

   {

    if (Item.IsDefault == true)

    {

   ddlRecipients.SelectedValue = Item.ID.ToString();

     break;

    }

   }

  }

 }

 protected void btnSend_Click(object sender, EventArgs e)

 {

  string To;

  List<Recipient> AL = App.Storage.GetList<Recipient>();

  switch (AL.Count)

  {

   case 0:

    To = Settings.Get("mailadmin");

    break;

   case 1:

    To = AL[0].Mail;

    break;

   default:

                                    Recipient Node = App.Storage.GetItem<Recipient>(Converter.GetInteger(ddlRecipients.SelectedValue));

    To = Node.Mail;

    break;

  }

Dictionary<string, string> Dic = new Dictionary<string, string>();

  Dic.Add("Name", tbName.Text.Trim());

  Dic.Add("Mail", tbMail.Text.Trim());

  Dic.Add("Text", tbText.Text.Trim());

  string Pattern = GetHTML("body_feedback");

  string Body = TextJet.Format(Pattern, Dic);

  bool Result = MailRobot.Send(Settings.Get("feedbacksubject"), tbMail.Text.Trim().ToLower(), To, Body);

  if (Result == true)

  {

   lbResult.Text = Language.MsgFeedbackSuccess;

   //lbResult.CssClass = string.Empty;

  }

  else

  {

   lbResult.Text = Language.MsgFeedbackFailure;

   lbResult.CssClass = "error";

  }

  tblForm.Visible = false;

  lbResult.Visible = true;

 }

}

}

namespace Cleopatra.UI.Site

{

Страница статьи.

public partial class ViewArticle : Module

{

 protected HyperLink hlPrint;

 protected HtmlContainerControl tdMain;

 protected void Page_Load(object sender, EventArgs e)

 {

  //if (!IsPostBack)

  BindData();

 }

 private void BindData()

 {

 string Key = Context.Items[CashKeys.ARTICLE_KEY].ToString();

  Article Art = App.Storage.GetItem<Article>(Key);

  if (Art == null)

   return;

  this.Tags = Art.Tags;

  this.Title = Art.Name;

  this.Label = Art.Name;

  this.tdMain.InnerHtml = Art.Text;

  if (hlPrint != null)

 hlPrint.NavigateUrl = "~/Print.aspx?ID=" + Art.ID.ToString();

 }

}

}

namespace Cleopatra.UI.Site

{

Карта сайта.

public partial class Sitemap : Module

{

 protected TreeView tvMap;

 protected void Page_Load(object sender, EventArgs e)

 {

  if (!IsPostBack)

   BindData();

 }

 private void BindData()

 {

  int RootID = Converter.GetInteger(this.Request["ID"], 0);

  Generate(tvMap.Nodes, RootID);

  tvMap.ExpandAll();

 }

Метод рекурсивного обхода, заполнения меню.

/// <param name="col">Коллекция элементов меню</param>

/// <param name="nodeID">ID узла, которым коллекция col, будет заполнена</param>

 private static void Generate(TreeNodeCollection col, int nodeID)

 {

  List<MenuNode> AL = App.Storage.GetList<MenuNode>();

  TreeNode Child;

  foreach (MenuNode Item in AL)

  {

   if (Item.ParentID == nodeID)

   {

 Child = new TreeNode(Item.Name, null, null, Item.URL, null);

if (Item.URL.StartsWith(@"http://", StringComparison.OrdinalIgnoreCase) == false)

    Child.NavigateUrl = "~/" + Child.NavigateUrl;

    col.Add(Child);

    Generate(Child.ChildNodes, Item.ID);

   }

  }

 }

}

}


4 ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ

4.1 Определение единовременных затрат на создание программного продукта

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

Определение годового экономического эффекта от сокращения ручного труда при обработке информации производится в описанной ниже последовательности.

Единовременные капитальные затраты представляют собой цену программного продукта (ПП). Различают оптовую и отпускную цену программы. Все расчеты между покупателем и продавцом продукции, к числу которой относят и программные продукты, производятся на основе отпускных цен. В настоящее время в соответствии с законодательством РБ в отпускную цену наряду с оптовой ценой включается налог на добавленную стоимость.

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

4.2 Определение трудоемкости разработки ПП

Трудоемкость разработки программного продукта (ПП) может быть определена укрупненным методом. При этом необходимо воспользоваться формулой:

                           ,         (4.1)

где     ТОА – трудоемкость подготовки описания задачи и исследования алгоритма решения;

ТБС – трудоемкость разработки блок-схемы алгоритма;

ТП – трудоемкость программирования по готовой блок-схеме;

ТОТЛ – трудоемкость отладки программы на ЭВМ;

ТДР – трудоемкость подготовки документации по задаче в рукописи;

ТДО – трудоемкость редактирования, печати и оформления документации по задаче.

Составляющие приведенной формулы определяются, в свою очередь, через условное число операторов Q в разрабатываемом ПП по формуле:

                                                                 (4.2)

где    q – число операторов в программе (q=2200);

С – коэффициент сложности программы (С=1,1);

p – коэффициент коррекции программы в ходе ее разработки (р=0,1);

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

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

Q=2200 . 1,1 . (1+0,1)=2662 операторов

Тогда составляющие трудоемкости разработки программы определятся по формулам:

, (4.3)

, (4.4)

, (4.5)

, (4.6)

, (4.7)

, (4.8)

где   W – коэффициент увеличения затрат труда вследствие недостаточного или   некачественного описания задачи (W = 1,3);

К – коэффициент квалификации разработчика алгоритмов и программ (при стаже работы до двух лет К=0,8, при стаже от двух до трех лет К=1,0, при стаже от трех до пяти лет К=1,1...1,2 ,при стаже от пяти до семи лет К=1,3...1,4 , при стаже свыше семи лет К= 1,5...1,6.) (К=1,2);

TОА=(2662 . 1,3) / (80 . 1,2) = 36,05 чел-ч

TВС=2662 / (22,5 . 1,2) = 98,59 чел-ч

TП=2662 / (22,5 .  1,2) = 98,59 чел-ч

TОТЛ=2662 / (4,5 .  1,2) = 492,96 чел-ч

TДР=2662 / (17,5 .  1,2) = 126,76 чел-ч

ТДО=0,75 .  126,76 = 95,07

Определим трудоемкость разработки ПП:

ТРЗ=36,05 + 98,59+98,59+492,96+126,76+95,07=948,02 чел-ч

4.3 Определение себестоимости создания ПП

Для определения себестоимости создания программного продукта необходимо определить затраты на заработную плату разработчика по формуле:

 (4.9)

где    ТРЗ – трудоемкость разработки программного продукта, чел-ч;

tЧР – среднечасовая ставка работника, осуществлявшего разработку программного продукта, руб.;

q – коэффициент, учитывающий процент премий и доплат к тарифному фонду в организации-разработчике (q=0,35);

а – коэффициент, учитывающий дополнительную заработную плату (а=0,15);

b – коэффициент, учитывающий начисления на заработную плату, включая отчисления в фонд социальной защиты населения, на содержание учреждений здравоохранения, другие фонды, чрезвычайный чернобыльский налог и другие (b=0,4).

Среднечасовая ставка работника определяется исходя из Единой тарифной системы оплаты труда в Республике Беларусь по следующей формуле:

, (4.10)

где     Q1 – среднемесячная заработная плата работника 1 разряда, руб (Q1=70000)

kТ – тарифный коэффициент работника соответствующего разряда (kТ=3,08);

167,4 – нормативное количество рабочих часов в месяце;

tЧР=(70 000  .  3,08) / 167,4 = 1 287,93 руб.

Определим затраты на заработную плату разработчика:

ЗРЗ=948,02  .  1 287,93  .  (1 + 0,35)  .  (1 + 0,15)  .  (1 + 0,4) = 2 653 807,42 руб.

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

Затраты на отладку программы определяются по формуле:

, (4.11)

где ТОТЛ – трудоемкость отладки программы, час (определяется по формуле 5.6);

SМЧ – стоимость машино-часа работы ЭВМ, руб./час (определяется по формуле 5.15);

ЗОТ = 492,96  .  296,51 = 146 167,57 руб.

Себестоимость разработки ПП определяется по формуле:

, (4.12)

где F – коэффициент накладных расходов проектной организации без учета эксплуатации ЭВМ (F=1,15);

СПР=2 350 519  .  1,15 + 146 168 = 2 849 265 руб.

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

, (4.13)

где ПР – плановая прибыль на программу, руб.

Плановая прибыль на программу определяется по формуле:

, (4.14)

где СПР – себестоимость программы;

НП – норма прибыли проектной организации (НП = 0,25);

ПР=2 849 265  .  0,25 = 712 316 руб.

Определим оптовую цену ПП:

ЦО=2 849 265 + 712 316 = 3 561 581 руб.

Отпускная цена программы определяется по формуле:

,

где     ЦО – оптовая цена программы, руб.;

ЗРЗ – затраты на заработную плату разработчиков программы;

ПР – размер плановой прибыли на программу;

НДОБ -ставка налога на добавленную стоимость % (НДОБ = 18).

Определим отпускную цену ПП:

ЦПР=3 561 581 + (2 350 519 + 712 316) .  0,18 = 4 112 891 руб.

Определение стоимости машино-часа работы ЭВМ (для разработанного ПП). Стоимость машино-часа работы ЭВМ определяется по формуле:

, (4.15)

где    СЭ – расходы на электроэнергию за час работы ЭВМ, руб.;

АЭВМ – годовая величина амортизационных отчислений на реновацию ЭВМ;

РЭВМ – годовые затраты на ремонт и техническое обслуживание ЭВМ, руб.;

АПЛ – годовая величина амортизационных отчислений на реновацию производственных площадей, занимаемых ЭВМ, руб.;

РПЛ – годовые затраты на ремонт и содержание производственных площадей, руб.;

НН – годовая величина налога на недвижимость, руб.;

ФЭВМ – годовой фонд времени работы ЭВМ, час.

Расходы на электроэнергию за час работы ЭВМ определяются по формуле:

, (4.16)

где     NЭ – установленная мощность электродвигателя ЭВМ, кВт (NЭ=0,42);

kИС – коэффициент использования энергоустановок по мощности (kИС = 0,9);

ЦЭ – стоимость 1 кВт-часа электроэнергии, руб. (ЦЭ=65);

Годовая величина амортизационных отчислений на реновацию ЭВМ определяется по формуле:

, (4.17)

где     ЦЭВМ – цена ЭВМ на момент ее выпуска, руб. (ЦЭВМ=500 . 2 200 =1 100 000,00 руб.);

kУ – коэффициент удорожания ЭВМ ( зависит от года выпуска) (kУ=1);

kМ – коэффициент, учитывающий затраты на монтаж и транспортировку ЭВМ (kМ = 1,05);

НАЭВМ – норма амортизационных отчислений на ЭВМ, % (НАЭВМ = 10);

ЦБЭВМ – балансовая стоимость ЭВМ, руб (ЦБЭВМ=1 100 000 . 1 . 1,05=1 155 000 руб.);

АЭВМ=1 155 000 . 10 / 100 = 115 500 руб.

Годовые затраты на ремонт и техническое обслуживание ЭВМ укрупнено определяются по формуле:

, (4.18)

где kРО – коэффициент, учитывающий затраты на ремонт и техническое обслуживание ЭВМ, в том числе затраты на запчасти, зарплату ремонтного персонала (kРО = 0,1);

Годовая величина амортизационных отчислений на реновацию производственных площадей, занятых ЭВМ определяется по формуле:

, (4.19)

где     ЦБПЛ – балансовая стоимость площадей, руб;

НАПЛ – норма амортизационных отчислений на производственные площади, % (НАПЛ =1,2);

SЭВМ – площадь, занимаемая ЭВМ, кв.м. (SЭВМ=2);

kД – коэффициент, учитывающий дополнительную площадь (kД =3);

ЦПЛ – цена 1 кв.м. производственной площади, руб (ЦПЛ=400000);

АПЛ = 2 . 3 . 400 000 . 1,2 / 100 = 28 800 руб.

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

, (4.20)

где kРЭ – коэффициент, учитывающий затраты на ремонт и эксплуатацию производственных площадей (kРЭ = 0,05);

РПЛ = 2 . 3 . 400 000 . 0,05 = 120 000 руб.

Величина налога на недвижимость определяется по формуле:

, (4.21)

где СНН – ставка налога на недвижимость, % (СНН = 1);

Годовой фонд времени работы ЭВМ определяется, исходя из режима ее работы, и рассчитывается по формуле:

, (4.22)

где     tСС – среднесуточная фактическая загрузка ЭВМ, час (tСС=8);

ТСГ – среднее количество дней работы ЭВМ в год, дней (ТСГ=250);

ФЭВМ = 8 . 250 = 2 000 час.

Определим стоимость машино-часа работы ЭВМ:

SМЧ=88,83 + (115 500 + 115 500 + 28 800 + 120 000 + 35 550) / 2 000 = 296,51 руб

4.4 Определение ожидаемого прироста прибыли в результате внедрения ПП

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

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

Годовые эксплуатационные расходы при ручной обработке информации (текущем варианте решения задачи) определяются по формуле

 (4.23)

где    Тр – трудоемкость разового решения задачи, чел-ч (Тр=3);

tчр – среднечасовая ставка работника, осуществляющего обслуживание ПП, руб (tчр=1 287,93 руб);

k – периодичность решения задачи в течение года, раз/год (k=500);

q – коэффициент, учитывающий процент премий (q=2,75);

а – коэффициент, учитывающий дополнительную заработную плату (a=0,15);

b – коэффициент, учитывающий начисления на заработную плату (b=0,4).

ЗР = 3 . 500 . 1287,93 . (1 + 2,75) . (1 + 0,15) . (1 + 0,4) = 11 663 816 руб.

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

Время решения задачи на ЭВМ определяется по формуле:

, (4.24)

где   ТВВ – время ввода в ЭВМ исходных данных, необходимых для решения задачи, мин;

ТР – время вычислений, мин (ТР=1);

ТВЫВ – время вывода результатов решения задачи (включая время распечатки на принтере), мин (ТВЫВ=1);

dПЗ – коэффициент, учитывающий подготовительно-заключительное время (dПЗ = 0,175).

Время ввода в ЭВМ исходных данных может быть определено по формуле:

, (4.25)

где КZ – среднее количество знаков, набираемых с клавиатуры при вводе исходных данных (КZ=500);

HZ – норматив набора 100 знаков, мин (HZ = 6);

ТВВ = 500 . 6 / 100 = 30 мин.

Определим время решения задачи на ЭВМ:

ТЗ = (30 +1 + 1) . (1 + 0,175) / 60 = 0,63 ч.

Затраты на заработную плату пользователя ПП определяются по формуле:

         (4.26)

где    ТЗ – время решения задачи на ЭВМ, час;

tПР – среднечасовая ставка работника пользователя программы, руб. (определяется аналогично ставке работника, осуществляющего ручной расчет) (tпр=1 287,93 руб);

k – периодичность решения задачи в течение года, раз/год (k=500);

q – коэффициент, учитывающий процент премий (q=2,75);

а – коэффициент, учитывающий дополнительную заработную плату (a=0,15);

b – коэффициент, учитывающий начисления на заработную плату (b=0,4).

ЗП = 0,18 . 500 . 1287,93 . (1 + 2,75) . (1 + 0,15) . (1 + 0,4) = 2 449 401 руб.

Затраты на оплату аренды ЭВМ для решения задачи определяются по следующей формуле:

, (4.27)

где SМЧ – стоимость одного машино-часа работы ЭВМ, которая будет использоваться для решения задачи, руб.

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

, (4.28)

где    ЗП – затраты на заработную плату пользователя программы;

ЗА – затраты на оплату аренды ЭВМ при решении задачи.

ЗТ=2 449 401 + 342546 = 2 791 947 руб.

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

Таблица 4.1 Сравнительная характеристика решений управления сайтами

Наименование показателя

Коэффициент весомости,

Количество баллов,

Текущее решение

Разработанный программный модуль

1. Качество товара

1.1 Назначение

0,08

8

8

1.2. Надежность

0,25

7

7

1.3. Универсальность

0,2

7

10

1.4. Безопасность

0,15

8

8

1.5. Стоимость

0,15

5

9

5,74

6,94

    По данным табл. 4.1 построим радар конкурентоспособности (рисунок 4.1):

Рисунок 4.1 – Радар конкурентоспособности решений управления сайтами

Для определения конкурентоспособности используется отношение:

(4.29)

где  – количество баллов по i-му показателю разработанного ПС;
  – количество баллов по
i-му показателю ПС-конкурента;
  – коэффициент весомости по
i-му показателю.

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

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

                            ,                                 (4.30)

где СНП – ставка налога на прибыль, % (СНП=24);

ПУ = (11 663 8162 791 947) . (1 – 0,24) = 6 742 620 руб./год.

4.5 Расчет показателей эффективности использования программного продукта

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

, (4.31)

где     КЗ – капитальные и приравненные к ним затраты;

ЦПРП – отпускная цена программы для конкретного пользователя.

Капитальные и приравненные к ним затраты в случае, если необходимо приобретение новой ЭВМ для решения комплекса задач, в который входит рассматриваемая, по формуле:

, (4.32)

где  ЦБЭВМ – балансовая стоимость комплекта вычислительной техники, необходимого для решения задачи, руб. (ЦБЭВМ = 1 155 000 руб.).

КЗ=1 155 000 . 0,18 . 500 / 2 000 = 181 913 руб.

КО = 181 913 + 4 112 891 = 4 294 804 руб.

Годовой экономический эффект от сокращения ручного труда при обработке информации определяется по формуле:

, (4.33)

где Е – коэффициент эффективности, равный ставке за кредиты на рынке долгосрочных кредитов (Е = 0,25);

ЭФ = 6 742 6200,25 . 4 294 804 = 5 668 919 руб.

Срок возврата инвестиций определяется по формуле:

, (4.34)

ТВ = 4 294 804 / 6 742 620 = 0,59 лет.

4.6 Заключение об экономической эффективности

Основные результаты расчета представлены в таблице 4.2.

Таблица 4.2 – Технико-экономические показатели проекта

Наименование показателя

Варианты

Базовый

Проектный

1. Трудоемкость решения задачи, час

3

0,63

2. Периодичность решения задачи, раз в год

500

500

3. Годовые текущие затраты, связанные с решением задачи, руб

11 663 816

2 791 947

4. Отпускная цена программы, руб

4 112 891

5. Степень новизны программы

Б

6. Группа сложности алгоритма

1

7. Прирост условной прибыли, руб./ год

6 742 620

8. Годовой экономический эффект пользователя, руб

5 668 919

9. Срок возврата инвестиций, лет

0,59

Разработанное программное обеспечение к дипломному проекту на тему «Система разработки сайтов» обеспечивает получение годового экономического эффекта в сумме 5 668 919 руб. при отпускной цене программы 4 112 891 руб. Проект обеспечивает возврат инвестиций за 0,59 лет при номинальном сроке возврата кредита 4 года.

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


5 ПРОИЗВОДСТВЕННАЯ И ЭКОЛОГИЧЕСКАЯ БЕЗОПАСНОСТЬ

5.1 Организация охраны труда в ЧУП «ГАМАР-СКГ»

В ЧУП «ГАМАР-СКГ» списочная численность работающих составляет 11 человек, из них 1 директор, 1 зам. директора, 1 бухгалтер, 1 дизайнер, 1 тестировщик, 6 инженеров-программистов.

Из списочной численности видно, что отсутствует лицо, ответственное за охрану труда на предприятии. Обязанности инженера по охране труда исполняет директор. Он проводи инструктажи, с целью предотвращения появлений случаев травматизма. Случаев травматизма за последние год отсутствуют. Анализ заболеваемости за последние три года представлен в табл. 5.1.

Таблица 5.1 Анализ заболеваемости сотрудников ЧУП «ГАМАР-СКГ» в период с 2007 по 2008 годы

Год

Количество дней заболеваемости

Тенденция к росту

2007

35

2008

30

-5

В ЧУП «ГАМАР-СКГ» в период с 2007 по 2008 годы общая тенденция к заболеваемости снижается. Большинство случаев потери рабочего времени связано с заболеванием при эпидемиях гриппа. Условия труда в ЧУП «ГАМАР-СКГ» соответствуют нормативным показателям.

Работы, проводимые в ЧУП «ГАМАР-СКГ», осуществляются в офисных помещениях. Для создания оптимальных метеорологических условий в офисных помещениях в холодное время года применяют паровое отопление, а в летнее – кондиционеры. В офисных помещениях расположено 11 рабочих мест, все из которых оборудовано компьютерами.

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

5.2 Производственная санитария

Температура воздуха, влажность и скорость движения воздуха благоприятно влияют на самочувствие сотрудников и являются комфортными и, как следствие это повышает работоспособность работников. Данные значения факторов микроклимата соответствуют регламентированным параметрам. В табл. 5.2 приведены параметры микроклимата помещений ЧУП «ГАМАР-СКГ».

Таблица 5.2 – Значения основных параметров микроклимата в помещениях ЧУП «ГАМАР-СКГ»

Фактор

Значение

Единицы измерения

Влажность воздуха

45 – 55

%

Температура воздуха

18 – 25

ºС

Скорость движения воздуха

0,1

м/с

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

В зависимости от времени суток и расположения рабочего места в ЧУП «ГАМАР-СКГ» применяют:

  •  в светлый период времени – естественное и смешанное освещение;
  •  в темный период времени – искусственное освещение.

Естественное освещение в офисе ЧУП «ГАМАР-СКГ» является боковым. Искусственное освещение создается галогенными лампами Haloline 60W 230V l=74,9 mm, расположенными равномерно по всей площади помещения.

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

             ,                                                (5.1)

где ЕН – нормируемая освещенность, Лк;

      А – освещаемая площадь;

       – коэффициент минимальной освещенности:  = 1;

      К – коэффициент запаса: К = 1,4

       – коэффициент использования светильников,  = 3,2.

                                                                                 (5.2)

Индекс помещения:

                                       ,                                             (5.3)

где hР – расчетная высота.

                     м                     (5.4)

Пример расчета освещения:

                                                            (5.5)

                                            м2                                                           (5.6)

                                   Лм                          (5.7)

Произведем расчет объем воздуха, приходящийся на одного работающего по формуле:

                                                 ,                                                       (5.8)

где V – объем помещения;

      n – количество работающих.

                                                  ,                                                     (5.9)

где b – удельный воздухообмен на одного работающего.

Пример расчета воздухообмена:

                                           м3,                                         (5.10)

                                         м3.                                     (5.11)

Для поддержания нормативных значений микроклимата можно путем использования кондиционеров, отопительных приборов, а также при помощи вентиляции. Для очищения воздуха от пыли в местах забора устанавливают фильтры 2-го и 3-го класса типов ФППУ, ФСВУ, ФЯЛ, ФВН.

5.3 Техника безопасности

При эксплуатации вычислительной техники возможны следующие опасные производственные факторы:

- опасность поражения электрическим током;

- опасность воздействия статического электричества.

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

По степени поражения людей электрическим током кабинет относится к классу помещений без повышенной опасности. Для устранения поражения людей электрическим током при появлении напряжения на конструктивных частях электрооборудования предусмотрено защитное заземление с сопротивлением в любое время года не более 4 Ом.

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

Основные способы защиты от статического электричества:

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

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

При оборудовании рабочего места ПЭВМ согласно нормам учитываются границы поля зрения программиста, которые определяются движениями глаз и голоВы (рисунок 5.1). Различают зоны зрительного наблюдения в вертикальной плоскости, ограниченные определенными углами, в которых располагаются дисплей ЭВМ (40-60º), пюпитр (35-45º) и клавиатура. При организации рабочего места учитываются антропометрические данные программистов, а также предусматривается соответствующее размещение элементов оборудования в зависимости от характера выполняемой работы.

Рисунок 5.1– Зоны для выполнения ручных операций и размещения органов управления

1, 2 – зона для размещения часто используемых органов управления

3 – зона для размещения редко используемых органов управления

5.4 Пожарная безопасность

В современных ЭВМ имеется высокая плотность размещения элементов электронных схем. В непосредственной близости друг от друга располагаются соединительные провода, коммуникационные кабели. При протекании по ним электрического тока выделяется значительное количество теплоты, что может привести к повышению температуры отдельных узлов до 80-100°С, при этом возможно отклонение изоляции соединительных проводов что, как правило, приводит к короткому замыканию, которое сопровождается искрением и ведет к недостаточной надежности и перегрузке элементов электронных схем. Для отбора избыточной теплоты от ЭВМ служат системы  вентиляции и кондиционирования воздуха.

Здание, где располагается ЧУП «ГАМАР-СКГ» относится:

– по огнестойкости – I категория;

– по пожаровзрывобезопасности – категория Д;

Здание, где располагается ЧУП «ГАМАР-СКГ» является девятиэтажным, офис ЧУП «ГАМАР-СКГ» расположен на девятом этаже. В здании расположены пожарные гидранты, работающие от общего водоснабжения, к которым обеспечен свободный доступ, а также находятся схемы эвакуации, в которых указано расположение огнетушителей. На данном этаже расположены два огнетушителя, находящихся в кабинетах.

В офисных помещения ЧУП «ГАМАР-СКГ» присутствуют по 2 огнетушителя. Для данного помещения идеально наличие огнетушителя ОУ-5, ОПС-5 или ОП-1 «Момент», так как в офисе находится много материалов органического происхождения (бумага, мебель).


ЗАКЛЮЧЕНИЕ

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

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

В технико-экономическом обосновании система была оценена по разным критериям, была проведена оценка конкурентоспособности продукта. Было рассчитано смета затрат, себестоимость и отпускная цена программного средства, а также расчет экономического эффекта Была рассмотрена производственная санитария и техника безопасности рабочего места программиста.

В результате проделанной работы была разработана система управления сайтами. Система разработана на платформе ASP.NET на языке C#. В качестве базы данных использовалась MS Access. Так же использовалась библиотека Ajaxcontroltoolkits.

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

Разработанная система реализует следующие функции:

  •  добавление/удаление/редактирование разделов сайта;
  •  добавление/удаление/редактирование статей сайта;
  •  добавление/удаление/редактирование новостей сайта;
  •  добавление/удаление/редактирование встраиваемых блоков на сайт;
  •  добавление/удаление/редактирование банеров на сайте;
  •  добавление/удаление/редактирование опросов на сайте;
  •  построение карты сайта;
  •  возможность отправлять сообщение администратору;
  •  разграничение прав доступа для пользователей к страницам сайта;
  •  сжимание всех скриптов и страниц на стороне сервера перед запросом;
  •  поддержка RSS;
  •  встроенный файловый менеджер.

Преимущества системы:

  •  кроссплатформенность;
  •  модульность;
  •  гибкая настройка;
  •  анти-спам модуль;
  •  модель отчета об ошибках, что позволяет отслеживать любые ошибки, даже после ввода в эксплуатацию системы;
  •  использование клиентских скриптов, что позволяет уменьшить количество запросов на сервер и повысить производительность cистемы.

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


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1.  Марко Беллиньясо. Microsoft ASP.NET 3.5 с примерами на C# 2008 и Silverlight 2 для профессионалов / Марко Беллиньясо. – Москва: Изд-во «Вильямс», 2009. – 1408 c.
  2.  Эндрю Троелсен. C# и платформа .NET / Эндрю Троелсен. – Санкт-Петербург: Изд-во «Питер Пресс», 2007. – 525 c.
  3.  Дино Эспозито. Microsoft ASP.NET 2.0 / Дино Эспозито. Углубленное изучение. – Москва: Изд-во «Питер Пресс», 2008 г. – 592 c.
  4.  Дэвид Гудман. JavaScript. Библия пользователя / Дэвид Гудман. – Москва: Изд-во «Вильямс», 2006. – 436 с.
  5.  Эдуард Кровчик. .NET Сетевое программирование для профессионалов / Эдуард Кровчик. – Москва: Изд-во «Лори»,  2007. – 325 c.
  6.   Мак-Дональд, М. Microsoft ASP.NET 2.0 с примерами на C# 2005 для профессионалов / Мак-Дональд, М. – Санкт-Петербург: Изд-во «Питер Пресс»,2008. – 755 c.
  7.   Гарри Джонсон. Разработка клиентских веб-приложений на платформе Microsoft .Net Framework. Учебный курс Microsoft# / Гарри Джонсон. – Санкт-Петербург: Изд-во «Питер Пресс», 2008. – 325 c.
  8.  Брэт Маклафлин. Освоение Ajax: эффективный подход к созданию Web-сайтов / Брэт Маклафлин [Электрон. ресурс]. – 2005. – Режим доступа: http://www.ibm.com/developerworks/ru/library/wa-ajaxintro1/index.html. – Дата доступа: 20.01.2009.
  9.  Wikipedia.org. Система управления содержимым / Wikipedia.org [Электрон. ресурс]. – 2009. – Режим доступа: http://ru.wikipedia.org/wiki/CMS. – Дата доступа: 21.01.2009.
  10.   Сергей Чикуенок. Производительность браузеров в зависимости от верстки / Сергей Чикуенок [Электрон. ресурс]. – 2008. – Режим доступа: http://www.artlebedev.ru/tools/technogrette/html/browser-performance/. – Дата доступа: 03.02.2009.

ПРИЛОЖЕНИЕ 1

Исходный код приложения

Исходный текст Default.cs

using System;

using System.Collections;

using System.Collections.Generic;

using System.Web.UI.WebControls;

using Cleopatra.Objects;

using Cleopatra.Services;

using Cleopatra.UI.CMS;

namespace Cleopatra.UI.CMS

{

/// <summary>

/// Рабочий стол

/// </summary>

public partial class Default : TranslateblePage

{

 protected DataList dlMain;

 protected void Page_Load(object sender, EventArgs e)

 {

  if (!IsPostBack)

   BindData();

 }

 protected void BindData()

 {

  List<Essence> Results = new List<Essence>();

  List<Essence> AL = GetRightEssences();

  foreach (Essence Item in AL)

   if (Item.IsDesktop == true)

    Results.Add(Item);

  dlMain.DataSource = Results;

  dlMain.DataBind();

 }

 /// <summary>

 /// Возвращает доступные для пользователя сущности

 /// </summary>

 private static List<Essence> GetRightEssences()

 {

  int UserID = Auth.CurrentUserID;

  List<Essence> AL = App.Storage.GetList<Essence>();

  if (UserID == Auth.AdminID)

   return AL;

  List<Essence> Result = new List<Essence>();

  foreach (Essence Item in AL)

   if (Item.GetAccess(UserID) == true)

    Result.Add(Item);

  return Result;

 }

 /// <summary>

 /// Возвращает иконку на рабочем столе

 /// </summary>

 public string GetIcon(object obj)

 {

  string Postfix = "Icons/{0}.png";

  string File;

File = string.Format("~/" + App.FOLDER_CMS + "/" + Postfix, obj);

  File = Server.MapPath(File);

  if (System.IO.File.Exists(File) == true)

   return string.Format(Postfix, obj);

  else

   return string.Format(Postfix, "noicon");

 }

 /// <summary>

 /// Необходима для определения прав

 /// </summary>

 #region Свойство EssenceType

 public override Type EssenceType

 {

  get { return null; }

 }

 #endregion

}

}

Исходный текст EditArticle.cs

using System;

using System.IO;

using System.Collections.Generic;

using System.Web.UI.WebControls;

using Cleopatra.Objects;

using Cleopatra.Services;

using Cleopatra.UI.CMS.Controls;

namespace Cleopatra.UI.CMS

{

/// <summary>

/// Страница редактирования Article

/// </summary>

public partial class EditArticle : TranslateblePage

{

 protected BoxText tbTags;

 protected BoxText tbName;

 protected BoxHTML tbText;

 protected Label lbKey;

 protected CheckBox cbProtect;

 protected void Page_Load(object sender, EventArgs e)

 {

  if (!IsPostBack)

   BindData();

 }

 private void BindData()

 {

  cbProtect.Visible = (Auth.CurrentUserID == Auth.AdminID);

  int ID = FooID;

  if (ID == -1)

   return;

  Article Node = App.Storage.GetItem<Article>(ID);

  tbName.Value = Node.Name;

  tbText.Value = Node.Text;

  tbTags.Value = Node.Tags;

  lbKey.Text = Node.Key;

  cbProtect.Checked = Node.IsProtect;

 }

 protected void btnSave_Click(object sender, EventArgs e)

 {

  if (this.IsValid == false)

   return;

  Article Node;

  int ID = FooID;

  if (ID == -1)

   Node = new Article();

  else

   Node = App.Storage.GetItem<Article>(ID);

  Node.Name = tbName.Value;

  Node.Text = tbText.Value;

  Node.Tags = tbTags.Value;

  Node.IsProtect = cbProtect.Checked;

  if (Node.ID == 0)

  {

Node.Key = GetUnique(TextJet.Translit(Node.Name, 36).ToLower(), 0);

   App.Storage.Create(Node);

   Page NewPage = new Page();

  NewPage.Content = Cleopatra.Services.ContentType.Article;

   NewPage.Key = Node.Key;

   NewPage.Name = Node.Name;

   App.Storage.Create(NewPage);

   // Добовляет доступ для всех пользователей

   User2Page Up;

   List<User> AL = App.Storage.GetList<User>();

   foreach (User Item in AL)

   {

    Up = new User2Page();

if (Item.Name.Equals(Auth.GUEST_NAME, StringComparison.OrdinalIgnoreCase) == true)

     Up.UserID = Auth.GuestID;

    else

     Up.UserID = Item.ID;

    Up.PageID = NewPage.ID;

    App.Storage.Create(Up);

   }

  }

  else

   App.Storage.Update(Node);

string RedirectURL = "Records.aspx?table=" + typeof(Article).Name;

  Response.Redirect(RedirectURL);

 }

 /// <summary>

 /// Возвращает уникальный URL для статьи, на уровне сайта

 /// </summary>

 /// <param name="value">Текущий уникальный URL</param>

 /// <param name="postNum">Числовой постфикс</param>

 /// <returns>Метод рекурсивный</returns>

 private string GetUnique(string value, int postNum)

 {

  string NewName = value;

  if (postNum > 0)

   NewName += postNum.ToString();

  // Проверка: нет ли уже статьи с таким Key

  List<Article> Arts = App.Storage.GetList<Article>();

  foreach (Article Item in Arts)

   if (Item.Key == NewName)

    return GetUnique(value, ++postNum);

  // Проверка: нет ли уже подобного модуля

  string Folder = Server.MapPath("~/") + App.FOLDER_MODULES;

 foreach (string Item in Directory.GetFiles(Folder, "*.aspx"))

  {

if (NewName == Path.GetFileNameWithoutExtension(Item).ToLower())

    return GetUnique(value, ++postNum);

  }

  return NewName;

 }

 /// <summary>

 /// Для прав доступа

 /// </summary>

 #region Свойство EssenceType

 public override Type EssenceType

 {

  get { return typeof(Article); }

 }

 #endregion

}

}

Исходный текст EditBanner.cs

using System;

using System.Collections.Generic;

using System.Web.UI.WebControls;

using Cleopatra.Objects;

using Cleopatra.Services;

using Cleopatra.UI.CMS.Controls;

namespace Cleopatra.UI.CMS

{

/// <summary>

/// Страница редактирования Banner

/// </summary>

public partial class EditBanner : TranslateblePage

{

 protected BoxText tbName;

 protected BoxList ddlGroup;

 protected BoxDate dtDateStart;

 protected BoxDate dtDateStop;

 protected TextBox tbText;

 protected void Page_Load(object sender, EventArgs e)

 {

  if (!IsPostBack)

   BindData();

 }

 private void BindData()

 {

  ddlGroup.DataSource = App.Storage.GetList<BannerGroup>();

  ddlGroup.DataBind();

  int ID = FooID;

  if (ID == -1)

  {

   dtDateStart.Value = DateTime.Now;

   return;

  }

  Banner Node = App.Storage.GetItem<Banner>(ID);

  tbName.Value = Node.Name;

  ddlGroup.Value = Node.GroupID;

  dtDateStart.Value = Node.DateStart;

  dtDateStop.Value = Node.DateStop;

  tbText.Text = Node.Text;

 }

 protected void btnSave_Click(object sender, EventArgs e)

 {

  if (this.IsValid == false)

   return;

  Banner Node;

  int ID = FooID;

  if (ID == -1)

   Node = new Banner();

  else

   Node = App.Storage.GetItem<Banner>(ID);

  Node.Name = tbName.Value;

  Node.GroupID = ddlGroup.Value;

  Node.DateStart = dtDateStart.Value;

  Node.DateStop = dtDateStop.Value;

  Node.Text = tbText.Text.Trim();

  if (Node.ID == 0)

   App.Storage.Create(Node);

  else

   App.Storage.Update(Node);

string RedirectURL = "Records.aspx?table=" + typeof(Banner).Name;

  Response.Redirect(RedirectURL);

 }

 /// <summary>

 /// Для прав доступа

 /// </summary>

 #region Свойство EssenceType

 public override Type EssenceType

 {

  get { return typeof(Banner); }

 }

 #endregion

}

}

Исходный текст EditEmbade.cs

using System;

using System.Collections.Generic;

using System.Web.UI.WebControls;

using Cleopatra.Objects;

using Cleopatra.Services;

using Cleopatra.UI.CMS.Controls;

namespace Cleopatra.UI.CMS

{

/// <summary>

/// Страница редактирования Embade

/// </summary>

public partial class EditEmbade : TranslateblePage

{

 protected BoxText tbName;

 protected BoxText tbURL;

 protected BoxHTML tbText;

 protected Label lbKey;

 protected CheckBox cbProtect;

 protected void Page_Load(object sender, EventArgs e)

 {

  if (!IsPostBack)

   BindData();

 }

 private void BindData()

 {

  cbProtect.Visible = (Auth.CurrentUserID == Auth.AdminID);

  int ID = FooID;

  if (ID == -1)

   return;

  Embade Node = App.Storage.GetItem<Embade>(ID);

  tbName.Value = Node.Name;

  lbKey.Text = Node.Key;

  tbText.Value = Node.Text;

  tbURL.Value = Node.URL;

  cbProtect.Checked = Node.IsProtect;

 }

 protected void btnSave_Click(object sender, EventArgs e)

 {

  if (this.IsValid == false)

   return;

  Embade Node;

  int ID = FooID;

  if (ID == -1)

   Node = new Embade();

  else

   Node = App.Storage.GetItem<Embade>(ID);

  Node.Name = tbName.Value;

  Node.Text = tbText.Value;

  Node.URL = tbURL.Value;

  Node.IsProtect = cbProtect.Checked;

  if (Node.ID == 0)

  {

   Node.Key = GetUnique(TextJet.Translit(Node.Name, 36).ToLower(), 0);

   App.Storage.Create(Node);

  }

  else

   App.Storage.Update(Node);

  string RedirectURL = "Records.aspx?table=" + typeof(Embade).Name;

  Response.Redirect(RedirectURL);

 }

 /// <summary>

 /// Возвращает уникальный строковой ID, на уровне сайта

 /// </summary>

 /// <param name="value">Текущий уникальный строковой ID</param>

 /// <param name="postNum">Числовой постфикс</param>

 /// <returns>Метод рекурсивный</returns>

 private string GetUnique(string value, int postNum)

 {

  string NewName = value;

  if (postNum > 0)

   NewName += postNum.ToString();

  // Проверка: нет ли уже статьи с таким Key

  List<Embade> Arts = App.Storage.GetList<Embade>();

  foreach (Embade Item in Arts)

   if (Item.Key == NewName)

    return GetUnique(value, ++postNum);

  return NewName;

 }

 #region Свойство EssenceType

 public override Type EssenceType

 {

  get { return typeof(Embade); }

 }

 #endregion

}

}

Исходный текст EditFAQ.cs

using System;

using System.Collections.Generic;

using Cleopatra.Objects;

using Cleopatra.Services;

using Cleopatra.UI.CMS.Controls;

namespace Cleopatra.UI.CMS

{

/// <summary>

/// Страница редактирования FAQ

/// </summary>

public partial class EditFAQ : TranslateblePage

{

 protected BoxText tbName;

 protected BoxDate dtDate;

 protected BoxHTML tbAnswer;

 protected void Page_Load(object sender, EventArgs e)

 {

  if (!IsPostBack)

   BindData();

 }

 private void BindData()

 {

  int ID = FooID;

  if (ID == -1)

   return;

  FAQ Node = App.Storage.GetItem<FAQ>(ID);

  tbName.Value = Node.Name;

  dtDate.Value = Node.Date;

  tbAnswer.Value = Node.Answer;

 }

 protected void btnSave_Click(object sender, EventArgs e)

 {

  if (this.IsValid == false)

   return;

  FAQ Node;

  int ID = FooID;

  if (ID == -1)

   Node = new FAQ();

  else

   Node = App.Storage.GetItem<FAQ>(ID);

  Node.Name = tbName.Value;

  Node.Date = dtDate.Value;

  Node.Answer = tbAnswer.Value;

  if (Node.ID == 0)

   App.Storage.Create(Node);

  else

   App.Storage.Update(Node);

 string RedirectURL = "Records.aspx?table=" + typeof(FAQ).Name;

  Response.Redirect(RedirectURL);

 }

 /// <summary>

 /// Для прав доступа

 /// </summary>

 #region Свойство EssenceType

 public override Type EssenceType

 {

  get { return typeof(FAQ); }

 }

 #endregion

}

}

Исходный текст EditIndex.cs

using System;

using System.Collections.Generic;

using Cleopatra.Objects;

using Cleopatra.Services;

using Cleopatra.UI.CMS.Controls;

namespace Cleopatra.UI.CMS

{

/// <summary>

/// Страница редактирования Index

/// </summary>

public partial class EditIndex : TranslateblePage

{

 protected BoxText tbName;

 protected BoxHTML tbText;

 protected void Page_Load(object sender, EventArgs e)

 {

  if (!IsPostBack)

   BindData();

 }

 private void BindData()

 {

  int ID = FooID;

  if (ID == -1)

   return;

  Index Node = App.Storage.GetItem<Index>(ID);

  tbName.Value = Node.Name;

  tbText.Value = Node.Text;

 }

 protected void btnSave_Click(object sender, EventArgs e)

 {

  if (this.IsValid == false)

   return;

  Index Node;

  int ID = FooID;

  if (ID == -1)

   Node = new Index();

  else

   Node = App.Storage.GetItem<Index>(ID);

  Node.Name = tbName.Value;

  Node.Text = tbText.Value;

  if (Node.ID == 0)

   App.Storage.Create(Node);

  else

   App.Storage.Update(Node);

 string RedirectURL = "Records.aspx?table=" + typeof(Index).Name;

  Response.Redirect(RedirectURL);

 }

 /// <summary>

 /// Для прав доступа

 /// </summary>

 #region Свойство EssenceType

 public override Type EssenceType

 {

  get { return typeof(Index); }

 }

 #endregion

}

}

Исходный текст EditMenuNode.cs

using System;

using System.Text;

using System.Collections.Generic;

using System.Web.UI.WebControls;

using System.Drawing;

using Cleopatra.Objects;

using Cleopatra.Services;

using Cleopatra.UI.CMS.Controls;

using System.Web.UI.HtmlControls;

namespace Cleopatra.UI.CMS

{

/// <summary>

/// Страница редактирования MenuNode

/// </summary>

public partial class EditMenuNode : TranslateblePage

{

 protected BoxText tbName;

 protected BoxText tbURL;

 protected CheckBox cbProtect;

 protected HtmlContainerControl dvTree;

 protected HiddenField hNodes;

 protected DropDownList ddlPages;

 protected void Page_Load(object sender, EventArgs e)

 {

  if (!IsPostBack)

   BindData();

 }

 private void BindData()

 {

  cbProtect.Visible = (Auth.CurrentUserID == Auth.AdminID);

List<Cleopatra.Objects.Page> AL = App.Storage.GetList<Cleopatra.Objects.Page>();

  ddlPages.DataSource = AL;

  ddlPages.DataBind();

  ListItem LiSelect = new ListItem(string.Empty, "#");

  LiSelect.Attributes["style"] = "color: gray";

  ddlPages.Items.Insert(0, LiSelect);

ListItem LiOther = new ListItem(Translate("Other").ToUpper());

  ddlPages.Items.Add(LiOther);

  int ID = FooID;

  if (ID == -1)

   return;

  MenuNode Node = App.Storage.GetItem<MenuNode>(ID);

  ddlPages.SelectedValue = Node.URL.Replace(".aspx", null);

  tbName.Value = Node.Name;

  tbURL.Value = Node.URL;

  cbProtect.Checked = Node.IsProtect;

 }

 protected void btnSave_Click(object sender, EventArgs e)

 {

  if (this.IsValid == false)

   return;

  MenuNode Node;

  int ID = FooID;

  if (ID == -1)

   Node = new MenuNode();

  else

   Node = App.Storage.GetItem<MenuNode>(ID);

  if (hNodes.Value != string.Empty)

  {

   Point[] Points = ParseTree(hNodes.Value);

   for (int Num = 0; Num < Points.Length; Num++)

    SaveTree(Points[Num], Num);

  }

  Node.Name = tbName.Value;

  Node.URL = tbURL.Value.ToLower();

  Node.IsProtect = cbProtect.Checked;

  string RedirectURL;

  if (Node.ID == 0)

  {

   Node.SortOrder = int.MaxValue;

   App.Storage.Create(Node);

RedirectURL = this.Request.Url.LocalPath + "?ID=" + Node.ID.ToString();

  }

  else

  {

   App.Storage.Update(Node);

RedirectURL = "Records.aspx?table=" + typeof(MenuNode).Name;

  }

  Response.Redirect(RedirectURL);

 }

 

 private static Point[] ParseTree(string source)

 {

  string[] Arr = source.Split(',');

  string[] Para;

  List<Point> Points = new List<Point>(Arr.Length);

  foreach (string Item in Arr)

  {

   Para = Item.Split('-');

 Points.Add(new Point(int.Parse(Para[0]), int.Parse(Para[1])));

  }

  return Points.ToArray();

 }

 /// <summary>

 /// Генерирует строку (HTML) дерево из структуры меню

 /// </summary>

 /// <param name="id">Текущий обробатывемый ID</param>

 /// <remarks>Метод вызывается рекурсивно</remarks>

 private static string InitTree(int id, int fooID)

 {

  List<MenuNode> AL = App.Storage.GetList<MenuNode>();

  StringBuilder Sb = new StringBuilder();

  Sb.Append("<ul>");

  foreach (MenuNode Item in AL)

  {

   if (Item.ParentID == id)

   {

    if (fooID == Item.ID)

Sb.AppendFormat("<li id='{0}'><a href='#'><span class='current'>{1}</span></a>", Item.ID, Item.Name);

    else

Sb.AppendFormat("<li id='{0}'><a href='#'>{1}</a>", Item.ID, Item.Name);

    Sb.Append(InitTree(Item.ID, fooID));

    Sb.Append("</li>");

   }

  }

  Sb.Append("</ul>");

  return Sb.ToString();

 }

 /// <summary>

 /// Сохраняет элемент меню, переданный через point

 /// </summary>

 private static void SaveTree(Point point, int sortOrder)

 {

  MenuNode Node = App.Storage.GetItem<MenuNode>(point.X);

  if (Node == null)

   return;

 if ((Node.ParentID != point.Y) || (Node.SortOrder != sortOrder))

  {

   Node.ParentID = point.Y;

   Node.SortOrder = sortOrder;

   App.Storage.Update(Node);

  }

 }

 /// <summary>

 /// Для прав доступа

 /// </summary>

 #region Свойство EssenceType

 public override Type EssenceType

 {

  get { return typeof(MenuNode); }

 }

 #endregion

}

}


ПРИЛОЖЕНИЕ 2

Руководство пользователя

Вход в систему управления сайтом

Операции по изменению содержания сайта, выполняются в системе управления сайтом. Доступ в него, имеют пользователи, которым предоставлены соответствующие права. Чтобы попасть в этот раздел. В строке адреса сайта, после последнего символа “/” напишите “CMS”, например, http://www.mysite.com/CMS. Нажмите ввод, и Вы попадёте на страницу аутентификации (рисунок П.2.1).

Рисунок П.2.1 – Форма аутентификации

Здесь необходимо ввести логин и пароль, а так же, Verification Code, указанный справа. Стоит обратить внимание на флажок “Remember me”. Если он установлен, то система вас “запомнит”, и при следующей попытке войти в систему управления, вам уже не надо будет повторно заполнять данную форму.

Если Вы ввели правильные аутентификационные данные, Вы попадёте на рабочий стол системы управления, откуда получите доступ к функционалу сайта.


Управление новостями
.

Администратор сайта или другой пользователь, обладающий соответствующими правами, может добавлять/редактировать/удалять новости. Для этого необходимо зайти в систему управления. И выбрать элемент рабочего стала “Новости” (рисунок П.2.2).

Рисунок П.2.2 – Рабочий стол

Рисунок П.2.3 – Список новостей

Далее Вы попадёте в модуль «Новости» (рисунок П.2.3). В списке новостей, находятся все новости, представленные на сайте.

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

элементом управления, проиллюстрированном на рисунке П.2.4.

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

Если Вам нужно создать новую новость, кликните мышкой по кнопке “Создать”, внизу под таблицей.

Для редактирования новости кликните по строке с заголовком соответствующей новости, и Вы попадёте на форму редактирования.

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

Заголовок новости – обязательное текстовое поле, в котором указывается название новости.

Дата – дата публикации новости. На сайте новости отображаются в соответствии с датой публикации. Самые последние новости отображаются на главной странице. А самые старые новости, находятся в архиве новостей, и их можно просмотреть, выбрав соответствующий год и месяц публикации новости.

Для изменения даты публикации новости, кликните на картинку “календаря”, расположенную справа от поля даты. Появиться интерактивный календарь (рисунок П.2.5), в котором мышкой можно выбрать необходимый год/месяц/число. Если это поле не заполнять. В качестве дня публикации, будет взят сегодняшний день. 

Краткий текст – текстовое поле, в котором указывается анонс новости. Здесь можно кратко (1-2 предложения) написать, о чём новость, чтобы заинтересовать пользователя, и у него возникло желание прочесть новость целиком. Если это поле оставить не заполненным, то в качестве текста будет взято начало содержания новости.

Текст – содержание новости. Чтобы изменить содержание новости, необходимо кликнуть на кнопку “Редактировать”, находящуюся под текстовым полем. Появиться новое окно, с визуальным текстовым редактором, внешним видом похожим на редактор Microsoft Word, подробнее об этом визуальном редакторе будет рассказано, ниже. Визуальный редактор, позволяет применять стили оформления, вставлять изображения, изменять размеры шрифтов и т.д., что позволяет оформить содержание новости с учётом фантазии автора.

Изображение. За каждой новостью можно закрепить картинку, которая будет ассоциироваться с данной новостью. Для этого кликните, на кнопку “Обзор”, и в появившемся диалоговом окне, выберите картинку на вашем локальном компьютере. Картинка будет загружена на сервер, и её размеры изменены в соответствии с общим стандартом. Поэтому нету надобности заранее обрезать/уменьшать картинку, система сделает это сама. Необходимо учитывать, что картинка должна быть одного из перечисленных форматов: JPG, GIF, PNG. Иначе система проигнорирует вашу картинку.

Новости – являются типовым модулем, поэтому функциональность (добавление, удаление, редактирование, сортировка, вывод на странице), описанная выше, применима и к другим модулям.

Управлениями статьями.

Статьи по своей структуре похожи на новости. Администрирование статей происходит похожим способом. В системе управления, на рабочем столе есть пункт “Статьи”, кликнув по которому мы попадаем в модуль «Статьи» (рисунок П.2.6).

Рисунок П.2.6 – Список статей

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

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

Поля формы редактирования статьи, похожи на поля формы редактирования новости. Есть одно уникальное поле характерное только для статей, это поле “Ключевые слова. В этом поле, через пробел, указываются тезисы статьи и основные термины. Это нужно для оптимизации поиска. Поисковые системы, такие как Google, Yandex и др. будут использовать указанные здесь слова в своём механизме поиска. Правильно составленные “ключевые слова” помогут в продвижении сайта, и смогут поднять выше ваш сайт в результатах поиска, в подобных поисковых системах.

В тексте статьи можно оставлять ссылки на другие статьи сайта (перекрестные ссылки). Для этого в качестве адреса статьи, указывается её ID. Посмотреть который можно внизу формы редактирования статьи (рис. 2.7).

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

Изменение структуры меню.

Меню является одним из важнейших способов навигации по сайту. Меню имеет иерархическую структуру. Т.е. в одни элементы меню, могут входить другие элементы меню, в которые, в свою очередь, могут входить третьи, и т.д. Элементы меню можно создавать, удалять, изменять, переносить из одной “ветки” в другую. Для этого в системе управления, на рабочем столе есть пункт “Меню”, кликнув по которому мы попадаем в модуль «Меню».

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

Рассмотрим форму редактирования элемента меню. Стоит обратить внимание на панель “Предпросмотр”. На которой отображена вся структура меню, а текущий элемент, подсвечен синим цветом. Важной особенностью этой панели является то что, структуру меню можно менять, перетягивая мышкой (Drag&Drop), элементы из одной ветки в другую, как это показано на рисунке П.2.8. Каждый элемент меню, помимо названия, имеет адрес ссылки, куда будет вести этот пункт.

В качестве адреса можно указать любой Интернет адрес, в том числе и на внешний ресурс, для этого его надо написать в текстовом поле “URL”. Как правило, в качестве адресов пунктов меню используются внутренние разделы сайта, например статьи. Для того, чтобы связать элемент меню с внутреннем ресурсом, выберите его из списка и кликните мышкой по оранжевой стрелочке, направленной влево (рисунок 2.8). На некоторых сайтах, меню, в связи с особенностями дизайна, не выпадающее. По этому, на самом сайте, в меню отображается только верхний уровень, а все вложенные элементы будут проигнорированы!

Рисунок П.2.9 – URL  элемента меню

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

Управление баннерами на сайте.

Баннерный блок – это область на сайте, специально выделенная для отображения нескольких рекламных баннеров. Баннерных блоков на сайте может быть несколько, но изменять их место расположения нельзя, так как баннерные блоки являются частью заранее разработанного дизайна. Но можно изменять содержание баннерного блока. В баннерном блоке заранее определено кол-во “свободных мест”. Но баннеров, относящихся к данному блоку, может быть и больше. В этом случае, в баннерном блоке будут отображены случайным образом выбранные баннеры.

Рассмотрим форму редактирования баннера.

Название – обязательное текстовое поле (на сайте оно нигде не отображается) для внутренней идентификации.

Начало показа/конец показа – здесь указывается период, который баннер будет активен (будет отображаться на сайте). До и после этого периода баннер на сайте увидеть будет нельзя. Изменение даты, аналогично изменению даты в модуле «Новости».

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

HTML код – сюда вставляется “тело” баннера, это может быть картинка со ссылкой, Flash, или другой элемент. Как правило, сайт на который будет ссылаться баннер, предоставляет HTML код своего баннера. По этому администратору нет необходимости знать особенности HTML, для добавления баннеров.

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

Файловый менеджер.

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

Попасть в файловый менеджер, можно из системы управления на рабочем столе, кликнув мышкой по пункту “Файлы”.

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

В корневой директории всегда будет присутствовать папка “UserInfo”, с полным доступом. Именно сюда необходимо загружать все новые пользовательские файлы. Загружаются они с помощью специального элемента управления, расположенного снизу, под таблицей. Для этого кликните, на кнопку “Обзор”, и в появившемся стандартном диалоговом окне выбора файла, выберите файл на вашем локальном компьютере, и нажмите “Добавить”. Можно загружать одновременно несколько файлов. Для этого необходимо кликнуть на “плюсик”, рядом с кнопкой “Browse”. И появиться новое поле для выбора файла (рисунок П.2.10).

Рисунок П.2.10 – Файловый менеджер

Встраиваемые блоки.

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

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

Особенности использования визуального редактора.

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

Для того чтобы воспользоваться редактором. Необходимо кликнуть мышкой по кнопке “Редактировать”, на форме, где находиться соответствующее текстовое поле.

 

Перед вами раскроется визуальный текстовый редактор (рисунок П.2.12), и пока Вы не закончите с ним работу, Вы не сможете вернуться в состояние редактирования статьи или новости. Если скорость соединения с сетью Интернет, небольшая, то необходимо подождать пока редактор загрузиться (от 1сек. до 1мин.)

Рисунок П.2.12 – WYSIWYG редактор

Стоит обратить внимание на 2 важных момента, которые часто вызывают трудности. Как правило, текст не пишется непосредственно в данном визуальном редакторе, а вставляется из внешнего редактора, из заранее подготовленных документов, в большинстве случаев в Microsoft Word. Такой текст необходимо вставлять с помощью специальной кнопки “Вставить из Microsoft Word”. Иначе вставленный текст будет сильно отличаться от исходного. Это связанно с особенностей формата Word. В идеале, копируемый текст из Word, предназначен для вставки в офисные приложения Microsoft, или в другие программы, но уже с полной потеряй форматирования (как это происходит при вставке из Word в блокнот). Для того чтобы максимально сохранить исходное форматирование текста, при вставке из Word следует пользоваться описанной выше функциональностью.

Второй момент, на который необходимо обратить внимание это вставка картинок, этот процесс рассмотрим подробнее.

Для того чтобы вставить изображение, сразу установите курсор в позицию, куда она будет вставлена. Потом кликните на соответствующую кнопку, на панели инструментов (она выделена на рисунке П.2.12). Перед вами откроется диалоговое окно вставки картинки (рисунок П.2.13). В нём Вы можете выбрать необходимое вам изображение, двойным щёлчком мыши. Если это изображение ещё не загружено на сервер, Вы можете его загрузить в этом же окне, точно так же как это делается в файловом менеджере. Здесь же, можно указать выравнивание изображения, т.е. к какому краю оно будет прижато.

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

Рисунок П.2.13 – Диалоговое окно вставки изображения


 

А также другие работы, которые могут Вас заинтересовать

44964. Качество установившихся процессов в линейных САУ. Корневые критерии качества 469 KB
  Корневые критерии качества. Совокупность требований определяющих поведение САУ в установившихся и переходных процессах объединяется понятием качества процесса управления. позволяют оценивать показатели качества переходных процессов по косвенным признакам не решая диф. критериями качества переходных процессов.
44965. Качество установившихся процессов в линейных САУ. Интегральные критерии качества 159.5 KB
  Совокупность требований определяющих поведение САУ в установившихся и переходных процессах объединяется понятием качества процесса управления. Качество процесса управления можно рассматривать раздельно для установившихся процессов и для переходных процессов. такие которые одним числом оценивают и величины отклонений и время затухания переходного процесса. В дальнейшем буде отсчитываться отклонение переходного процесса от нового установившегося состояния.
44966. Коррекция САУ. Способы коррекции 373.5 KB
  Основная задача корректирующих устройств состоит в улучшении точности и качества переходных процессов. Различают 3 основных вида корректирующих устройств: Последовательные корректирующие устройства. Действия корректирующих звеньев сводиться к следующему: Введение в контур САУ воздействия по производным и интегралам. Введение корректирующих обратных связей вокруг определённой части системы.
44967. Коррекция САУ в функции внешних воздействий. Инвариантность 652.5 KB
  Если же вводится корректирующее устройство по внешнему воздействию то получается комбинированное управление и по ошибке и по внешнему воздействию Путём введения коррекции по внешнему воздействию удаётся при определённых условиях свести величину установленной ошибки к нулю при любой форме внешнего воздействия. Это свойство называется инвариантностью системы по отношению к внешнему воздействию. Корректирующие устройства по задающему воздействию Передаточная функция ошибки: Установившееся ошибка будет равна 0 если числитель будет = 0....
44968. Задачи и методы синтеза лмнейных САУ 1.29 MB
  Задачи синтеза САУ заключаются в определении управляющего устройства в виде его математического описания. Синтезсоздание управляющего устройства при известном условии. В результате сравнения определяется передаточная функция корректирующего устройства. Сюда относится объект управления и слежения с объектом устройства исполнительный механизм чувствительный элемент и т.