Слева выводится список матриц месяцев за весь выбранный год (из-за использования jcarousellite_1.0.1.pack.js мы видим только месяц с текущей выбранной датой и два предыдущих месяца, т.е. всего 3 ). Дни месяца, за которые имеются новости, выводятся в виде ссылок. При клике на такую ссылку формируется параметр, например, ?news_date=26.10.2011.
Справа, для вывода списка новостей, расположен стандартный компонент news.list, который принимает в качетстве фильтра параметр ?news_date.
С компонентом news.list все понятно - он просто фильтрует и выводит данные. При этом кэширует их, когда нужно. А вот насчет кэша в моем компоненте да и вообще логики, думаю, что не все в порядке.
Component.php у меня формирует следующий массив:
Код
Array
(
[MONTH8] => Array - массив месяца
(
[0] => Array - массив недели
(
[0] => Array - массив дня
(
[day] => 01.08.2011
[ClassName] => для стилий (например current-day - текущий выбранный день)
[ClassNameMonth] => для стилий
[ClassTd] => для стилий
[url] => /news/archive/?news_date=01.08.2011&news_year=2011&clear_cache=Y
)
При клике на какой-нибудь дате изменяется $_GET["news_date"], в Component.php значение этой переменной GET обрабатывается и в цикле начинается формирование массива месяцев с "месяца выбранной даты" - 2 (так как нам нужно чтобы в "каруселе" календаря показался месяц, в котором находится текущая выбранная дата и два предыдущих месяца).
В итоге при клике на какой-нибудь дате получается что массив переформировывается и по if ($this->StartResultCache(36000000)) создается новый кэш. То есть, если я правильно понял, на каждый день у меня создается отдельный кэш.
Можно ли как-то исправить этот момент? Ведь массив по сути один и тот же. Наверно, можно большинство операций из component.php перенести в template.php и уже там менять порядок месяцев в архиве за год, да и стили какие нужно определять там же?
Немного скорректирую его вопрос. На данный момент компонент генерирует при клике на каждую дату свой массив результатов вида
Код
[MONTH_x]
[0] недели
[0] дни
[...] данные
[MONTH_x]
[0] недели
[1] дни
[...] данные
..........................
[MONTH_x+1]
[0] недели
[0] дни
[...] данные
и т.д. Т.е. если кликнуть на 26 октября, он у него возвращал массив начиная с MONTH8 и заканчивая MONTH7. Кликаем на 1 апреля например - массив начинался с MONTH2 и заканчивался MONTH1. По сути данные внутри были почти всегда одинаковыми, кроме того момента, когда в текущий день\месяц добавлялся класс (что использовалось по идее в шаблоне)
Я предложил другой вариант - этот компонент календаря пусть возвращает всегда один массив, начинающийся всегда с января, вида
По идее, наверное всё же проверки выгоднее проводить внутри компонента и засовывать нужный класс в arResult, а в шаблоне уже оперировать ими, НО - разве тогда не будет генерироваться постоянно разный массив arResult в зависимости от того, какая дата сейчас в $_GET ? И как тогда быть с кешированием, что, на каждую дату будет свой кеш?
Потому я и подумал, что проверки "выбранный день, выбранный месяц" можно проводить прямо в шаблоне. Но тут снова вопрос - а как тут грамотно реагировать на дату в $_GET, чтобы выделять текущую дату\текущий месяц?