Могу предложить еще такой вариант...
1.Для начала нужно открыть сессию в самом начале страницы, где будет расположен Компонент "Календарь".
2.Затем ставим на страницу сам календарь
Код |
---|
<p><?$APPLICATION->IncludeComponent(
"bitrix:news.calendar",
"ArhivNews",
Array(
"IBLOCK_TYPE" => "news",
"IBLOCK_ID" => "20",
"MONTH_VAR_NAME" => "month",
"YEAR_VAR_NAME" => "year",
"WEEK_START" => "1",
"SHOW_YEAR" => "N",
"SHOW_TIME" => "N",
"TITLE_LEN" => "0",
"SHOW_CURRENT_DATE" => "Y",
"SHOW_MONTH_LIST" => "N",
"NEWS_COUNT" => "0",
"DETAIL_URL" => "/Main/archives/news_detail.php?ID=#ELEMENT_ID#",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "3600",
"DATE_FIELD" => "DATE_CREATE",
"TYPE" => "EVENTS",
"SET_TITLE" => "N"
)
);?></p> |
3.Копируем в шаблон сайта шаблон вставленного календаря и переходим на страницу редактирования кода "Календаря".
Тут я заменил весь стандартный код на следующий:
Код |
---|
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="NewsCalMonthNav" align="left">
<?if($arResult["PREV_MONTH_URL"]):?>
<a href="<?=$arResult["PREV_MONTH_URL"]?>" title="<?=GetMessage("IBL_NEWS_CAL_M_".$arResult["PREV_MONTH"])?>"><?=GetMessage("IBL_NEWS_CAL_PR_M")?></a>
<?endif?>
<?if($arResult["PREV_MONTH_URL"] && $arResult["NEXT_MONTH_URL"] && !$arParams["SHOW_MONTH_LIST"]):?>
|
<?endif?>
<?if($arParams["SHOW_MONTH_LIST"]):?>
<select onChange="b_result()" name="MONTH_SELECT" id="month_sel">
<?for($i=1;$i<=12;$i++):?>
<option value="<?=htmlspecialchars($APPLICATION->GetCurPageParam($arParams["MONTH_VAR_NAME"]."=".$i."&".$arParams["YEAR_VAR_NAME"]."=".$arResult["currentYear"], Array($arParams["MONTH_VAR_NAME"], $arParams["YEAR_VAR_NAME"])))?>" <?if($arResult["currentMonth"] == $i) echo "selected";?>><?=GetMessage("IBL_NEWS_CAL_M_".$i)?></option>
<?endfor?>
</select>
<script language="JavaScript" type="text/javascript">
<!--
function b_result()
{
var idx=document.getElementById("month_sel").selectedIndex;
window.document.location.href=document.getElementById("month_sel").options[idx].value;
}
-->
</script>
<?endif?>
<?if($arResult["NEXT_MONTH_URL"]):?>
<a href="<?=$arResult["NEXT_MONTH_URL"]?>" title="<?=GetMessage("IBL_NEWS_CAL_M_".$arResult["NEXT_MONTH"])?>"><?=GetMessage("IBL_NEWS_CAL_N_M")?></a>
<?endif?>
</td>
<?if($arParams["SHOW_YEAR"]):?>
<td class="NewsCalMonthNav" align="right">
<?if($arResult["PREV_YEAR_URL"]):?>
<a href="<?=$arResult["PREV_YEAR_URL"]?>" title="<?=$arResult["PREV_YEAR"]?>"><?=GetMessage("IBL_NEWS_CAL_PR_Y")?></a>
<?endif?>
<?if($arResult["PREV_YEAR_URL"] && $arResult["NEXT_YEAR_URL"]):?>
|
<?endif?>
<?if($arResult["NEXT_YEAR_URL"]):?>
<a href="<?=$arResult["NEXT_YEAR_URL"]?>" title="<?=$arResult["NEXT_YEAR"]?>"><?GetMessage("IBL_NEWS_CAL_N_Y")?></a>
<?endif?>
</td>
<?endif?>
</tr>
</table>
<br />
<table border="0" cellpadding="2" cellspacing="0">
<?if($arParams["SHOW_CURRENT_DATE"]):?>
<tbody><tr><th colspan="7" style="color: rgb(255, 255, 255);" bgcolor="#064964"><?=GetMessage("IBL_NEWS_CAL_M_".$arResult["currentMonth"]).' '.$arResult["currentYear"]?></th></tr>
<?endif?>
<tr>
<?/*Дни недели*/?>
<?foreach($arResult["WEEK_DAYS"] as $WDay):?>
<td class='NewsCalHeader'><?=$WDay["SHORT"]?></td>
<?endforeach?>
<?/*/Дни недели/*/?>
</tr> |
Вот в этой части кода важно зарегистрировать переменную сессии (у меня это $_SESSION['MONTH']) и присвоить ей текущий массив дней недели текущего месяца:
Код |
---|
<?foreach($arResult["MONTH"] as $arWeek):?>
<tr><?$_SESSION['MONTH']=$arResult["MONTH"]?>
<?/*Дни недели*/?>
<?foreach($arWeek as $arDay):?>
<td align="left" valign="top" class='<?=$arDay["td_class"]?>' width="14%">
<?if($arDay["events"]):?>
<span class='<?=$arDay["day_class"]?>'><a class='link-red-ul' href="ArhivNews.php?todayis=<?=$arDay["day"]?>"><b><?=$arDay["day"]?></b></a></span>
<?else:?>
<span class='<?=$arDay["day_class"]?>'><?=$arDay["day"]?></span>
<?endif?>
<?/*/Дни недели/*/?>
</td>
<?endforeach?>
</tr >
<?endforeach?>
</table> |
Все, календарь в виде ссылок готов. Теперь нужно выводить наши новости по выбранной дате. Для этого переходим к шагу 4.
4.Создаем страницу, для вывода заголовков новостей (У меня она называется ArhivNews.php).
5.Не нужно ставить на эту страницу никаких компонентов, а просто пишим на ней PHP-код следующего содержания:
Код |
---|
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Архив новостей");
?>
<?foreach($_SESSION['MONTH'] as $arWeek):?>
<?foreach($arWeek as $arDay):?>
<?if($arDay["day"]==$_GET['todayis']):?>
<?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?>
<?endif?>
<?endforeach?>
<?endforeach?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?> |
Все, теперь на этой странице будут выведены ссылки новостей.
Для того чтобы просматривать эти новости, достаточно создать страницу news_detail.php и разместить на ней компонент "Новость детально".
Вроде ничего не упустил. Будут вопросы по данному коду, пишите, попробую ответить.