<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24362 -->
<!-- Reviewed: no -->
<sect1 id="learning.layout.intro">
    <title>Introdução</title>

    <para>
        Na construção de um website com camadas <acronym>MVC</acronym> usando Zendo Framework,
        os scripts de visualização serão tipicamente apenas um fragmento de <acronym>HTML</acronym>
        pertinente à ação solicitada. Por exemplo, se você tivesse a ação
        "<filename>/user/list</filename>", você poderia criar um script de vizualização que
        percorresse os usuários e apresentasse uma lista desordenada:
    </para>

    <programlisting language="php"><![CDATA[
<h2>Usuários</h2>
<ul>
    <?php if (!count($this->users)): ?>
    <li>Nenhum usuário encontrado</li>
    <?php else: ?>
    <?php foreach ($this->users as $user): ?>
    <li>
        <?php echo $this->escape($user->fullname) ?>
        (<?php echo $this->escape($user->email) ?>)
    </li>
    <?php endforeach ?>
    <?php endif ?>
</ul>
]]></programlisting>

    <para>
        Uma vez que este é apenas um fragmento de <acronym>HTML</acronym>, esta página não é válida;
        está faltando uma declaração <acronym>DOCTYPE</acronym> e as tags de abertura de
        <acronym>HTML</acronym> e <acronym>BODY</acronym>. A questão é: onde elas serão criadas?
    </para>

    <para>
        Nas versões anteriores do Zend Framework, desenvolvedores muitas vezes criaram scripts de
        vizualização para "cabeçalho" e "rodapé" que continham esses artefatos, e então seriam
        renderizados em cada script de vizualização. Enquanto essa metodologia funcionou, ela também
        gerou dificuldades de refatoração mais tarde, ou para criar conteúdos compostos pela chamada
        de múltiplas ações.
    </para>

    <para>
        O padrão de projeto <ulink url="http://martinfowler.com/eaaCatalog/twoStepView.html">Two
        Step View</ulink> explica muitos dos problemas apresentados. Nesse padrão, a vizualização
        "aplicação" é criada primeiro, depois introduzida na visualização "página" e depois é
        apresentada ao cliente. A visualização página pode ser pensada como um site-modelo ou
        layout, e teria elementos em comum utilizados em várias páginas.
    </para>

    <para>
        Dentro do Zend Framework, o <classname>Zend_Layout</classname> implementa o padrão Two Step
        View.
    </para>
</sect1>
