parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Помогите оптимизировать, если возможно, небольшой кусочек кода для генерации "календаря" новостей

nkostya 21.03.2004 10:12 / 21.03.2004 10:13

Итак, требуется сделать "календарь" на года/месяца, за которые уже опубликованны новости, но если пользователь - администратор, то ему должен быть показан календарик даже с неопубликованными новостями, и месяца, за которые новости не опубликованны должны помечаться, допустим другим цветом...

Имеется таблица новостей:
news_id > dt_published > is_published > и т.д.
Я делаю так:
$calendar[^MAIN:pSQL.sql[table][
	SELECT
		^MAIN:pSQL.date_format[dt_published;%Y] as dt_year,
		^MAIN:pSQL.date_format[dt_published;%m] as dt_month,
		is_published as all_is_published
	FROM
		news
	WHERE
		^if(!^MAIN:check_right(1)(4|8)){is_published = '1' AND}
		^rem{ *** просто в одной таблице хранятся новости для разных нужд *** }
		news_type_id = '^news_type_id.int(1)'
	GROUP BY
		dt_year DESC,
		dt_month DESC,
		is_published ASC
]]
^if(!^MAIN:check_right(1)(4|8)){
	^rem{ *** Если пользователь не имеет право на изменение/удаление новостей *** }
	$calendar_hash[^calendar.hash[dt_year][$.distinct[tables]]]
}{
	$calendar_hash[^hash::create[]]
	^calendar.menu{
		^if(!$calendar_hash.[$calendar.dt_year]){
			$calendar_hash.[$calendar.dt_year][^table::create[$calendar;$.limit(0)]]
		}
		^if(!^calendar_hash.[$calendar.dt_year].locate[dt_month;$calendar.dt_month]){
			^calendar_hash.[$calendar.dt_year].append{$calendar.dt_year	$calendar.dt_month	$calendar.all_is_published}
		}
	}
}
Можно ли как-нибудь модифицировать запрос, чтобы обойтись без такого "страшного" перебора таблицы?