Добрый день!
Написал компонент для вывода архива новостей.
http://clip2net.com/s/1gJ4o
Слева выводится список матриц месяцев за весь выбранный год (из-за использования jcarousellite_1.0.1.pack.js мы видим только месяц с текущей выбранной датой и два предыдущих месяца, т.е. всего 3 ). Дни месяца, за которые имеются новости, выводятся в виде ссылок. При клике на такую ссылку формируется параметр, например, ?news_date=26.10.2011.
Справа, для вывода списка новостей, расположен стандартный компонент news.list, который принимает в качетстве фильтра параметр ?news_date.
С компонентом news.list все понятно - он просто фильтрует и выводит данные. При этом кэширует их, когда нужно.
А вот насчет кэша в моем компоненте да и вообще логики, думаю, что не все в порядке.
Component.php у меня формирует следующий массив:
[CODE]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
)[/CODE]
При клике на какой-нибудь дате изменяется $_GET["news_date"], в Component.php значение этой переменной GET обрабатывается и в цикле начинается формирование массива месяцев с "месяца выбранной даты" - 2 (так как нам нужно чтобы в "каруселе" календаря показался месяц, в котором находится текущая выбранная дата и два предыдущих месяца).
В итоге при клике на какой-нибудь дате получается что массив переформировывается и по if ($this->StartResultCache(36000000)) создается новый кэш. То есть, если я правильно понял, на каждый день у меня создается отдельный кэш.
Можно ли как-то исправить этот момент? Ведь массив по сути один и тот же. Наверно, можно большинство операций из component.php перенести в template.php и уже там менять порядок месяцев в архиве за год, да и стили какие нужно определять там же?