Разработка первой версии тиражного решения типового сайта танцевальных школ
Требования посетителей к содержимому сайта. Анализ визуальной структуры страницы на "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