Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сложная работа с шаблонизаторами 
:(
    Опции темы
gcc
Дата 19.6.2008, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



решил пока сделать по этому
http://phoinix.ucoz.ru/publ/2-1-0-23
http://phoinix.ucoz.ru/publ/3-1-0-15

раньше делал без шаблонов, просто загружал файл

сейчас нужно вывести вот так:

Код

while (my ($nickname, $favorite_number) =
sth->fetchrow_array())  # делать выборку данных
# пока ничего не останется
{
print "$nickname, $favorite_number\n";
}
$sth->finish();


несколько значений, я не знаю сколько их, точнее можно родсчитать 
но как подгрузить шаблон и внутри html вывести вот этот wile цикл?

кто как делал, куда смотреть или можно пример?  smile 

шаблон должен быть такой как бы:

Код

html_header();
wihle #цикл
html_footer();


разделить использовать 3 шаблона чтоли, но тогда смысл шаблонов теряеться? не удобно...


(У меня не грузиться http://search.cpan.org  проблемы у првоайдера какие-то) smile 

Это сообщение отредактировал(а) gcc - 19.6.2008, 01:42
PM WWW ICQ Skype GTalk Jabber   Вверх
ginnie
Дата 19.6.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Уважаемый gcc, с HTML::Template разобраться, думаю, будет не очень сложно. Вы в цикле формируете массив именованных данных (хэшей), после чего передаете его в шаблон, который обрабатывает массив, выбирая из него хэши и заменяя переменные шаблона на данные из хэша. В шаблон можно включать содержимое файлов (<TMPL_INCLUDE NAME="filename.tmpl">), таким образом добавляются header и footer.

Пример из документации: 

In the template:
 
Код

  <TMPL_LOOP NAME=EMPLOYEE_INFO>
      Name: <TMPL_VAR NAME=NAME> <br>
      Job:  <TMPL_VAR NAME=JOB>  <p>
   </TMPL_LOOP>

 In the script:
Код

   $template->param(EMPLOYEE_INFO => [ 
                                       { name => 'Sam', job => 'programmer' },
                                       { name => 'Steve', job => 'soda jerk' },
                                     ]
                   );
   print $template->output();


Это сообщение отредактировал(а) ginnie - 19.6.2008, 11:39


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
gcc
Дата 21.6.2008, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



спасибо!

Недостатки

    * Из циклов присутствует только foreach, что позволяет вывести только последовательный список.



http://www.perlmonks.org/?node_id=65642

вот тут написано как сделать while

Код

Example 4

<!-- songs.tmpl -->
<html>
<head>
<title>Song Listing</title>
</head>
<body>
<h1>My Songs</h1>
<table>
<!-- TMPL_LOOP NAME=ROWS -->
   <tr>
      <td><!-- TMPL_VAR NAME=TITLE --></td>
      <td><!-- TMPL_VAR NAME=ARTIST --></td>
      <td><!-- TMPL_VAR NAME=ALBUM --></td>
      <td><!-- TMPL_VAR NAME=YEAR --></td>
   </tr>
<!-- /TMPL_LOOP -->
</table>
</body>
</html>

# songs.cgi
use DBI;
use CGI;
use HTML::Template;
use strict;

my $DBH = DBI->connect(
   qw(DBI:vendor:database:host user pass),
   { RaiseError => 1}
);
my $CGI = CGI->new();

# grab the stuff from the database
my $sth = $DBH->prepare('
   select title, artist, album, year
   from songs
');
$sth->execute();

# prepare a data structure for HTML::Template
my $rows;
push @{$rows}, $_ while $_ = $sth->fetchrow_hashref();
 
# instantiate the template and substitute the values
my $template = HTML::Template->new(filename => 'songs.tmpl');
$template->param(ROWS => $rows);

print $CGI->header();
print $template->output();


Код


push @{$rows}, $_ while $_ = $sth->fetchrow_hashref(); 


fetchrow_hashref returns a hash reference like so:
Код

{
   'artist' => 'Van Halen',
   'title'  => 'Spanish Fly',
   'album'  => 'Van Halen II',
   'year'   => '1979',
};


This hash reference describes one row. The line of code takes each row-as-a-hash_ref and pushes it to an array reference - which is exactly what param() wants for a Template Loop: "a list (an array ref) of parameter assignments (hash refs)". (ref: HTML::Template docs)

http://html-template.sourceforge.net/html_template_jit.html

Это сообщение отредактировал(а) gcc - 21.6.2008, 02:08
PM WWW ICQ Skype GTalk Jabber   Вверх
n4n0bit
Дата 26.6.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 19.6.2008

Репутация: 1
Всего: 1



В данный момент заинтересовался созданием своего шаблонизатора без избыточности, вот по теме пару линков нашел:

http://alexlebedev.com/blog/on-html-templates/
http://netsago.org/ru/docs/1/11
PM MAIL WWW Jabber   Вверх
gcc
Дата 27.6.2008, 05:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



ну мне этот понравился более, там еще есть дополнение, чтобы еще бытсрее работало...

не всегда полезно наверное в html ставить много всяких разметок и писать код прямо в html smile потому что если другой человек будет заниматься html дизайном и т.д. - не хорошо будеть...

а в этом шаблоне как раз то что нужно...
PM WWW ICQ Skype GTalk Jabber   Вверх
GoDleSS
Дата 3.7.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 11.2.2007
Где: Пироговский

Репутация: нет
Всего: 2



Имхо HTML::Template и так не избыточный шаблонизатор, тем более по сравнению с Template::Toolkit
Писать нечто еще более простое - скорее всего изобретать велосипед )
--------------------
It's a nice day to die my friend!
PM MAIL WWW ICQ   Вверх
gcc
Дата 3.7.2008, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



 smile 

Это сообщение отредактировал(а) gcc - 19.9.2008, 16:14
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 19.9.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



есть CGI::Ajax с HTML::Template 

раньше пробовал CGI с CGI::Ajax, вроде бы работало всё хорошо...

кажется что я не так передаю шаблон,  вот не много из кода:
(сейчас кажется видно явно ошибку, но если даже поставить вот так print $ajax->build_html( $cgi, \&main );, то все равно он не загружает... пробовал 10 раз...)

Код

     <tr>    <div id="resultdiv"></div>
     <TMPL_VAR NAME="PJX"> 
     <form method="post" enctype="multipart/form-data" action="<TMPL_VAR NAME="URL">">
         <td>  <input type="text" name="saa" </td>  
          <td><input type="submit" value="Изменить"></td>
  </form>

Код

  my $pjx = new CGI::Ajax( 'evenodd_func' => \&evenodd_func );
 if ($que = $query->param("saa") ) {   evenodd_func(); }
      sub evenodd_func {
          return "sdf"; }

my $template = HTML::Template->new(filename => $dir.'tempele' ,die_on_bad_params => '0');
    my $url = $query ->url(-relative => 1);
    $template->param(URL => $url);
    $template->param(PJX => $pjx); 
    print $template->output();


ошибка в шаблоне или где? CGI::Ajax по другому надо?

кстате, в документации написано: 
Код

      Enter something: 
        <input type="text" name="val1" id="val1"
         onkeyup="exported_func( ['val1'], ['resultdiv'] );">
      <br>
      <div id="resultdiv"></div>


этот модуль сам различает где HTML и где Javascript? или нужно код JS  поставить в тэги JS?


хотел спросить еще какая есть альтернатива?

Это сообщение отредактировал(а) gcc - 19.9.2008, 17:46
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 20.9.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



он все таки не заработал, точнее работает, но страницу обновляем полностью!!  вот тут http://netsago.org/ru/docs/1/10/ часть страницы обновляет - работает...

в гугле ничего нету  smile  smile  smile 

никто не пробовал? возможно ли вообще с этим шаблоном или где ошибка скажите пожалуйста?



Это сообщение отредактировал(а) gcc - 21.9.2008, 17:45
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 22.9.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



http://www.perl.com/pub/a/2006/03/02/ajax_and_perl.html

как передать из формы в скрипт и обратно, не перегружая страницу?

Это сообщение отредактировал(а) gcc - 22.9.2008, 19:10
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 2.11.2008, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



подскажите как сделать примерно такое в шаблоне HTML::Template:

Код

SELECT aliases,
                               (select count(*) from mailbox where domain = t1.domain),
                               (select count(*) from alias where domain = t1.domain)
                         FROM domain AS t1
+---------+-------------------------------------------------------------+
| aliases |  (select count(*) from mailbox where domain = t1.domain)|
+---------+-------------------------------------------------------------+
|      10 |                                                          27 | 

                         
как теперь из массив хэшей такой ключ хэша использовать?

UPD: по спешил, сделал просто: пересобрал с другим ключем


Код

my @arrayedout=();

for $loopindex (0..$#loop_data) {
  for $key (keys %{$loop_data[$loopindex]}) {
iif ($key eq '(select count(*) from mailbox where domain = t1.domain)')  {
   $key2='countmail';
   $arrayedout[$loopindex]{$key2} = $loop_data[$loopindex]{$key};
} elsif ($key eq '(select count(*) from alias where domain = t1.domain)') {
   $key3='countalias';
   $arrayedout[$loopindex]{$key3} = $loop_data[$loopindex]{$key};
} else { $arrayedout[$loopindex]{$key} = $loop_data[$loopindex]{$key}; }
   }
}  






Это сообщение отредактировал(а) gcc - 2.11.2008, 16:19
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 2.11.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 2
Всего: 17



можно это сделать с помощью MySQL? 

еще например проблема, в таблице хранится значения int  '1' и '0',  как отправить в шаблон  ON вместо '1', а OFF на '0'?

или это нужно перебрать в цикле? (как правильно или целесобразно не знаю)

Это сообщение отредактировал(а) gcc - 3.11.2008, 07:39
PM WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0763 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.