parser

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

 

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

тогда, проконсультируйте, плз, по ходу выполнения...

точка 30.03.2006 10:01

1.создал таблицу в БД
CREATE TABLE article (
article_id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
article_type_id TINYINT(4) NOT NULL DEFAULT 0,
title VARCHAR(255),
lead VARCHAR(255),
body TEXT,
is_published TINYINT(1) NOT NULL DEFAULT 0,
dt DATETIME NOT NULL,
dt_published DATETIME NOT NULL
)

CREATE INDEX ix_article_0 ON article (
article_type_id,
is_published,
dt_published,
dt
)

2.Запихнул это в auto.p раздела /press/

@USE
/classes/lib.p
/classes/sql.p
/classes/dtf.p

#Метод получения статей по заданным параметрам#

@getArticles[lparams][params]
$params[^hash::create[$lparams]]
$result[^MAIN:pSQL.table{
SELECT
article_id AS id,
title,
lead,
dt
^if(^params.id.int(0)){, body}
FROM
article
WHERE
article_type_id = ^params.article_type_id.int(0) AND
is_published = 1 AND
dt_published <= ^MAIN:pSQL.now[]
^if(^params.id.int(0)){
AND article_id = ^params.id.int(0)
}
^if(def $params.where){
AND $params.where
}
ORDER BY
dt DESC
}[
^if(def $params.limit){$.limit($params.limit)}
^if(def $params.offset){$.offset($params.offset)}
]]
#end @getArticles[]


##################################
#Отображение списка анонсов статей
##################################

@printArticles[article]
<ul>
^untaint[as-is]{
^article.menu{
<li><b>^dtf:format[%d.%m.%Y;$article.dt]</b>
^printTitle[$article]
<br />$article.lead</li>
}
}
</ul>
#end @printArticles[]


@printTitle[article]
^if(def $article.title && ^article.title.match[\^[[^^\^]]+\^]]){
$result[^article.title.match[\^[([^^\^]]+)\^]][g]{<a href="?id=$article.id">$match.1</a>}]
}{
$result[<a href="?id=$article.id">$article.title</a>]
}
#end @printTitle[]

#Достаем информацию для отображения календаря

@getCalendar[lparams][params]
$params[^hash::create[$lparams]]
$result[^MAIN:pSQL.table{
SELECT
^MAIN:pSQL.month[dt] AS month,
^MAIN:pSQL.year[dt] AS year
FROM
article
WHERE
article_type_id = ^params.article_type_id.int(0) AND
is_published = 1 AND
dt_published <= ^MAIN:pSQL.now[]
GROUP BY
year,
month
}]
#end @getCalendar[]

#Отображение календаря.

@printCalendar[calendar][now;curr_year;curr_month;y_hash;ym_hash;i;m]
^if($calendar){
$now[^date::now[]]
$curr_year(^form:year.int(^dtf:format[%Y]))
$curr_month(^form:month.int(^dtf:format[%m]))

$y_hash[^calendar.hash[year;year][$.distinct(1)]]
$ym_hash[^calendar.hash{^calendar.year.format[%04d]=^calendar.month.format[%02d]}[month][$.distinct(1)]]
$year[^y_hash._keys[]]
^year.sort($year.key)[desc]

<table border="1" align="right">
<tr valign="top">
<td>
^year.menu{
<b>^if($year.key == $curr_year){
$year.key /&nbsp^;
}{

^if(^calendar.locate[year;$year.key]){}
<a href="?year=$year.key&month=$calendar.month">$year.key</a>
}
</b><br />
}
</td>
<td>
^if(^year.locate[key;$curr_year]){}
^for[i](0;11){
$m(12-$i)
^if(def $form:month && $m == $curr_month){
<b>$dtf:[ri-locale].month.$m</b><br />
}{
^if(!($now.year == $curr_year && $m > $now.month)){
^if($ym_hash.[^curr_year.format[%04d]=^m.format[%02d]]){
<a href="?year=$curr_year&month=$m">$dtf:[ri-locale].month.$m</a>
}{
$dtf:[ri-locale].month.$m
}
<br />
}
}
}
</td>
</tr>
</table>
}
#end @printCalendar[]



#Отображение одной статьи с текстом

@printArticle[article]
^untaint[as-is]{
^if(def $article.title){<h1>^article.title.match[[\[\]]][g]{}</h1>}
^dtf:format[%d %h %Y;$article.dt;$dtf:rr-locale]
<p>$article.body</p>
}
#end @printArticle[]

3.А это в index.html того же раздела
@main[]
^if(!def $form:id){
^rem{ *** $form:id не определена: показываем календарь со списком новостей *** }

^rem{ *** получаем информацию о календаре и выводим его *** }
$calendar[^getCalendar[$.article_type_id(1)]]
^printCalendar[$calendar]

^rem{ *** получаем список последних новостей или новостей за указанный период и выводим его *** }
$article[^getArticles[
$.article_type_id(1)
^if(^form:year.int(0)){
$.where[dt >= '^form:year.int(0)-^form:month.int(0)-00' AND dt <= '^form:year.int(0)-^form:month.int(0)-31']
}{
$.limit(20)
}
]]
^if($article){
^printArticles[$article]
}{
<p>Не найдено ни одной новости за указаный период.</p>
}
}{
^rem{ *** $form:id определена: достаем и показываем новость с выбранным id *** }
$article[^getArticles[
$.article_type_id(1)
$.id(^form:id.int(0))
]]
^if($article){
^printArticle[$article]
}{
^rem{ *** указали такую id, новости с которой не существует... посылаем посетителя на... 404 ошибку. *** }
^location[/404/]
}
}


при заходе на эту страницу, ругается:

table
undefined method
x:/home/mysite/www/press/auto.p(68:20)
--------------------------------------------------------------------------------
params x:/home/mysite/www/press/auto.p(68:2)
getCalendar x:/home/mysite/www/press/index.html(6:20)
rem x:/home/mysite/www/press/index.html(6:10)
if x:/home/mysite/www/press/index.html(2:2)

что не так?