Разработка информационного web-сайта на основе системы «1С-Битрикс: Управление сайтом»

Автор работы: Пользователь скрыл имя, 29 Апреля 2014 в 17:16, дипломная работа

Краткое описание

Web-приложение – клиент-серверное приложение, в котором сервером выступает web-сервер, клиентом программа или устройство, способное получить доступ к web-серверу. Логика web-приложения распределена между сервером и клиентом, хранение данных осуществляется преимущественно на сервере, обмен информацией происходит по сети.
Web - сервер — это сервер, принимающий HTTP-запросы от клиентов, обычно веб-браузеров, и выдающий им HTTP-ответы, обычно вместе с HTML-страницей, изображением, файлом, медиа-потоком или другими данными.
CMS (Content management system) – компьютерная система или программа, используемая для обеспечения и организации совместного процесса создания, редактирования и управления текстовыми и мультимедиа документами.

Содержание

Обозначения и сокращения 6
Определения 7
Введение 9
1. Описание основных используемых технологий и языков программирования 10
1.1. Общие сведения 10
1.2. Язык программирования PHP 10
1.3. Web-сервер Apache 11
1.4. СУБД MySQL 12
1.5. Язык программирования JavaScript 12
1.6. Технология AJAX 13
1.7. Таблица стилей CSS 14
1.8. Общая схема работы web-приложения 14
2. Описание системы «1С – Битрикс: Управление сайтом» 16
2.1. Общие сведения 16
2.2. Преимущества и недостатки системы 16
2.3. Целесообразность использования системы 18
2.4. Сравнение с другими системами 19
3. Описание API системы «1С – Битрикс: Управление сайтом» 21
3.1. Общие сведения 21
3.2. API модуля «Главный модуль» 21
3.3. API модуля «Информационные блоки» 23
4. Формирование требований к сценариям работы web-приложения 26
4.1. Общие сведения 26
4.2. Список требований 26
5. Диаграмма информационных блоков 29
5.1. Общие сведения 29
5.2. ER – диаграмма данных web-приложения 29
5.3. Определение информационных блоков 31
6. Описание программных компонентов 34
6.1. Создание общей структуры страниц web-приложения 34
6.2. Реализация структуры страниц web-приложения, физическая структура 36
6.3. Список программных компонентов 39
6.3.1. Компонент «Список всех игр» 39
6.3.2. Компонент «Список новых и выходящих игр» 40
6.3.3. Компонент «Список лучших игр» 42
6.3.4. Компонент «Список 100 лучших игр» 43
6.3.5. Компонент «Фильтр по играм» 44
6.3.6. Компонент «Поиск по играм» 45
6.3.7. Компонент «Автоподсказки в поиске» 46
6.3.8. Компонент «Список обзоров к игре» 47
6.3.9. Компонент «Детальная страница игры» 48
6.3.10. Компонент «Форма поиска» 48
6.3.11. Компонент «Страница разработчика игры» 49
6.3.12. Компонент «Список лучших игр за год» 50
6.4. Диаграмма связей между страницами web-приложения и компонентами 51
6.5. Особенности реализации сценариев работы web-приложения. 51
6.5.1. Общие сведения 51
6.5.2. Сохранение состояния страниц при использовании AJAX – запросов 52
6.5.3. Обработка событий панели управления. 55
7. Резервное копирование данных web-приложения. Система управления версиями 59
7.1. Общие сведения 59
7.2. Реализация резервного копирования 59
7.3. Система управления версиями 62
7.3.1. Описание системы Subversion 62
7.3.2. Настройка Subversion для работы с web-приложением 64
8. Нагрузочное тестирование 69
8.1. Общие сведения 69
8.2. Техника проведения нагрузочного тестирования 69
8.3. Оценка результатов тестирования 71
Заключение 76
Список использованных источников 77
Приложение A. Принцип работы системы «1С – Битрикс: Управление сайтом» 78
А.1. Общие сведения 78
А.2. Модульная структура системы 78
А.2.1. Главный модуль 79
А.2.2. Модуль «Управление структурой» 79
А.2.3. Модуль «Информационные блоки» 80
А.3. Компоненты 81
А.3.1. Общие сведения 81
А.3.2. Файловая структура компонента 81
А.3.3. Схема обмена данными между файлами компонента 85
А.3.4. Публичный раздел системы 87
А.3.4.1. Порядок загрузки страницы web-приложения 87
А.3.4.2. Подключение модулей системы 87
А.3.4.3. Подключение шаблонов web-приложения 88
А.3.4.4. Подключение компонентов web-приложения 88
Приложение Б. Требования заказчика к работе web-приложения и дизайн-концепция 90
Приложение В. Исходные коды программных компонентов 95
В.1. Компонент games.calendar 95
В.2. Компонент games.raiting 99
В.3. Компонент games.filter 102
В.4. Компонент games.search 113
В.5. Компонент games.detail 117
В.6. Компонент search_autocomplete 121
В.7. Компонент reviews.list 126

Прикрепленные файлы: 1 файл

СОЗДАНИЕ САЙТА.doc

— 1.87 Мб (Скачать документ)
  1. Мини-обложка
  2. Название (является ссылкой на детальное описание игры)
  3. Платформа
  4. Метаоценка
  5. Дата выхода
  6. Однострочное описание игры

 

Компонент «алфавитный указатель»

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

 

 

Компонент «список игр»

Компонент представляет из себя список игр. По умолчанию выводится 15 игр с датой выхода в России не ранее 12 последних месяцев.

Для каждой игры выводится:

  1. Название (является ссылкой на детальную страницу карточки)
  2. Обложка
  3. Дата выхода в России
  4. Жанр
  5. Метаоценка

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

  1. Букву русского или английского алфавита
  2. Начальную дату выхода в России
  3. Конечную дату выхода в России
  4. Жанр
  5. Минимальную метаоценку
  6. Минимальную оценку пользователей
  7. Минимальный возраст
  8. Максимальный возраст

Компонент «Фильтры»

Компонент фильтры выводится на странице рейтинга игр.

Кроме того,  над рейтингом расположены параметры, по которым пользователь имеет возможность изменять параметры рейтинга:

  1. Дата выхода (в виде ползунка на шкале времени)
  2. Жанр (выбор из списка)
  3. Возраст (выбор из списка)

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

 

Требования

Требования к верстке и отображению

Верстка всех страниц должна удовлетворять форматуxhtml 1.0 strict и проходить соответствующую валидацию на сайте validator.w3.org.

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

  1. Internet explorer 7.0+
  2. Mozilla firefox 3.0+
  3. Opera 9.0+
  4. Google Chrome
  5. Safari (!! Уточнить версию)

Сайт должен отображаться к кодировке UTF-8

Время выполнения каждой из страниц сайта не должно превышать одной секунды

 

Требования к интеграции и коду

Интеграция с платформой «1С-Битрикс» должна быть произведена абсолютно корректно, таким образом, чтобы последующие обновления системы («1С-Битрикс») никак не влияли на работы сайта. В частности:

  1. Не должно быть изменено ни одного файла из тех, которые могут быть изменены при обновлении
  2. Номера всех инфоблоков должны быть использованы только в виде констант. Константы должны быть вынесены в конфигурационный файл (init.php)
  3. Все используемые на сайте компоненты (как полностью созданные новые, так и существующие стандартные) должны соответствовать формату компонентов 2.0 с четко разделенной логикой и представлением

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

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

 

 

Приложение В. Исходные коды программных компонентов

В.1. Компонент games.calendar

Файл component.php

 

<?php

//компонент

if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

try

{

    //массив с именами  месяцев

    global $arMonthNames;

    //обрабатываем массив $arParams

    prepare_params($arParams);

    //проверяем параметры

    if(strlen($arParams["IBLOCK_TYPE"]) <= 0){

        $arParams["IBLOCK_TYPE"] = IB_TYPE_GAMES;

    }

    $arParams["COUNT"] = intval($arParams["COUNT"]);

    if($arParams["COUNT"] <= 0){

        $arParams["COUNT"] = 10;

    }

    if(strlen($arParams["SORT_BY1"]) <= 0){

        $arParams["SORT_BY1"] = "PROPERTY_MAIN_METAMARK";

    }

    if($arParams["SORT_ORDER1"] != "DESC"){

        $arParams["SORT_ORDER1"] = "ASC";

    }

    if(strlen($arParams["SORT_BY2"]) <= 0){

        $arParams["SORT_BY2"] = "NAME";

    }

    if($arParams["SORT_ORDER2"] != "DESC"){

        $arParams["SORT_ORDER2"] = "ASC";

    }

    $arParams["MIN_METAMARK_YELLOW"] = intval($arParams["MIN_METAMARK_YELLOW"]);

    $arParams["MIN_METAMARK_GREEN"] = intval($arParams["MIN_METAMARK_GREEN"]);

    if($arParams["MIN_METAMARK_YELLOW"] <= 0){

        $arParams["MIN_METAMARK_YELLOW"] = 50;

    }

    if($arParams["MIN_METAMARK_GREEN"] <= 0){

        $arParams["MIN_METAMARK_GREEN"] = 75;

    }

    //параметры сортировки

    $arSortOrder = array(

      $arParams["SORT_BY1"] => $arParams["SORT_ORDER1"],

      $arParams["SORT_BY2"] => $arParams["SORT_ORDER2"],

      "ID" => "DESC"

    );

    //параметры фильтрации

    $arFilter = array(

      "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],

      "ACTIVE" => "Y",

      "SECTION_ACTIVE" => "Y"

    );

    //если в настройках  указана фильтрация по секции (платформе), задаем параметры фильтра

    if(!empty($arParams["IBLOCK_SECTION_CODE"])){

        $arFilter["SECTION_CODE"] = $arParams["IBLOCK_SECTION_CODE"];

    }

    $current_year = intval(date("Y"));

    $current_month = intval(date("m"));

    $current_day = intval(date("d"));

    $top_day = get_max_day($current_month, $current_year);

    //если указан фильтр, включаем его в запрос

    if(isset($arParams["FILTER"]) && is_array($arParams["FILTER"]) && count($arParams["FILTER"]) > 0){

        $arFilter = array_merge($arFilter, $arParams["FILTER"]);

        if(isset($arFilter[">=PROPERTY_DATES_DATE_REL_RUS"])){

            $selected_month = intval(date("m", strtotime($arFilter[">=PROPERTY_DATES_DATE_REL_RUS"])));

            $selected_year = intval(date("Y", strtotime($arFilter[">=PROPERTY_DATES_DATE_REL_RUS"])));

            if($arParams["DATE_BORDER"] == "bottom"){

                if($selected_year < $current_year){

                    $arFilter[">=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d");

                }

                elseif($selected_year == $current_year){

                    if($selected_month <= $current_month){

                        $arFilter[">=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d");

                    }

                }

            }

        }

        else{

            $selected_month = date("m");

            if($arParams["DATE_BORDER"] == "bottom" && $selected_month == $current_month){

                $arFilter[">=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d");

            }

        }

        if(isset($arFilter["<=PROPERTY_DATES_DATE_REL_RUS"])){

            $selected_month = intval(date("m", strtotime($arFilter["<=PROPERTY_DATES_DATE_REL_RUS"])));

            $selected_year = intval(date("Y", strtotime($arFilter["<=PROPERTY_DATES_DATE_REL_RUS"])));

            if($arParams["DATE_BORDER"] == "top"){

                if($selected_year > $current_year){

                    $arFilter["<=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d");

                }

                elseif($selected_year == $current_year){

                    if($selected_month >= $current_month){

                        $arFilter["<=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d");

                    }

                }

            }

        }

        else{

            $selected_month = date("m");

            if($arParams["DATE_BORDER"] == "top" && $selected_month == $current_month){

                $arFilter["<=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d");

            }  

        }

    }

    else{

        //не  выводим с датой меньше или  больше текущей

        if($arParams["DATE_BORDER"] == "top"){

            $arFilter["<=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d");

        }

        elseif($arParams["DATE_BORDER"] == "bottom"){

            $arFilter[">=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d");

        }

        //иначе  указываем фильтрацию по текущему  месяцу

        if($arParams["CURRENT_MONTH_DEFAULT"] == "Y"){

            if($arParams["DATE_BORDER"] != "bottom"){

                $arFilter[">=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d", strtotime("01.".$current_month.".".$current_year));

            }

            else{

                $arFilter[">=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d");

            }

            if($arParams["DATE_BORDER"] != "top"){

                $arFilter["<=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d", strtotime($top_day.".".$current_month.".".$current_year));

            }

            else{

                $arFilter["<=PROPERTY_DATES_DATE_REL_RUS"] = date("Y-m-d");

            }

        }

    }

    //кеширование зависит  от настроек фильтра, отобразим  это в ID кеша

    //вносим в кеш данные постраничной навигации

    $cache_id_arr = array(CDBResult::NavStringForCache($arParams["COUNT"]));

    //и параметры  фильтра

    foreach($arFilter as $filt){

        $cache_id_arr[] = trim(str_replace(array(";", ":", " ","-"), "", $filt));

   }

    $cache_id = implode("", $cache_id_arr);

    //с данного момента  включаем кеширование

    if($this->StartResultCache(false, $cache_id)){

        //формируем костяк массива, принимаемого в шаблоне

        $arResult = array(

          "ITEMS" => array(),   //массив самих игр

          "NO_ITEMS" => false,  //флаг наличия элементов в результирующем сете

          "PAGENAV" => "",      //строка постраничной навигации

          "IS_ERROR" => false   //флаг наличия какой-либо ошибки

        );

        //проверяем, подключен ли модуль

        if(!CModule::IncludeModule("iblock")){          

            $arResult["IS_ERROR"] = true;

            throw new Exception(GetMessage("C_MODULE_ERROR"));

        }

        $arSelect = array(

          "NAME", "ID", "DETAIL_PAGE_URL", "PREVIEW_PICTURE",

          "PROPERTY_DATES_DATE_REL_RUS", "PROPERTY_MAIN_METAMARK",

          "PROPERTY_GENRE_GENRE", "IBLOCK_SECTION_ID", "PROPERTY_DATES_DATE_REL"

        );

        $db_element = CIBlockElement::GetList($arSortOrder, $arFilter, false, array("nPageSize" => $arParams["COUNT"]), $arSelect);

        //ошибка запроса к базе данных

        if(!$db_element){

            $arResult["IS_ERROR"] = true;

            throw new Exception(DB_ERROR_TEXT);

        }

        //если  элементов в запросе не найдено

        if($db_element->SelectedRowsCount() <= 0){

            $arResult["IS_ERROR"] = true;

            $arResult["NO_ITEMS"] = true;

            throw new Exception(GetMessage("C_NO_ITEMS"));

        }

        //разбиваем  сет запроса на страницы

        $db_element->NavStart($arParams["COUNT"]);

        //получаем постраничную навигацию

        $arResult["PAGENAV"] = $db_element->GetNavPrint("", false, "", "/bitrix/templates/.default/pagenav_template.php");

        //если в настройках компонента задан шаблон пути к элементу на детальн. страницу, обрабатываем шаблон пути

        if(!empty($arParams["DETAIL_URL"])){

            $db_element->SetUrlTemplates($arParams["DETAIL_URL"]);

        }

        //массив ID секций (платформ)

        $section_ids = array();

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

        $section_id_elem = array();

        //получаем  элементы по одному

        while($fetch_element = $db_element->GetNext()){

            //получаем поля элемента (основные)

            $fields["NAME"] = htmlspecialchars($fetch_element["NAME"]);

            $fields["DETAIL_PAGE_URL"] = $fetch_element["DETAIL_PAGE_URL"];

            $fields["PREVIEW_PICTURE"] = intval($fetch_element["PREVIEW_PICTURE"]);

            $fields["IBLOCK_SECTION_ID"] = intval($fetch_element["IBLOCK_SECTION_ID"]);

            $fields["ID"] = intval($fetch_element["ID"]);

            //если задана превью-обложка, получаем массив ее изображения

            if($fields["PREVIEW_PICTURE"] > 0){

                $fields["PREVIEW_PICTURE"] = CFile::GetFileArray($fields["PREVIEW_PICTURE"]);

            }

            else{

                $fields["PREVIEW_PICTURE"] = false;

            }

            //получаем свойства элемента

            $props["DATES_DATE_REL_RUS"]["VALUE"] = trim(htmlspecialchars($fetch_element["PROPERTY_DATES_DATE_REL_RUS_VALUE"]));

            $props["DATES_DATE_REL"]["VALUE"] = trim(htmlspecialchars($fetch_element["PROPERTY_DATES_DATE_REL_VALUE"]));

            //если не указана дата выхода в России, используем дату выхода в общем

            $props["MAIN_METAMARK"]["VALUE"] = floatval($fetch_element["PROPERTY_MAIN_METAMARK_VALUE"]);

            $props["GENRE_GENRE"]["VALUE"] = $fetch_element["PROPERTY_GENRE_GENRE_VALUE"];

            if(empty($props["DATES_DATE_REL_RUS"]["VALUE"])){

                $props["DATES_DATE_REL_RUS"]["VALUE"] = $props["DATES_DATE_REL"]["VALUE"];

            }

            //формируем вывод даты в соотвествии  с требованиями

            if(!empty($props["DATES_DATE_REL_RUS"]["VALUE"])){

                $day = intval(date("d", strtotime($props["DATES_DATE_REL_RUS"]["VALUE"])));

                $month_name = mb_substr($arMonthNames[intval(date("m", strtotime($props["DATES_DATE_REL_RUS"]["VALUE"])))]["month_a"], 0, 3, LANG_CHARSET);

                $month_name_full = $arMonthNames[intval(date("m", strtotime($props["DATES_DATE_REL_RUS"]["VALUE"])))]["month_a"];

                $year = date("Y", strtotime($props["DATES_DATE_REL_RUS"]["VALUE"]));

                $props["DATES_DATE_REL_RUS"]["VALUE"] = $day." ".$month_name." ".$year;

Информация о работе Разработка информационного web-сайта на основе системы «1С-Битрикс: Управление сайтом»