Вывести все имена из массива в HTML - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь выполнить цикл и получить все массивы, каждое имя со своим собственным элементом <li>.

<li>
#Foo
with all div and span inside here
</li>

<li>
#bar
with all div and span inside here
</li>

<li>
#moo
with all div and span inside here
</li>
use CGI::Pretty ":standard";

@names  = ('Foo', 'Bar', 'Moo');
my $str = join(" ",@names);

$data =  li (
           div({"class='inforno'"}, "<img src='inforno>'"),
           div({"class='inforno'"}, "<a href='#' class='inforno'>$str<
+/a>"),
           span({"class='inforno'"},  "<a href='#' class='inforno'>
                   Edit user </a>")

          );

     print "$data\n";

при запуске я получаю только один элемент <li> со всеми именами в одном и том же <li>. Я хочу дать каждому имени свое <li> со всеми элементами <div> и <span> внутри при открытии и закрытии тегов <li>.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Если вы не используете очень старую копию CGI::Pretty, ваш код выдает это предупреждающее сообщение при запуске

CGI :: Pretty устарела и будетудалено в будущем выпуске.Пожалуйста, смотрите https://github.com/leejo/CGI.pm/issues/162 для получения дополнительной информации на C: /Strawberry/perl/site/lib/CGI/Pretty.pm строка 21.

Важно, чтобы вы не игнорировали предупреждениесообщения: они здесь, чтобы помочь вам

Вы также получите три появления этого предупреждения

Нечетное количество элементов в анонимном хеше ...

Это потому, что вы используете {"class='inforno'"}, который является неправильным синтаксисом для анонимного хэша

Поскольку CGI устарел, а части библиотеки HTML, генерирующие HTML, особенно недовольны,Лучше всего использовать систему шаблонов.Одной из самых популярных систем шаблонов является модуль Template::Toolkit, и этот код показывает вам, как использовать его для достижения того, чего вы хотите

Perl

use strict;
use warnings 'all';

use Template;

my @names  = qw/ Foo Bar Moo /;

my $template = Template->new;

binmode STDOUT;

$template->process('list.html', { list => \@names })
        or die $template->error;

list.html

[% FOREACH name IN list %]
<li>
  <div class='inforno'>
    <img src='inforno'>
  </div>
  <div class='inforno'>
    <a href='#' class='inforno'>[% name %]</a>
  </div>
  <span class='inforno'>
    <a href='#' class='inforno'>Edit user</a>
  </span>
</li>
[% END %]

output

<li>
  <div class='inforno'>
    <img src='inforno'>
  </div>
  <div class='inforno'>
    <a href='#' class='inforno'>Foo</a>
  </div>
  <span class='inforno'>
    <a href='#' class='inforno'>Edit user</a>
  </span>
</li>

<li>
  <div class='inforno'>
    <img src='inforno'>
  </div>
  <div class='inforno'>
    <a href='#' class='inforno'>Bar</a>
  </div>
  <span class='inforno'>
    <a href='#' class='inforno'>Edit user</a>
  </span>
</li>

<li>
  <div class='inforno'>
    <img src='inforno'>
  </div>
  <div class='inforno'>
    <a href='#' class='inforno'>Moo</a>
  </div>
  <span class='inforno'>
    <a href='#' class='inforno'>Edit user</a>
  </span>
</li>
0 голосов
/ 14 сентября 2018

Вам не нужен join, вам нужно использовать цикл foreach и поместить код, который генерирует и печатает <li> внутри цикла.

use CGI::Pretty ":standard";

@names  = ('Foo', 'Bar', 'Moo');

foreach $name (@names){
    $data =  li (
            div({"class='inforno'"}, "<img src='inforno>'"),
            div({"class='inforno'"}, "<a href='#' class='inforno'>$name</a>"),
            span({"class='inforno'"},  "<a href='#' class='inforno'>
                    Edit user </a>")

            );  

        print "$data\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...