1.8. tal:repeat: Executando Looping

Zope Page Template – índice

O tal:repeat permite fazer o looping através dos objetos e é uma das declarações mais complicadas. Uma declaração contém o valor para ser atribuído para cada iteração dos resultados, separada por um espaço dos resultados que estão sendo iterados.

Exemplo 1:

<table>

<tr tal:repeat=”loop_name_row context/portal_catalog”>

<td tal:content=”loop_name_row/Title”>Title</td>

</tr>

</table>


Neste exemplo, a expressão here/portal_catalog retorna a lista de resultados. O repeat começa na tag da tabela loop_name_row, para cada loop_name_row na lista de resultados, uma nova linha na tabela será criada. Assim como tal:define, cada iteração dos resultados são atribuídos para uma variável local (neste caso, loop_name_row).

Exemplo 2:

Você pode acessar algumas variáveis úteis da declaração repeat, tal como o número da iteração atual. Você pode acessa-las pela variável repeat, que é acrescentada ao namespace. Por exemplo, para acessar o número atual, você usa o seguinte:

<table>

<tr tal:repeat=”row context/portal_catalog”>

<td tal:content=”repeat/row/number”>1</td>

<td tal:content=”row/Title”>Title</td>

</tr>

</table>

Exemplo 3:

Agora vamos acrescentar à nossa página uma lista de objetos que se encontram no mesmo diretório. Vamos criar uma tabela cujas linhas serão numeradas em uma coluna, além das colunas para id, metatype e title.

Acrescente esta linha na sua pagina ZPT:

<table border=”1″ width=”100%”>

<tr>

<th>#</th><th>Id</th><th>Meta-Type</th><th>Title</th>

</tr>

<tr tal:repeat=”item container/objectValues”>

<td tal:content=”repeat/item/number”>#</td>

<td tal:content=”item/id”>Id</td>

<td tal:content=”item/meta_type”>Meta-Type</td>

<td tal:content=”item/title”>Title</td>

</tr>

</table>


O atributo tal:repeat aplicada sobre as linhas significa: repita esta linha para cada objeto do container. O atributo repeat atribui os objetos da lista, um à um, à variável item, e criada uma cópia da linha para cada objeto utilizando esta variável. O valor item/id em cada linha é o atributo id do objeto para a linha corrente.

O nome item da variável não é especial; poder-se-ia utilizar qualquer nome desde começasse por uma letra e que contenha apenas letras, números ou “_”. A variável existe apenas no tag no qual encontra-se o atributo tal:repeat, no caso acima o tag <tr>; Se deseja utiliza-la o fora do tag, obterá um erro.

Cada linha no exemplo é numerada, o que implica o conhecimento do número corrente. Poderia também querer identificar se uma linha específica é a primeira ou a última ou outras informações similares. Em cada cópia da linha, a variável item representa um objeto da lista. Este objeto não está consciente do laço, sabe nada a respeito do loop, por conseguinte não existe atributo específico do objeto que permita extrair informações sobre o laço. A variável interna repeat foi criada exatamente para isso. Se põe o nome da variável de conteúdo (item no caso), após a variável repeat, pode aceder à contagem do laço a partir de zero (index), partir de 1 (number), partir de “A” (Letter), e de diferentes outras maneiras.

Por conseguinte, a expressão repeat/item/number é igual à 1 na primeira linha, 2 na segunda, etc. Dado que se pode inserir a expressão tal:repeat no interior de outra expressão tal:repeat, vários laços podem estar ativos por vez. Por essa razão deve-se usar repeat/item/number ao invés de repeat/number, ou seja, simplesmente para obter informações do tal:repeat correto, aquele que criou a variável item.

Segue uma relação das variáveis disponíveis no repeat:

  • index: Número de iterações, a partir de zero.
  • number: Número de iterações, a partir de um.
  • even: É true (verdadeiro) para iteração de números pares (por exemplo, 0, 2, 4, …).
  • odd: é true para uma iteração de números ímpares (por exemplo, 1, 3, 5, …).
  • start: É true para a primeira iteração.
  • end: É true para a última iteração.
  • length: É o total do números de iterações.
  • letter: Número de iteração com escrita em minúscula (por exemplo, a–z, aa–az, ba–bz, …, za–zz, aaa–aaz, e assim por diante), a partir de um.
  • Letter: É a versão maiúscula de letter.
  • roman: Número numeral Romano em minúscula (i, ii, iii, iv, v, e assim por diante), a partir de um.
Anúncios

~ por Fernando Felix do Nascimento Junior em 27/07/2010.

5 Respostas to “1.8. tal:repeat: Executando Looping”

  1. […] 1.8. tal:repeat: Executando Looping […]

  2. […] 1.8. tal:repeat: Executando Looping […]

  3. oi, eu usei o repeat e não usei estas variaveis disponiveis no repeat, eu fiz assim : e funciona

    • O uso dessas variáveis são opcionais (para fins específicos). Por exemplo, se você quisesse listar apenas objetos que possuam índice par, você utilizaria as variáveis ‘even’ e ‘index’.

      • ah ta, entendi
        obrigada, seu artigo é ótimo me ajudou nos estudos
        abraços

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: