<ctpp/> главная .:. скачать .:. документация .:. faq .:. разработчикам  
o Главная
    Скачать!
    Установка

o Помощь
    Что такое CTPP?
    Как работает CTPP?
    Онлайн-документация
    FAQ

o В действии
    Проекты
    Первые шаги
    Как сделать?..
    Разработчикам

o В разработке
    Тесты производительности
    Расписание
    Разработчики

    Благодарности




Урок 2: Выводим список новостей

Исходные файлы к этой статье можно найти здесь. В предыдущей статье мы познакомились с основами PERL-API шаблонизатора CTPP2, написав программу "Hello, World!". В этом примере мы создадим ленту новостей для сайта.

Новости будем брать из СУБД MySQL, и для этого создадим таблицу со следующей структурой:

CREATE TABLE news
(
     id           INT NOT NULL auto_increment,
     date         INT NOT NULL,
     title        VARCHAR(255) NOT NULL,
     body         text,
     publication  VARCHAR(255) NOT NULL DEFAULT '',
     reporter     VARCHAR(255) NOT NULL DEFAULT '',
     reporter_url VARCHAR(255) NOT NULL DEFAULT '',
     primary key(id)
);

Новости (многоточиями заменен длинный текст):

	{
		"date"  : 1169090455,
		"title" : "FreeBSD 6.3-RELEASE is now available",
		"body"  : "Please ......."
	},
	{
		"date"  : 1169019722,
		"title" : "New RSS Feeds",
		"body"  : "Six new ......."
	},
	{
		"date"  : 1169010455,
		"title" : "$199 Linux PC Now Available at Sears.com",
		"body"  : "Linspire, Inc ........",

		"publication"  : "http:// .......",
		"reporter"     : "SOURCE Linspire, Inc."
	},
	{
		"date"  : 1168840430,
		"title" : "Samba's Tridge clusters code and crowds",
		"body"  : "Andrew .......",

		"publication"  : "http:// .......",
		"reporter"     : "Dahna McConnachie",
		"reporter_url" : "http:// ......."
	}

Шаблон:

<html>
<head>
<title>News List</title>
<style type="text/css">
a {
  font-family: Verdana, Arial, Helvetica, sans-serif;
  color: black; font-size: 8pt; font-weight: bold;
}

span
{
  font-family: Verdana, Arial, Helvetica, sans-serif;
  color: black; font-size: 10pt; font-weight: normal;
}

span.date
{
  font-family: Verdana, Arial, Helvetica, sans-serif;
  color: #D00000; font-size: 10pt; font-weight: normal;
}
</style>
</head>
<body>
<TMPL_if newslist>
<div align="center" style="width=100%">
<table cellspacing="0" cellpadding="0" border="0" width="96%">
<TMPL_loop newslist>
    <tr><td>
        <span class="date"><b><i><TMPL_var DATE_FORMAT(date, "%d %b %Y %H:%M")>
        </i></b></span>
        <span><b><TMPL_var title></b><br><TMPL_var body><br>

        <TMPL_if publication>
            <a href="<TMPL_var publication>">Main URL</a><br>
        </TMPL_if>

        <TMPL_if reporter>
            <TMPL_if reporter_url>
                <a href="<TMPL_var reporter_url>"><TMPL_var reporter></a><br>
            <TMPL_else>
                <TMPL_var reporter>
            </TMPL_if>
        </TMPL_if>
        <br>
        </span>
    </td></tr>
</TMPL_loop>
</table>
</div>
</TMPL_if>
</body>
</html>

Код

Загружаем модули HTML::CTPP2 и DBI.

use HTML::CTPP2;
use DBI;

Подключаемся к БД и создаем объект шаблонизатора.

my $DBH = DBI -> connect('DBI:mysql:database=news;host=localhost;port=3306',
                         'newsreader',
                         'topsecret') || die "Can't connect: $!";

my $T = new HTML::CTPP2();

Делаем запрос к БД и получаем данные.

my $Query = "SELECT id, date, title, body, publication
 reporter, reporter_url FROM news ORDER BY date DESC";

my $STH = $DBH -> prepare($Query);
$STH -> execute;

my $H = $STH -> fetchall_arrayref({});

Отправляем данные в шаблонизатор и выводим результат.

$T -> param({newslist => $H});

print "Content-type: text/html\n\n";
print $T -> output($Bytecode);

Проверяем работу

1. Комипилируем шаблон


ctpp2c newslist.tmpl newslist.ct2


2. Запускаем код

#!/usr/bin/perl
use strict;
use HTML::CTPP2;
use DBI;
use Data::Dumper;

# Подключаемся к БД
my $DBH = DBI -> connect('DBI:mysql:database=news;host=localhost;port=3306',
                         'newsreader',
                         'topsecret') || die "Can't connect: $!";

# Создаем объект шаблонизатора
my $T = new HTML::CTPP2();

# Загружаем откомпилированный шаблон
my $Bytecode = $T -> load_bytecode("newslist.ct2");

# Делаем запрос к БД
my $Query = "SELECT id, date, title, body, publication
 reporter, reporter_url FROM news ORDER BY date DESC";

my $STH = $DBH -> prepare($Query);
$STH -> execute;

my $H = $STH -> fetchall_arrayref({});

# Вставляем параметры
$T -> param({newslist => $H});

# Если необходимо, можно включить отладочный вывод
# Эти данные мы получили из БД
#warn Dumper($H);

# а вот так данные интерпретируются шаблонизатором
#warn $T -> dump_params();

# Выводим результат
print "Content-type: text/html\n\n";
print $T -> output($Bytecode);


Результат работы - страница со списком новостей:

.


Copyright © 2003 - 2008 CTPP Dev Team.