Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Настройка внешнего вида календаря (компоненты)

00 голосов
7
Возможно ли как-то настроить по другому внешний вид календаря (компоненты). Т.е. на данный момент в ячейке с числом выводятся заголовки новостей. Возможно ли было бы как-нибудь сделать так чтобы в число либо ячейка с числом была ссылкой на страницу со всеми новостями за данный день?
спросил 22 Июль, 13 от Keine (120 баллов)

7 Ответы

00 голосов
Добрый день,

Если Вы используете компоненты 2.0, то Вам надо катомизировать шаблон. И заменить след. строки:

Код
<?foreach($arWeek as $arDay):?>
<td align="left" valign="top" class='<?=$arDay["td_class"]?>' width="14%">
<span class="<?=$arDay["day_class"]?>"><?=$arDay["day"]?></span>
<?foreach($arDay["events"] as $arEvent):?>
<div class="NewsCalNews" style="padding-top:5px;"><?=$arEvent["time"]?><a href="<?=$arEvent["url"]?>" title="<?=$arEvent["preview"]?>"><?=$arEvent["title"]?></a></div>
<?endforeach;?>
</td>
<?endforeach?>



на

Код
<?foreach($arWeek as $arDay):?>
<?
if(count($arDay["events"])>0)
{
$link_day='<a href="/news/newsonday.php?date='.($isday=($arDay["day"]<10 && $arDay["day"]>0)?'0'.$arDay["day"]:$arDay["day"]).'.'.($ismonth=($arResult["currentMonth"]>0 && $arResult["currentMonth"]<10)?'0'.$arResult["currentMonth"]:$arResult["currentMonth"]).'.'.$arResult["currentYear"].'" title="Новости за '.$arDay["day"].'.'.$arResult["currentMonth"].'.'.$arResult["currentYear"].'">'.$arDay["day"].'</a>';
}
else
$link_day=$arDay["day"];
?>
<td align="left" valign="top" class='<?=$arDay["td_class"]?>' width="14%">
<span class="<?=$arDay["day_class"]?>"><?=$link_day?></span>
</td>
<?endforeach?>


Где
Код
<a href="/news/newsonday.php?date='.($isday=($arDay["day"]<10 && $arDay["day"]>0)?'0'.$arDay["day"]:$arDay["day"]).'.'.($ismonth=($arResult["currentMonth"]>0 && $arResult["currentMonth"]<10)?'0'.$arResult["currentMonth"]:$arResult["currentMonth"]).'.'.$arResult["currentYear"].'"

Должна быть ссылкой на страницу с компонентом новостей, который будет обрабадывать параметр $GET['date'], в котором будет содержаться дата(ДД.ММ.ГГГГ) и выводить новости за эту дату. Для этого вам еще придется кастомизировать или настроить под себя компонент вывода новостей.

А компонент вывода новостей можно модифицировать так:
найти строку
Код
$items = GetIBlockElementList($ID, $SECTION_ID, $SORT, $NEWS_COUNT, $Filter, $arSelect);

И заменить ее на

Код
if(count($getbydate=explode('.',$_REQUEST['date']))==3)
{
$arFilter=array("=DATE_ACTIVE_FROM"=>date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,$getbydate[1],$getbydate[0],$getbydate[2])));
}
else $arFilter=array();


где =DATE_ACTIVE_FROM означает что новость стала активной именно в этот день, более подробную информацию, по использованию значений фильтра вы можете найти здесь:
http://www.bitrixsoft.ru/bitrix/help/ru/source/iblock/help/ru/developer/filter.php.html
http://www.bitrixsoft.ru/bitrix/help/ru/source/iblock/help/ru/developer/functions/getiblockelementlist.php.html
ответил 22 Июль, 13 от druid (580 баллов)
00 голосов
Здравствуйте, я модифицировал шаблон календаря как вы написали, все получилось, далее в папке news создал файл с названием newsonday.php, разместил на нем компоненту news.list, но не могу понять где найти строку
Цитата
$items = GetIBlockElementList($ID, $SECTION_ID, $SORT, $NEWS_COUNT, $Filter, $arSelect);

, подскажите пожалуйста.
ответил 15 Сен, 13 от SOROKS (640 баллов)
00 голосов
Уважаемый mikkie, если уж вы предложили вариант модификации шаблона календаря, то не могли бы вы все-таки подсказать, где искать строку:
Цитата
$items = GetIBlockElementList($ID, $SECTION_ID, $SORT, $NEWS_COUNT, $Filter, $arSelect);

Заранее благодарен.
ответил 13 Дек, 13 от SOROKS (640 баллов)
00 голосов
Добрый день,

Если Вы использовали данную методику, то Вам необходимо кастомизировать компонент news.list, предварительно скопировав его в собственное пространство имен, т.е.
/bitrix/components/bitrix/news.list/
в
/bitrix/components/mycomponents/news.list/
далее необходимо произвести кастомизацию в файле:
/bitrix/components/mycomponents/news.list/component.php
Найти строку вида:
Цитата
$rsElement = CIBlockElement::GetList($arSort, array_merge($arFilter, $arrFilter), false, $arNavParams, $arSelect);

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

Цитата
if(count($getbydate=explode('.',$_REQUEST['date'])­)==3)
{
$arFilter["=DATE_ACTIVE_FROM"]=date($DB->Dat­eFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,$getbydate[1],$getbydate[0],$getbydat­e[2]));
}
$rsElement = CIBlockElement::GetList($arSort, array_merge($arFilter, $arrFilter), false, $arNavParams, $arSelect);

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

Также, не забудьте использовать компонент "mycomponents:news.list"
ответил 28 Март, 14 от druid (580 баллов)
00 голосов
все сделал, как вы написали, но почему то на странице /news/newsonday.php?date=13.12.2007, не отображается ни одной новости.
В календаре (шаблон .default, тип событийный), ссылка на новости за этот день отображается, у новостей я выставил значение свойства "дата активности с": 13.12.2007, но новости, при переходе по ссылке на календаре, не отображаются.
Вообще все это делается для создания архива новостей, поэтому фильтр правильный.
Ниже код страницы newsonday.php с компонентой mycomponents:news.list
Цитата
<?$APPLICATION->IncludeComponent("mycomponents:news.list", ".default", Array(
"IBLOCK_TYPE" => "news",
"IBLOCK_ID" => "44",
"NEWS_COUNT" => "5",
"SORT_BY1" => "ACTIVE_FROM",
"SORT_ORDER1" => "DESC",
"SORT_BY2" => "SORT",
"SORT_ORDER2" => "ASC",
"FILTER_NAME" => "arrFilter",
"FIELD_CODE" => array(
0 => "NAME",
1 => "PREVIEW_TEXT",
2 => "DATE_ACTIVE_FROM",
3 => "SHOW_COUNTER",
4 => "DATE_CREATE",
5 => "",
),
"PROPERTY_CODE" => array(
0 => "",
1 => "",
),
"DETAIL_URL" => "#ELEMENT_ID#.html",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "3600",
"CACHE_FILTER" => "N",
"PREVIEW_TRUNCATE_LEN" => "",
"ACTIVE_DATE_FORMAT" => "d.m.Y H:i",
"DISPLAY_PANEL" => "N",
"SET_TITLE" => "Y",
"INCLUDE_IBLOCK_INTO_CHAIN" => "Y",
"ADD_SECTIONS_CHAIN" => "Y",
"HIDE_LINK_WHEN_NO_DETAIL" => "N",
"PARENT_SECTION" => "",
"DISPLAY_TOP_PAGER" => "N",
"DISPLAY_BOTTOM_PAGER" => "Y",
"PAGER_TITLE" => "Страница",
"PAGER_SHOW_ALWAYS" => "N",
"PAGER_TEMPLATE" => "",
"PAGER_DESC_NUMBERING" => "N",
"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
"DISPLAY_DATE" => "Y",
"DISPLAY_NAME" => "Y",
"DISPLAY_PICTURE" => "Y",
"DISPLAY_PREVIEW_TEXT" => "Y"
)
);?>

Не могу понять в чем проблема, помогите пожалуйста. Заранее благодарен.
ответил 20 Июль, 14 от SOROKS (640 баллов)
00 голосов
Я так понимаю помощи мне не дождаться. Жаль.
ответил 21 Ноя, 14 от SOROKS (640 баллов)
00 голосов
Форум - не техподдержка. Обращайтесь по назначению.
ответил 17 Март, 15 от Gumgum (140 баллов)

Похожие вопросы

0 голосов
3 ответов
спросил 30 Март, 14 от Grimmi (2,560 баллов)
0 голосов
0 ответов
спросил 18 Апр, 13 от Kania (5,180 баллов)
0 голосов
2 ответов
спросил 23 Апр, 14 от Ukurka (120 баллов)