Разработка первой версии тиражного решения типового сайта танцевальных школ

Требования посетителей к содержимому сайта. Анализ визуальной структуры страницы на "1С-Битрикс". Особенность реализации пользовательского компонента. Характеристика построения функциональной модели. Исследование стоимостной диагностики функций.

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

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

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

<?--#DANCE_TEMPLATE_***_***#-->

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

Рисунок 28 - Прописание шаблона

Рисунок 29 - Прописание компоненты «Новость»

Прописание компонент и инфоблоков

Сервисы, которые пользователь может при желании установить на свой сайт, лежат в папке /modules/ (относительно корневого каталога мастера). Основной файл - servises.php. В нем перечисляются все те сервисы, которые выводятся в мастере на последнем шаге. Рассмотрим прописание компонент на примере новостей (рисунок 29).

Ниже на рис. 30 рассмотрим схему создания страниц, использующих данные инфоблока «Новости».

Рисунок 30 - Создание страниц, использующих инфоблок «Новости»

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

Рисунок 31 - Создание нового информационного блока

Рисунок 32 - Копирование файлов

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

7. Организационно-экономическая часть

7.1 Функционально-стоимостный анализ

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

Объектом ФСА может быть система или элемент системы любой природы и любой сложности. ФСА используется на всех этапах НИР, проектах и ОКР для предотвращения появления неэффективных решений. Он позволяет абстрагироваться от предметного и структурного содержания объекта и рассматривать его как объект совокупности функций, необходимых потребителю, определять минимально необходимые затраты на их реализацию с учетом важности для потребителя, находить технические решения, укладывающиеся в заданные ограничения по затратам и качеству. Функциональное моделирование (построение и анализ функциональной модели как основы ФСА) является инструментом определения технико-экономического дисбаланса в технических системах и служит для выявления противоречий, возникающих при создании и эксплуатации различных объектов.

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

7.2 Обоснование необходимости проведения ФСА

Выявить элементы объекта, которые необходимо подвергнуть более тщательному функциональному анализу можно с помощью метода «АВС» (диаграммы Парето, рисунок 33).

По оси х расположены структурные элементы объекта в порядке убывания затрат (Эл1) затр. (Эл2) … затр. (Элn). Те элементы, которые попадают в зону А от 0% до 75% общих затрат, должны быть подвергнуты наиболее тщательному анализу в первую очередь, т.к. даже небольшое снижение затрат в этой зоне повлечет за собой значительное снижение общих затрат (т.к. их удельный вес в общей структуре затрат гораздо выше).

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

Эл1 - Мастер сайта

Эл2 - компонент «Отзывы»

Эл3 - компонент «Вопрос-ответ»

Эл4 - компонент «Календарь новостей и событий»

Эл5 - компонент «Меню направлений»

7.3 Структурная модель проекта

Рисунок 34 - Структурная модель проекта

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

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

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

В таблице 2 перечислим функции структурных элементов.

Таблица 2 - Функции структурных элементов

Носитель функции

Наименование функции

Вид функции

Степень полезности

Индекс функции

Глагол

Существительное

Дополнение

Модуль

Объединяет

компоненты

воедино

Г

П

F1

Мастер

Устанавливает

сайт

Г

П

F2

Компонент «Меню направлений»

Выводит

меню

направлений

О

П

F111

Компонент «Календарь новостей и событий»

Выводит

дату

событий

О

П

F121

Выводит

дату

новостей

О

П

F122

Отображает

дату

О

Н

F123

Компонент «Отзывы»

Выводит

список

отзывов

О

П

F131

Выводит

форму

отзывов

О

П

F132

Компонент «Вопрос - ответ»

Выводит

список

вопросов

О

П

F141

Выводит

форму

вопросов

О

П

F142

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

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

Наиболее значимыми факторами рассматриваемого проекта являются:

1) юзабилити, т.е. на сколько легко пользователю сориентироваться на сайте;

2) универсальность;

3) удобство администрирования.

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

Таблица 3 - Матрица попарного сравнения

Индекс свойств

Индекс свойств

Количество предпочтений

Значимость

1

2

3

4

5

6

7

8

1

-

1

1

1

1

1

1

1

7

1/5

2

1

-

2

2

2

2

2

2

6

6/35

3

1

2

-

3

3

6

3

3

4

4/35

4

1

2

3

-

5

6

7

8

0

0

5

1

2

3

5

-

6

5

8

1

1/35

6

1

2

6

6

6

-

6

6

5

1/7

7

1

2

3

7

5

6

-

8

1

1/35

8

1

2

3

8

8

6

8

-

3

3/35

Итого

35

1

Рассматриваем функции F111 (1), F121(2),F122(3),F123 (4),F131(5),F132(6),F141(7),F142(8). Из таблицы 3 видно, что наиболее значимой функцией второго уровня является функция «Вывод меню направлений».

7.6 Стоимостная диагностика функций

Стоимостные затраты по функциям анализируемого объекта можно оценить с помощью традиционных формул (см. таблицу 4).

Таблица 4 - Алгоритмы стоимостной оценки структурных элементов или функций

№ п/п

Типы затрат

Формула расчета

Условные обозначения

1

Общие затраты

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

S1=600руб

S2=900руб

S3=900руб

S4=900руб

S5=3000руб

SFk=6300руб

- общие затраты по FK функциям;

S1- затраты на компонент «Меню направлений»

S2- затраты на компонент «Календарь новостей и событий»;

S3- затраты на компонент «Отзывы»;

S4- затраты на компонент «Вопрос-ответ»;

S5- затраты на мастер сайта;

Sd - дополнительные затраты по связи.

2

Затраты на материалы

С1*m1=<стоимость интернета в месяц> * <количество месяцев, затраченных на работу> * <считаем, что весь интернет уходит на диплом> = 690р*2мес*1=1380р

С2*m2=<стоимость ПО Битрикс «Стандарт» (покупается заказчиком для управления контентом сайта)> * <данное ПО необходимо исключительно для поддержания контента> = 12900р

С3*m3=<оборудование, необходимое при работе - берем стоимость персонального компьютера> * <норму рассчитываем как результат обратного деления средней продолжительности жизни компьютера (5 лет) на работу над дипломом (2 мес)> = 19500р*0,03 = 650 р

Суммируем полученные величины и выводим общую стоимость:

S = 14930руб

Сf - цена единицы f-го вида материала;

mfjli - норма расхода f-го вида материала на i-й операции по j-й функции;

n - количество видов материалов.

3

Затраты на зарплату

S=<берем среднее значение з/п веб-разработчика >*<количество месяцев, затраченных на работу >*(1+<долю доп.заработка берем за 0.1(в среднем за завершенный проект доплачивается 20% от з/п, потому берем 10% на каждый месяц работы)>) * (1 + 0,25) = 15000р*2мес* (1+0,1)*(1+0,25)=41250руб

tjli- трудоемкость i-й операции l-й основной функции j-й вспомогательной функции;

kg- доля дополнительной зарплаты;

kсс- отчисления на соцстрах - % от основной зарплаты.

4

Затраты на содержание и эксплуатацию оборудования

=

Себестоимость одного машиночаса принимаем за 30руб

Количество часов, затраченных на F111: 2

Количество часов, затраченных на F121: 1

Количество часов, затраченных на F122: 4

Количество часов, затраченных на F123: 1

Количество часов, затраченных на F131: 4

Количество часов, затраченных на F132: 4

Количество часов, затраченных на F141: 3

Количество часов, затраченных на F142: 5

Количество часов, затраченных на F1: 1

Количество часов, затраченных на F2: 60

S=(30*2ч) + (30*1ч) + (30*4ч) + (30*1ч) + (30*4ч) + (30*4ч) + (30* 3ч) + (30*5ч)+(30*1ч)+(30*60ч) =

=2442 руб

So,баз - себестоимость машиночаса работы оборудования., принятого за базу;

Кijl - машинокоэффициент для оборудования на i -й операции j - й вспомогательной функции;

Rijl - норма времени на i-ю операцию, j -й вспомогательной функции для l-й главной (или второстепенной) функции.

5

Итого

Общие затраты = 64922 руб, но поскольку наш сайт является типовым, т.е. его можно многократно продавать, предположим, что 10 заказчикам, затраты уменьшаются в 10 раз, т.е становятся равными 6492,2 руб

Заключение

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

1) Изучена система управления содержимым сайта «1С-Битрикс»;

2) Проведен анализ существующих сайтов танцевальных школ;

3) Разработана и спроектирована структура сайта;

4) Реализованы два шаблона дизайна сайта;

5) Доработаны существующие компоненты, изменена визуализация отображения компонент под выбранный дизайн сайта;

6) Разработаны собственные компоненты, расширяющие функционал работы платформы 1С-Битрикс: календарь новостей и событий, меню направлений, вопрос-ответ, отзывы;

7) Создан модуль «Танцевальная школа», объединяющий разработанные компоненты;

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

Разработанное тиражное решение «Сайт танцевальной школы» готово к тестированию на реальном потребителе.

Список используемой литературы

1. Освой самостоятельно PHP за 24 часа / M. Зандстра. - Третье издание. - Москва : "Вильямс", 2008. - 576 с.

2. HTML. Популярный самоучитель / А. Чиртик. - Санкт-Петербург : "Питер", 2006. - 224 с.

3. 1С-Битрикс / Р.Басыров. - Санкт-Петербург: "Питер", 2009. - 304 с.

Приложения

Приложение 1

Анализ конкурентов

Новости

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

Танцы, Хореографы

При нажатии по названию либо фотографии осуществляется переход на страницу с подробным описанием выбранного танца (хореографа).

Контакты

Группы

Расписание

Стоимость

События

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

При переходе по ссылке «Участвовать» открывается форма для заполнения заявки участника с полями: Фамилия, Имя, Отчество, Наименование мероприятия, Контактный телефон, e-mail, Возраст.

Партнеры

Приложение 2

Компонент «Меню направлений»

.description.php

<?

$arComponentDescription = array(

"NAME" => GetMessage("T_IBLOCK_DESC_LIST"),

"DESCRIPTION" => GetMessage("T_IBLOCK_DESC_LIST_DESC"),

"ICON" => "/images/news_list.gif",

"SORT" => 10,

"CACHE_PATH" => "Y",

"PATH" => array(

"ID" => "dance",

"NAME" => GetMessage("IBLOCK_NEWS_NAME2"),

"SORT" => 5,

),

);

?>

.parameters.php

<?

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

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

return;

$arTypesEx = CIBlockParameters::GetIBlockTypes(Array("-"=>" "));

$arIBlocks=Array();

$db_iblock = CIBlock::GetList(Array("SORT"=>"ASC"), Array("SITE_ID"=>$_REQUEST["site"], "TYPE" => ($arCurrentValues["IBLOCK_TYPE"]!="-"?$arCurrentValues["IBLOCK_TYPE"]:"")));

while($arRes = $db_iblock->Fetch())

$arIBlocks[$arRes["ID"]] = $arRes["NAME"];

$arSorts = Array("ASC"=>GetMessage("T_IBLOCK_DESC_ASC"), "DESC"=>GetMessage("T_IBLOCK_DESC_DESC"));

$arSortFields = Array(

"ID"=>GetMessage("T_IBLOCK_DESC_FID"),

"NAME"=>GetMessage("T_IBLOCK_DESC_FNAME"),

"ACTIVE_FROM"=>GetMessage("T_IBLOCK_DESC_FACT"),

"SORT"=>GetMessage("T_IBLOCK_DESC_FSORT"),

"TIMESTAMP_X"=>GetMessage("T_IBLOCK_DESC_FTSAMP")

);

$arProperty_LNS = array();

$rsProp = CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("ACTIVE"=>"Y", "IBLOCK_ID"=>(isset($arCurrentValues["IBLOCK_ID"])?$arCurrentValues["IBLOCK_ID"]:$arCurrentValues["ID"])));

while ($arr=$rsProp->Fetch())

{

$arProperty[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"];

if (in_array($arr["PROPERTY_TYPE"], array("L", "N", "S")))

{

$arProperty_LNS[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"];

}

}

$arComponentParameters = array(

"GROUPS" => array(

),

"PARAMETERS" => array(

"AJAX_MODE" => array(),

"IBLOCK_TYPE" => Array(

"PARENT" => "BASE",

"NAME" => GetMessage("T_IBLOCK_DESC_LIST_TYPE"),

"TYPE" => "LIST",

"VALUES" => $arTypesEx,

"DEFAULT" => "news",

"REFRESH" => "Y",

),

"IBLOCK_ID" => Array(

"PARENT" => "BASE",

"NAME" => GetMessage("T_IBLOCK_DESC_LIST_ID"),

"TYPE" => "LIST",

"VALUES" => $arIBlocks,

"DEFAULT" => '={$_REQUEST["ID"]}',

"ADDITIONAL_VALUES" => "Y",

"REFRESH" => "Y",

),

"NEWS_COUNT" => Array(

"PARENT" => "BASE",

"NAME" => GetMessage("T_IBLOCK_DESC_LIST_CONT"),

"TYPE" => "STRING",

"DEFAULT" => "2000",

),

"SORT_BY1" => Array(

"PARENT" => "DATA_SOURCE",

"NAME" => GetMessage("T_IBLOCK_DESC_IBORD1"),

"TYPE" => "LIST",

"DEFAULT" => "ACTIVE_FROM",

"VALUES" => $arSortFields,

"ADDITIONAL_VALUES" => "Y",

),

"SORT_ORDER1" => Array(

"PARENT" => "DATA_SOURCE",

"NAME" => GetMessage("T_IBLOCK_DESC_IBBY1"),

"TYPE" => "LIST",

"DEFAULT" => "DESC",

"VALUES" => $arSorts,

),

"SORT_BY2" => Array(

"PARENT" => "DATA_SOURCE",

"NAME" => GetMessage("T_IBLOCK_DESC_IBORD2"),

"TYPE" => "LIST",

"DEFAULT" => "SORT",

"VALUES" => $arSortFields,

"ADDITIONAL_VALUES" => "Y",

),

"SORT_ORDER2" => Array(

"PARENT" => "DATA_SOURCE",

"NAME" => GetMessage("T_IBLOCK_DESC_IBBY2"),

"TYPE" => "LIST",

"DEFAULT" => "ASC",

"VALUES" => $arSorts,

),

"FILTER_NAME" => Array(

"PARENT" => "DATA_SOURCE",

"NAME" => GetMessage("T_IBLOCK_FILTER"),

"TYPE" => "STRING",

"DEFAULT" => "",

),

"CHECK_DATES" => array(

"PARENT" => "DATA_SOURCE",

"NAME" => GetMessage("T_IBLOCK_DESC_CHECK_DATES"),

"TYPE" => "CHECKBOX",

"DEFAULT" => "Y",

),

"DETAIL_URL" => CIBlockParameters::GetPathTemplateParam(

"DETAIL",

"DETAIL_URL",

GetMessage("T_IBLOCK_DESC_DETAIL_PAGE_URL"),

"",

"URL_TEMPLATES"

),

"DISPLAY_PANEL" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_NEWS_PANEL"),

"TYPE" => "CHECKBOX",

"DEFAULT" => "N",

),

"SET_TITLE" => Array(),

"SET_STATUS_404" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("CP_BNL_SET_STATUS_404"),

"TYPE" => "CHECKBOX",

"DEFAULT" => "N",

),

"INCLUDE_IBLOCK_INTO_CHAIN" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_INCLUDE_IBLOCK_INTO_CHAIN"),

"TYPE" => "CHECKBOX",

"DEFAULT" => "Y",

),

"ADD_SECTIONS_CHAIN" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_ADD_SECTIONS_CHAIN"),

"TYPE" => "CHECKBOX",

"DEFAULT" => "Y",

),

"HIDE_LINK_WHEN_NO_DETAIL" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_HIDE_LINK_WHEN_NO_DETAIL"),

"TYPE" => "CHECKBOX",

"DEFAULT" => "N",

),

"PARENT_SECTION" => array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("IBLOCK_SECTION_ID"),

"TYPE" => "STRING",

"DEFAULT" => '',

),

"PARENT_SECTION_CODE" => array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("IBLOCK_SECTION_CODE"),

"TYPE" => "STRING",

"DEFAULT" => '',

),

"CACHE_TIME" => Array("DEFAULT"=>3600),

"CACHE_FILTER" => array(

"PARENT" => "CACHE_SETTINGS",

"NAME" => GetMessage("IBLOCK_CACHE_FILTER"),

"TYPE" => "CHECKBOX",

"DEFAULT" => "N",

),

),

);

CIBlockParameters::AddPagerSettings($arComponentParameters, GetMessage("T_IBLOCK_DESC_PAGER_NEWS"), true, true);

?>

component.php

<?

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

CPageOption::SetOptionString("main", "nav_page_in_session", "N");

if(!isset($arParams["CACHE_TIME"]))

$arParams["CACHE_TIME"] = 3600;

$arParams["IBLOCK_TYPE"] = trim($arParams["IBLOCK_TYPE"]);

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

$arParams["IBLOCK_TYPE"] = "news";

$arParams["IBLOCK_ID"] = trim($arParams["IBLOCK_ID"]);

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

$arParams["INCLUDE_SUBSECTIONS"] = $arParams["INCLUDE_SUBSECTIONS"]!="N";

$arParams["SORT_BY1"] = trim($arParams["SORT_BY1"]);

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

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

if($arParams["SORT_ORDER1"]!="ASC")

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

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

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

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

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

if(strlen($arParams["FILTER_NAME"])<=0 || !ereg("^[A-Za-z_][A-Za-z01-9_]*$", $arParams["FILTER_NAME"]))

{

$arrFilter = array();

}

else

{

$arrFilter = $GLOBALS[$arParams["FILTER_NAME"]];

if(!is_array($arrFilter))

$arrFilter = array();

}

$arParams["CHECK_DATES"] = $arParams["CHECK_DATES"]!="N";

$arParams["DETAIL_URL"]=trim($arParams["DETAIL_URL"]);

$pos=strpos($arParams["DETAIL_URL"],"#ID#");

$arParams["ALL_URL"]=substr($arParams["DETAIL_URL"],0,$pos);

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

if($arParams["NEWS_COUNT"]<=0)

$arParams["NEWS_COUNT"] = 20000;

$arParams["CACHE_FILTER"] = $arParams["CACHE_FILTER"]=="Y";

if(!$arParams["CACHE_FILTER"] && count($arrFilter)>0)

$arParams["CACHE_TIME"] = 0;

$arParams["SELECT"]=$_SERVER['SCRIPT_URL'];

$arParams["SET_TITLE"] = $arParams["SET_TITLE"]!="N";

$arParams["DISPLAY_PANEL"] = $arParams["DISPLAY_PANEL"]=="Y";

$arParams["ADD_SECTIONS_CHAIN"] = $arParams["ADD_SECTIONS_CHAIN"]!="N";

$arParams["INCLUDE_IBLOCK_INTO_CHAIN"] = $arParams["INCLUDE_IBLOCK_INTO_CHAIN"]!="N";

$arParams["ACTIVE_DATE_FORMAT"] = $DB->DateFormatToPHP(CSite::GetDateFormat("SHORT"));

$arParams["HIDE_LINK_WHEN_NO_DETAIL"] = $arParams["HIDE_LINK_WHEN_NO_DETAIL"]=="Y";

$arParams["DISPLAY_TOP_PAGER"] = $arParams["DISPLAY_TOP_PAGER"]=="Y";

$arParams["DISPLAY_BOTTOM_PAGER"] = $arParams["DISPLAY_BOTTOM_PAGER"]!="N";

$arParams["PAGER_TITLE"] = trim($arParams["PAGER_TITLE"]);

$arParams["PAGER_SHOW_ALWAYS"] = $arParams["PAGER_SHOW_ALWAYS"]!="N";

$arParams["PAGER_TEMPLATE"] = trim($arParams["PAGER_TEMPLATE"]);

$arParams["PAGER_DESC_NUMBERING"] = $arParams["PAGER_DESC_NUMBERING"]=="Y";

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

$arParams["PAGER_SHOW_ALL"] = $arParams["PAGER_SHOW_ALL"]!=="N";

if($arParams["DISPLAY_TOP_PAGER"] || $arParams["DISPLAY_BOTTOM_PAGER"])

{

$arNavParams = array(

"nPageSize" => $arParams["NEWS_COUNT"],

"bDescPageNumbering" => $arParams["PAGER_DESC_NUMBERING"],

"bShowAll" => $arParams["PAGER_SHOW_ALL"],

);

$arNavigation = CDBResult::GetNavParams($arNavParams);

if($arNavigation["PAGEN"]==0 && $arParams["PAGER_DESC_NUMBERING_CACHE_TIME"]>0)

$arParams["CACHE_TIME"] = $arParams["PAGER_DESC_NUMBERING_CACHE_TIME"];

}

else

{

$arNavParams = array(

"nTopCount" => $arParams["NEWS_COUNT"],

"bDescPageNumbering" => $arParams["PAGER_DESC_NUMBERING"],

);

$arNavigation = false;

}

$arParams["USE_PERMISSIONS"] = $arParams["USE_PERMISSIONS"]=="Y";

if(!is_array($arParams["GROUP_PERMISSIONS"]))

$arParams["GROUP_PERMISSIONS"] = array(1);

$bUSER_HAVE_ACCESS = !$arParams["USE_PERMISSIONS"];

if($arParams["USE_PERMISSIONS"] && isset($GLOBALS["USER"]) && is_object($GLOBALS["USER"]))

{

$arUserGroupArray = $GLOBALS["USER"]->GetUserGroupArray();

foreach($arParams["GROUP_PERMISSIONS"] as $PERM)

{

if(in_array($PERM, $arUserGroupArray))

{

$bUSER_HAVE_ACCESS = true;

break;

}

}

}

if($this->StartResultCache(false, array($USER->GetGroups(), $bUSER_HAVE_ACCESS, $arNavigation, $arrFilter)))

{

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

{

$this->AbortResultCache();

ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED"));

return;

}

if(is_numeric($arParams["IBLOCK_ID"]))

{

$rsIBlock = CIBlock::GetList(array(), array(

"ACTIVE" => "Y",

"ID" => $arParams["IBLOCK_ID"],

));

}

else

{

$rsIBlock = CIBlock::GetList(array(), array(

"ACTIVE" => "Y",

"CODE" => $arParams["IBLOCK_ID"],

"SITE_ID" => SITE_ID,

));

}

if($arResult = $rsIBlock->GetNext())

{

$arResult["USER_HAVE_ACCESS"] = $bUSER_HAVE_ACCESS;

//SELECT

//WHERE

$arFilter = array (

"IBLOCK_ID" => $arResult["ID"],

"IBLOCK_LID" => SITE_ID,

"ACTIVE" => "Y",

"CHECK_PERMISSIONS" => "Y",

);

if($arParams["CHECK_DATES"])

$arFilter["ACTIVE_DATE"] = "Y";

$arParams["PARENT_SECTION"] = CIBlockFindTools::GetSectionID(

$arParams["PARENT_SECTION"],

$arParams["PARENT_SECTION_CODE"],

array(

"GLOBAL_ACTIVE" => "Y",

"IBLOCK_ID" => $arResult["ID"],

)

);

if($arParams["PARENT_SECTION"]>0)

{

$arFilter["SECTION_ID"] = $arParams["PARENT_SECTION"];

if($arParams["INCLUDE_SUBSECTIONS"])

$arFilter["INCLUDE_SUBSECTIONS"] = "Y";

$arResult["SECTION"]= array("PATH" => array());

$rsPath = GetIBlockSectionPath($arResult["ID"], $arParams["PARENT_SECTION"]);

$rsPath->SetUrlTemplates("", $arParams["SECTION_URL"]);

while($arPath=$rsPath->GetNext())

{

$arResult["SECTION"]["PATH"][] = $arPath;

}

}

else

{

$arResult["SECTION"]= false;

}

//ORDER BY

$arSort = array(

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

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

);

if(!array_key_exists("ID", $arSort))

$arSort["ID"] = "DESC";

$arResult["ITEMS"] = array();

$rsElement = CIBlockElement::GetList($arSort, array_merge($arFilter, $arrFilter), false, $arNavParams, $arSelect);

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

$arResult["ITEMS"] = array();

while($obElement = $rsElement->GetNextElement())

{

$arItem = $obElement->GetFields();

if(strlen($arItem["ACTIVE_FROM"])>0)

$arItem["DISPLAY_ACTIVE_FROM"] = CIBlockFormatProperties::DateFormat($arParams["ACTIVE_DATE_FORMAT"], MakeTimeStamp($arItem["ACTIVE_FROM"], CSite::GetDateFormat()));

else

$arItem["DISPLAY_ACTIVE_FROM"] = "";

$arResult["ITEMS"][]=$arItem;

}

$arResult["NAV_STRING"] = $rsElement->GetPageNavStringEx($navComponentObject, $arParams["PAGER_TITLE"], $arParams["PAGER_TEMPLATE"], $arParams["PAGER_SHOW_ALWAYS"]);

$arResult["NAV_CACHED_DATA"] = $navComponentObject->GetTemplateCachedData();

$arResult["NAV_RESULT"] = $rsElement;

$this->SetResultCacheKeys(array(

"ID",

"IBLOCK_TYPE_ID",

"NAV_CACHED_DATA",

"NAME",

"SECTION",

));

$this->IncludeComponentTemplate();

}

else

{

$this->AbortResultCache();

ShowError(GetMessage("T_NEWS_NEWS_NA"));

@define("ERROR_404", "Y");

if($arParams["SET_STATUS_404"]==="Y")

CHTTP::SetStatus("404 Not Found");

}

}

if(isset($arResult["ID"]))

{

$arTitleOptions = null;

if($USER->IsAuthorized())

{

if(

$arParams["DISPLAY_PANEL"]

|| $APPLICATION->GetShowIncludeAreas()

|| $arParams["SET_TITLE"]

)

{

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

{

$arButtons = CIBlock::GetPanelButtons($arResult["ID"], 0, $arParams["PARENT_SECTION"]);

if($arParams["DISPLAY_PANEL"])

CIBlock::AddPanelButtons($APPLICATION->GetPublicShowMode(), $this->GetName(), $arButtons);

if($APPLICATION->GetShowIncludeAreas())

$this->AddIncludeAreaIcons(CIBlock::GetComponentMenu($APPLICATION->GetPublicShowMode(), $arButtons));

if($arParams["SET_TITLE"])

{

$arTitleOptions = array(

'ADMIN_EDIT_LINK' => $arButtons["submenu"]["edit_iblock"]["ACTION"],

'PUBLIC_EDIT_LINK' => "",

'COMPONENT_NAME' => $this->GetName(),

);

}

}

}

}

$this->SetTemplateCachedData($arResult["NAV_CACHED_DATA"]);

if($arParams["SET_TITLE"])

{

$APPLICATION->SetTitle($arResult["NAME"], $arTitleOptions);

}

if($arParams["INCLUDE_IBLOCK_INTO_CHAIN"] && isset($arResult["NAME"]))

{

$APPLICATION->AddChainItem($arResult["NAME"]);

}

if($arParams["ADD_SECTIONS_CHAIN"] && is_array($arResult["SECTION"]))

{

foreach($arResult["SECTION"]["PATH"] as $arPath)

{

$APPLICATION->AddChainItem($arPath["NAME"], $arPath["~SECTION_PAGE_URL"]);

}

}

}

?>

Template.php

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

<table cellspacing="0" cellpadding="0" id="komponent" width="100%">

<tbody>

<tr> <td class="shapka">

<table cellspacing="0" cellpadding="0" class="ramka">

<tbody>

<tr><td> <div class="text">

<a href="<?echo $arParams["ALL_URL"]?>"><?echo $arParams["PAGER_TITLE"]?></a>

</div>

</tbody>

</table>

</td></tr>

<tr> <td class="body">

<table class="body2">

<tbody>

<tr>

<td class="elements">

<table>

<?foreach($arResult["ITEMS"] as $arItem):?>

<tr >

<?$arItem["NAME"]):?>

<?if(!$arParams["HIDE_LINK_WHEN_NO_DETAIL"] || ($arItem["DETAIL_TEXT"] && $arResult["USER_HAVE_ACCESS"])):?>

<td valign=top><strong><big>·</big></strong><td><strong><a href="<?echo $arItem["DETAIL_PAGE_URL"]?>" >

<?echo $arItem["NAME"]?></a></strong>

<?else:?>

<td valign=top><strong><big>·</big></strong><td><span class="name_news"><strong><?echo $arItem["NAME"]?></strong></span>

<?endif;?>

<?endif;?>

<?endforeach;?>

</table>

</ul>

</td>

</tr>

</tbody>

</table>

</td></tr>

</tbody>

</table>

Приложение 3

Компонент «Календарь новостей и событий»

.description.php

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

$arComponentDescription = array(

"NAME" => GetMessage("T_IBLOCK_DESC_CALENDAR"),

"DESCRIPTION" => GetMessage("T_IBLOCK_DESC_CALENDAR_DESC"),

"ICON" => "/images/iblock_calendar.gif",

"SORT" => 50,

"CACHE_PATH" => "Y",

"PATH" => array(

"ID" => "dance",

"NAME" => GetMessage("IBLOCK_NEWS_NAME2"),

"SORT" => 5,

),

);

?>

.parameters.php

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

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

return;

$arTypes = CIBlockParameters::GetIBlockTypes();

$arIBlocks=Array();

$db_iblock = CIBlock::GetList(Array("SORT"=>"ASC"), Array("SITE_ID"=>$_REQUEST["site"], "TYPE" => ($arCurrentValues["IBLOCK_TYPE"]!="-"?$arCurrentValues["IBLOCK_TYPE"]:"")));

while($arRes = $db_iblock->Fetch())

$arIBlocks[$arRes["ID"]] = $arRes["NAME"];

$arDATE_FIELD = Array(

"DATE_ACTIVE_FROM" => "[DATE_ACTIVE_FROM] ".GetMessage("T_IBLOCK_DESC_CAL_DATE_ACTIVE_FROM"),

"DATE_ACTIVE_TO" => "[DATE_ACTIVE_TO] ".GetMessage("T_IBLOCK_DESC_CAL_DATE_ACTIVE_TO"),

"TIMESTAMP_X" => "[TIMESTAMP_X] ".GetMessage("T_IBLOCK_DESC_CAL_TIMESTAMP_X"),

"DATE_CREATE" => "[DATE_CREATE] ".GetMessage("T_IBLOCK_DESC_CAL_DATE_CREATE"),

);

$arComponentParameters = array(

"GROUPS" => array(

),

"PARAMETERS" => array(

"AJAX_MODE" => array(),

"IBLOCK_TYPE" => Array(

"PARENT" => "VISUAL",

"NAME" => GetMessage("T_IBLOCK_DESC_LIST_TYPE"),

"TYPE" => "LIST",

"VALUES"=>$arTypes,

"DEFAULT" => "news",

"MULTIPLE" => "N",

"REFRESH" => "Y",

),

"IBLOCK_ID" => Array(

"PARENT" => "VISUAL",

"NAME" => GetMessage("T_IBLOCK_DESC_LIST_ID"),

"TYPE" => "LIST",

"VALUES" => $arIBlocks,

"DEFAULT" => '={$_REQUEST["ID"]}',

"MULTIPLE" => "N",

"ADDITIONAL_VALUES" => "Y",

"REFRESH" => "Y",

),

"DETAIL_URL" =>Array(

"PARENT" => "VISUAL",

"NAME" => GetMessage("IBLOCK_DETAIL_URL"),

"VALUES" => $arIBlocks,

"DEFAULT" => '={$_REQUEST["URL_TEMPLATES"]}',

"MULTIPLE" => "N",

"ADDITIONAL_VALUES" => "Y",

"REFRESH" => "Y",

),

"IBLOCK_TYPE_2" => Array(

"PARENT" => "VISUAL",

"NAME" => GetMessage("T_IBLOCK_DESC_LIST_TYPE_2"),

"TYPE" => "LIST",

"VALUES"=>$arTypes,

"DEFAULT" => "events",

"MULTIPLE" => "N",

"REFRESH" => "Y",

),

"IBLOCK_ID_2" => Array(

"PARENT" => "VISUAL",

"NAME" => GetMessage("T_IBLOCK_DESC_LIST_ID_2"),

"TYPE" => "LIST",

"VALUES" => $arIBlocks,

"DEFAULT" => '={$_REQUEST["ID_2"]}',

"MULTIPLE" => "N",

"ADDITIONAL_VALUES" => "Y",

"REFRESH" => "Y",

),

"DETAIL_URL_2" =>Array(

"PARENT" => "VISUAL",

"NAME" => GetMessage("IBLOCK_DETAIL_URL_2"),

"VALUES" => $arIBlocks,

"DEFAULT" => '={$_REQUEST["URL_TEMPLATES_2"]}',

"MULTIPLE" => "N",

"ADDITIONAL_VALUES" => "Y",

"REFRESH" => "Y",

),

"MONTH_VAR_NAME" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_CAL_MVN"),

"TYPE" => "STRING",

"DEFAULT" => "month",

),

"YEAR_VAR_NAME" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_CAL_YVN"),

"TYPE" => "STRING",

"DEFAULT" => "year",

),

"WEEK_START" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_CAL_WS"),

"TYPE" => "LIST",

"DEFAULT" => 1,

"VALUES" => Array(

"0" => GetMessage("T_IBLOCK_DESC_CAL_WS_0"),

"1" => GetMessage("T_IBLOCK_DESC_CAL_WS_1"),

"2" => GetMessage("T_IBLOCK_DESC_CAL_WS_2"),

"3" => GetMessage("T_IBLOCK_DESC_CAL_WS_3"),

"4" => GetMessage("T_IBLOCK_DESC_CAL_WS_4"),

"5" => GetMessage("T_IBLOCK_DESC_CAL_WS_5"),

"6" => GetMessage("T_IBLOCK_DESC_CAL_WS_6"),

),

),

"DATE_FIELD" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_CAL_DATE_FIELD"),

"TYPE" => "LIST",

"DEFAULT" => "DATE_ACTIVE_FROM",

"VALUES" => $arDATE_FIELD,

),

"TYPE" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_CAL_TYPE"),

"TYPE" => "LIST",

"DEFAULT" => "EVENTS",

"VALUES" => Array(

"EVENTS" => GetMessage("T_IBLOCK_DESC_CAL_TYPE_EVENTS"),

"NEWS" => GetMessage("T_IBLOCK_DESC_CAL_TYPE_NEWS"),

),

),

"SHOW_YEAR" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_CAL_SHOW_YEAR"),

"TYPE" => "CHECKBOX",

"DEFAULT" => "Y",

),

"SHOW_TIME" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_CAL_SHOW_TIME"),

"TYPE" => "CHECKBOX",

"DEFAULT" => "Y",

),

"TITLE_LEN" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_CAL_TITLE_LEN"),

"TYPE" => "STRING",

"DEFAULT"=>"0",

),

"SET_TITLE" => Array(),

"SHOW_CURRENT_DATE" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_CAL_SHOW_CURRENT_DATE"),

"TYPE" => "CHECKBOX",

"DEFAULT" => "Y",

),

"SHOW_MONTH_LIST" => Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_CAL_SHOW_MONTH_LIST"),

"TYPE" => "CHECKBOX",

"DEFAULT" => "Y",

),

"NEWS_COUNT"=> Array(

"PARENT" => "ADDITIONAL_SETTINGS",

"NAME" => GetMessage("T_IBLOCK_DESC_CAL_NEWS_COUNT"),

"TYPE" => "STRING",

"DEFAULT" => "0",

),

"CACHE_TIME" => Array("DEFAULT"=>3600),

),

);

?>

component.php

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

if(!isset($arParams["CACHE_TIME"]))

$arParams["CACHE_TIME"] = 3600;

unset($arParams["IBLOCK_TYPE"]);

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

unset($arParams["IBLOCK_TYPE_2"]);

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

$arParams["TYPE"] = $arParams["TYPE"]=="EVENTS";

$arParams["SHOW_YEAR"] = $arParams["SHOW_YEAR"]=="Y";

$arParams["SHOW_TIME"] = $arParams["SHOW_TIME"]=="Y";

$arParams["MONTH_VAR_NAME"] = trim($arParams["MONTH_VAR_NAME"]);

if(strlen($arParams["MONTH_VAR_NAME"])<=0 || !ereg("^[A-Za-z_][A-Za-z01-9_]*$", $arParams["MONTH_VAR_NAME"]))

$arParams["MONTH_VAR_NAME"] = "month";

$arParams["YEAR_VAR_NAME"] = trim($arParams["YEAR_VAR_NAME"]);

if(strlen($arParams["YEAR_VAR_NAME"])<=0 || !ereg("^[A-Za-z_][A-Za-z01-9_]*$", $arParams["YEAR_VAR_NAME"]))

$arParams["YEAR_VAR_NAME"] = "year";

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

if($arParams["TITLE_LEN"]<0)

$arParams["TITLE_LEN"]=0;

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

$arParams["SET_TITLE"] = $arParams["SET_TITLE"]=="Y";

$arParams["SHOW_CURRENT_DATE"] = $arParams["SHOW_CURRENT_DATE"]=="Y";

$arParams["SHOW_MONTH_LIST"] = $arParams["SHOW_MONTH_LIST"]=="Y";

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

if($arParams["WEEK_START"] < 0)

$arParams["WEEK_START"] = 0;

elseif($arParams["WEEK_START"] > 6)

$arParams["WEEK_START"] = 6;

if($arParams["TYPE"] || !in_array($arParams["DATE_FIELD"], array("DATE_ACTIVE_FROM", "DATE_ACTIVE_TO", "TIMESTAMP_X", "DATE_CREATE")))

$arParams["DATE_FIELD"] = "DATE_ACTIVE_FROM";

$arParams["MONTH_URL"]=trim($arParams["MONTH_URL"]);

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

$arParams["MONTH_URL"] = $APPLICATION->GetCurPageParam($arParams["MONTH_VAR_NAME"]."=#MONTH#&".$arParams["YEAR_VAR_NAME"]."=#YEAR#", array($arParams["MONTH_VAR_NAME"], $arParams["YEAR_VAR_NAME"]));

$arParams["DETAIL_URL"]=trim($arParams["DETAIL_URL"]);

$arParams["DETAIL_URL_2"]=trim($arParams["DETAIL_URL_2"]);

$today = time();

$currentMonth = intval($_REQUEST[$arParams["MONTH_VAR_NAME"]]);

if($currentMonth<1 || $currentMonth>12)

$currentMonth = intval(date("n", $today));

$currentYear = intval($_REQUEST[$arParams["YEAR_VAR_NAME"]]);

if($currentYear<1)

$currentYear = intval(date("Y", $today));

$todayYear = IntVal(date("Y", $today));

$todayMonth = IntVal(date("n", $today));

$todayDay = IntVal(date("j", $today));

if($arParams["TYPE"])

{ //Не показывать несовершенные новости

if($currentYear > $todayYear)

return;

if(($currentYear == $todayYear) && ($currentMonth > $todayMonth))

return;

}

if($this->StartResultCache(false, array($currentMonth, $currentYear, $todayYear, $todayMonth, $todayDay)))

{

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

{

$this->AbortResultCache();

ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED"));

return;

}

$arResult["TITLE"] = GetMessage("IBL_NEWS_CAL_M_".date("n", mktime(0, 0, 0, $currentMonth, 1, $currentYear)))." ".$currentYear;

$arResult["currentMonth"] = $currentMonth;

$arResult["currentYear"] = $currentYear;

$arResult["WEEK_DAYS"] = Array(

array("FULL"=>GetMessage("IBL_NEWS_CAL_D_0"),"SHORT"=>GetMessage("IBL_NEWS_CAL_S_0")),

array("FULL"=>GetMessage("IBL_NEWS_CAL_D_1"),"SHORT"=>GetMessage("IBL_NEWS_CAL_S_1")),

array("FULL"=>GetMessage("IBL_NEWS_CAL_D_2"),"SHORT"=>GetMessage("IBL_NEWS_CAL_S_2")),

array("FULL"=>GetMessage("IBL_NEWS_CAL_D_3"),"SHORT"=>GetMessage("IBL_NEWS_CAL_S_3")),

array("FULL"=>GetMessage("IBL_NEWS_CAL_D_4"),"SHORT"=>GetMessage("IBL_NEWS_CAL_S_4")),

array("FULL"=>GetMessage("IBL_NEWS_CAL_D_5"),"SHORT"=>GetMessage("IBL_NEWS_CAL_S_5")),

array("FULL"=>GetMessage("IBL_NEWS_CAL_D_6"),"SHORT"=>GetMessage("IBL_NEWS_CAL_S_6")),

);

$i = $arParams["WEEK_START"];

while($i > 0)

{

$arResult["WEEK_DAYS"][] = array_shift($arResult["WEEK_DAYS"]);

$i--;

}

$arFilter = Array(

"ACTIVE" => "Y",

">=".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,$currentMonth,1,$currentYear)),

"<".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,$currentMonth+1,1,$currentYear)),

"IBLOCK_ID" => $arParams["IBLOCK_ID"]

);

$arSelectedFields = Array("ACTIVE", $arParams["DATE_FIELD"], "ID", "IBLOCK_ID", "SITE_ID", "DETAIL_PAGE_URL", "NAME", "LANG_DIR", "SORT", "IBLOCK_TYPE", "PREVIEW_TEXT", "PREVIEW_TEXT_TYPE");

$dbItems = CIBlockElement::GetList(array($arParams["DATE_FIELD"]=>"ASC", "ID"=>"ASC"), $arFilter, false, false, $arSelectedFields);

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

while($arItem = $dbItems->GetNext())

{

$arDays[ConvertDateTime($arItem[$arParams["DATE_FIELD"]], CLang::GetDateFormat("SHORT"))][] = $arItem;

}

$arFilter = Array(

"ACTIVE" => "Y",

">=".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,$currentMonth,1,$currentYear)),

"<".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,$currentMonth+1,1,$currentYear)),

"IBLOCK_ID" => $arParams["IBLOCK_ID_2"]

);

$arSelectedFields = Array("ACTIVE", $arParams["DATE_FIELD"], "ID", "IBLOCK_ID", "SITE_ID", "DETAIL_PAGE_URL", "NAME", "LANG_DIR", "SORT", "IBLOCK_TYPE_2", "PREVIEW_TEXT", "PREVIEW_TEXT_TYPE");

$dbItems = CIBlockElement::GetList(array($arParams["DATE_FIELD"]=>"ASC", "ID"=>"ASC"), $arFilter, false, false, $arSelectedFields);

$dbItems->SetUrlTemplates($arParams["DETAIL_URL_2"]);

while($arItem = $dbItems->GetNext())

{

$arDays[ConvertDateTime($arItem[$arParams["DATE_FIELD"]], CLang::GetDateFormat("SHORT"))][] = $arItem;

}

$bPrevM = false;

$bPrevY = false;

if($arParams["SHOW_YEAR"])

{

$arFilter = Array(

"ACTIVE" => "Y",

"<".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,1,1,$currentYear)),

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

);

$dbItems = CIBlockElement::GetList(array(), $arFilter, false, array("nTopCount"=>1), Array("ID", "IBLOCK_ID"));

if($arItem = $dbItems->GetNext())

{

$bPrevM = true;

$bPrevY = true;

}

$arFilter = Array(

"ACTIVE" => "Y",

"<".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,1,1,$currentYear)),

"IBLOCK_ID" => $arParams["IBLOCK_ID_2"],

);

$dbItems = CIBlockElement::GetList(array(), $arFilter, false, array("nTopCount"=>1), Array("ID", "IBLOCK_ID"));

if($arItem = $dbItems->GetNext())

{

$bPrevM = true;

$bPrevY = true;

}

}

if(!$bPrevM)

{

$arFilter = Array(

"ACTIVE" => "Y",

"<".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,$currentMonth,1,$currentYear)),

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

);

$dbItems = CIBlockElement::GetList(array(), $arFilter, false, array("nTopCount"=>1), Array("ID", "IBLOCK_ID"));

if($arItem = $dbItems->GetNext())

$bPrevM = true;

$arFilter = Array(

"ACTIVE" => "Y",

"<".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,$currentMonth,1,$currentYear)),

"IBLOCK_ID" => $arParams["IBLOCK_ID_2"],

);

$dbItems = CIBlockElement::GetList(array(), $arFilter, false, array("nTopCount"=>1), Array("ID", "IBLOCK_ID"));

if($arItem = $dbItems->GetNext())

$bPrevM = true;

}

//Для новостей будущего времени не выделять месяца

//А для событий выделять.

$bCheckNext = true;

if($arParams["TYPE"])

{

$bCheckNext = mktime(0, 0, 0 ,$currentMonth+1, 1, $currentYear) < mktime(0, 0, 0 ,$todayMonth+1, 1, $todayYear);

}

$bNextM = false;

$bNextY = false;

if($bCheckNext)

{

if($arParams["SHOW_YEAR"])

{

$arFilter = Array(

"ACTIVE" => "Y",

">=".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,1,1,$currentYear+1)),

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

);

$dbItems = CIBlockElement::GetList(array(), $arFilter, false, array("nTopCount"=>1), Array("ID", "IBLOCK_ID"));

if($arItem = $dbItems->GetNext())

{

$bNextM = true;

$bNextY = true;

}

$arFilter = Array(

"ACTIVE" => "Y",

">=".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,1,1,$currentYear+1)),

"IBLOCK_ID" => $arParams["IBLOCK_ID_2"],

);

$dbItems = CIBlockElement::GetList(array(), $arFilter, false, array("nTopCount"=>1), Array("ID", "IBLOCK_ID"));

if($arItem = $dbItems->GetNext())

{

$bNextM = true;

$bNextY = true;

}

}

if(!$bNextM)

{

$arFilter = Array(

"ACTIVE" => "Y",

">=".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,$currentMonth+1,1,$currentYear)),

"IBLOCK_ID" => $arParams["IBLOCK_ID"]

);

$dbItems = CIBlockElement::GetList(array(), $arFilter, false, array("nTopCount"=>1), Array("ID", "IBLOCK_ID"));

if($arItem = $dbItems->GetNext())

$bNextM = true;

$arFilter = Array(

"ACTIVE" => "Y",

">=".$arParams["DATE_FIELD"] => date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,$currentMonth+1,1,$currentYear)),

"IBLOCK_ID" => $arParams["IBLOCK_ID_2"]

);

$dbItems = CIBlockElement::GetList(array(), $arFilter, false, array("nTopCount"=>1), Array("ID", "IBLOCK_ID"));

if($arItem = $dbItems->GetNext())

$bNextM = true;

}

}

if($bPrevM)

{

$navM = date("m", mktime(0,0,0,$currentMonth-1, 1, $currentYear));

$navY = date("Y", mktime(0,0,0,$currentMonth-1, 1, $currentYear));

$arResult["PREV_MONTH"] = date("n", mktime(0,0,0,$currentMonth-1, 1, $currentYear));

$arResult["PREV_MONTH_URL"] = htmlspecialchars(str_replace(

array("#YEAR#","#MONTH#"),

array($navY, $navM),

$arParams["MONTH_URL"]

));

$arResult["PREV_MONTH_URL_TITLE"] = GetMessage("IBL_NEWS_CAL_M_".$arResult["PREV_MONTH"]);

}

else

{

$arResult["PREV_MONTH_URL"] = false;

}

if($bNextM)

{

$navM = date("m", mktime(0,0,0,$currentMonth+1, 1, $currentYear));

$navY = date("Y", mktime(0,0,0,$currentMonth+1, 1, $currentYear));

$arResult["NEXT_MONTH"] = date("n", mktime(0,0,0,$currentMonth+1, 1, $currentYear));

$arResult["NEXT_MONTH_URL"] = htmlspecialchars(str_replace(

array("#YEAR#","#MONTH#"),

array($navY, $navM),

$arParams["MONTH_URL"]

));

$arResult["NEXT_MONTH_URL_TITLE"] = GetMessage("IBL_NEWS_CAL_M_".$arResult["NEXT_MONTH"]);

}

else

{

$arResult["NEXT_MONTH_URL"] = false;

}

if($bPrevY)

{

$navM = date("m", mktime(0,0,0,$currentMonth, 1, $currentYear));

$navY = date("Y", mktime(0,0,0,$currentMonth, 1, $currentYear-1));

$arResult["PREV_YEAR"] = $navY;

$arResult["PREV_YEAR_URL"] = htmlspecialchars(str_replace(

array("#YEAR#","#MONTH#"),

array($navY, $navM),

$arParams["MONTH_URL"]

));

$arResult["PREV_YEAR_URL_TITLE"] = $arResult["PREV_YEAR"];

}

else

{

$arResult["PREV_YEAR_URL"] = false;

}

if($bNextY)

{

$navM = date("m", mktime(0,0,0,$currentMonth, 1, $currentYear));

$navY = date("Y", mktime(0,0,0,$currentMonth, 1, $currentYear+1));

$arResult["NEXT_YEAR"] = $navY;

$arResult["NEXT_YEAR_URL"] = htmlspecialchars(str_replace(

array("#YEAR#","#MONTH#"),

array($navY, $navM),

$arParams["MONTH_URL"]

));

$arResult["NEXT_YEAR_URL_TITLE"] = $arResult["NEXT_YEAR"];

}

else

{

$arResult["NEXT_YEAR_URL"] = false;

}

$date = mktime(0, 0, 0, $currentMonth, 1, $currentYear);

$MonthStart = date("w", $date) - $arParams["WEEK_START"];

if($MonthStart < 0)

$MonthStart += 7;

$arResult["MONTH"] = array();

$bBreak = false;

for ($i = 0; $i < 6; $i++)

{

$arWeek = array();

$row = $i * 7;

for ($j = 0; $j < 7; $j++)

{

$arDay = array();

$date = mktime(0, 0, 0, $currentMonth, (1 + $row + $j) - $MonthStart, $currentYear);

$y = intval(date("Y", $date));

$m = intval(date("n", $date));

$d = intval(date("j", $date));

$itm = date("w", $date);

if ($i > 0 && $j == 0 && $currentMonth != $m)

{

$bBreak = true;

break;

}

$dayClassName = "NewsCalDay";

if ($d == $todayDay && $m == $todayMonth && $y == $todayYear && !$bBreak)

$defaultClassName = "NewsCalToday";

elseif ($currentMonth != $m)

{

$defaultClassName = "NewsCalOtherMonth";

$dayClassName = "NewsCalDayOther";

}

elseif ($itm == 0 || $itm == 6)

$defaultClassName = "NewsCalWeekend";

else

$defaultClassName = "NewsCalDefault";

$arDay["day"] = $d;

$arDay["td_class"] = $defaultClassName;

$arDay["tday_class"] = $dayClassName;

$arDay["events"] = array();

$tmpDate = date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,$m,$d,$y));

if(is_set($arDays[$tmpDate]))

{

$nn = 0;

foreach($arDays[$tmpDate] as $dayNews)

{

$nn++;

$eTime = "";

$arTime = Array();

if($arParams["SHOW_TIME"])

{

$arTime = ParseDateTime($dayNews["DATE_ACTIVE_FROM"], CL...


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

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

    дипломная работа [3,3 M], добавлен 07.02.2014

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

    отчет по практике [1,2 M], добавлен 03.06.2015

  • Вопросы реализации шаблона типового сайта диссертационного совета СевКавГТУ. Разработка базы данных для шаблона сайта с помощью фреймворка Django и Aptana Studio 3. Обоснование требований к техническому обеспечению. Расчет цены программного продукта.

    дипломная работа [2,5 M], добавлен 26.09.2012

  • Разработка функциональной структуры, назначение и цели создания web-сайта. Требования к его работе и возможностям, принцип работы и содержание. Продвижение сайта и программа испытаний. Расчет затрат на разработку, обоснование экономической эффективности.

    дипломная работа [9,5 M], добавлен 02.08.2015

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

    курсовая работа [5,3 M], добавлен 31.07.2014

  • Обзор и анализ используемых технологий, содержания и дизайна сайтов ВУЗов, в том числе созданных на основе CMS. Исследование содержания сайта ПРИПИТ и информационных потребностей различных групп его потенциальных посетителей. Разработка дизайна сайта.

    дипломная работа [129,4 K], добавлен 11.03.2010

  • Технические характеристики компьютерных систем. Анализ интернет-сайта филиала предприятия и выявление основных проблем. Обновление структуры и подгонка сайта под современные стандарты с помощью программы WebSite X5. Создание дизайна веб-страницы.

    отчет по практике [410,2 K], добавлен 14.01.2015

  • Характеристика типового web-сайта, его роль в работе субъекта экономики, возможные типы и формы реализации, структура и элементы, программное обеспечение. Этапы разработки и создания сайта, его продвижение и поддержка. Требования к рабочему месту.

    курсовая работа [38,3 K], добавлен 17.09.2014

  • Анализ предметной области и функций сайта. Разработка структуры базы данных, структуры и дизайна web-сайта. Описание установки CMS "Joomla!" и программной оболочки Denwer, создание гостевой книги, галереи и карты Google, результаты их тестирования.

    дипломная работа [2,3 M], добавлен 19.01.2017

  • Правила создания Web-сайта по вопросам медицинского страхования: разработка главной страницы (фреймовая структура), разделов, посвященных вопросам обязательного и добровольного страхования, активной asp-страницы, содержащей опрос для посетителей.

    курсовая работа [2,3 M], добавлен 20.06.2010

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

    курсовая работа [2,4 M], добавлен 16.11.2012

  • Этапы создания веб-сайта "Синьор Пекарь": анализ сегмента потребителей и аналогов проекта. Разработка рабочего наброска и карты сайта, перечень требований по содержимому и функциям. Декомпозиция макета на структурные блоки, оптимизация контента и верстка.

    курсовая работа [10,0 M], добавлен 19.04.2011

  • Исследование принципов работы, технологии и стандартов IP–телефонии, оценка качества телефонной связи и сжатия речи. Анализ планирования структуры сайта, разработки дизайна, верстки макета. Характеристика регистрации доменного имени и хостинга сайта.

    курсовая работа [52,7 K], добавлен 23.12.2011

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

    дипломная работа [2,0 M], добавлен 22.07.2015

  • Исследование технических возможностей Web Page Maker для проектирования и разработки сайта. Изучение современных Интернет-технологий. Анализ основных этапов создания сайта. Представление текста и графики на web-страницах. Управление объектами страницы.

    курсовая работа [804,3 K], добавлен 16.01.2014

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

    дипломная работа [3,2 M], добавлен 19.02.2013

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

    курсовая работа [2,2 M], добавлен 13.01.2013

  • Анализ существующих сайтов образовательный учреждений учебных сайтов Астраханской области. Обзор среды реализации разработки веб-сайта. Требования к официальным сайтам образовательных учреждений. Разработка логической структуры веб-сайта колледжа.

    дипломная работа [6,1 M], добавлен 10.06.2014

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

    курсовая работа [686,4 K], добавлен 13.06.2022

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

    курсовая работа [94,0 K], добавлен 10.05.2011

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