<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24604 -->
<!-- Reviewed: no -->
<sect3 id="zend.view.helpers.initial.headstyle">
    <title>L'aide de vue HeadStyle</title>

    <para>
        L'élément HTML <code>&lt;style&gt;</code> est utilisé pour inclure des feuilles de
        styles <acronym>CSS</acronym> à l'intérieur de l'élément HTML <code>&lt;head&gt;</code>.
    </para>

    <note>
        <title>Utilisez HeadLink pour lier des fichiers CSS externes</title>

        <para>
            <link linkend="zend.view.helpers.initial.headlink">HeadLink</link> devrait être
            utilisé pour inclure des feuilles de styles externes. <code>HeadStyle</code> ne devrait
            être utilisé que si vous souhaitez définir des feuilles de styles internes.
        </para>
    </note>

    <para>
        L'aide de vue <code>HeadStyle</code> supporte les méthodes suivantes pour l'ajout et
        le paramétrage des déclarations de feuilles de styles :
    </para>

    <itemizedlist>
        <listitem>
            <para><methodname>appendStyle($content, $attributes = array())</methodname></para>
        </listitem>

        <listitem>
            <para><methodname>offsetSetStyle($index, $content, $attributes = array())</methodname></para>
        </listitem>

        <listitem>
            <para><methodname>prependStyle($content, $attributes = array())</methodname></para>
        </listitem>

        <listitem>
            <para><methodname>setStyle($content, $attributes = array())</methodname></para>
        </listitem>
    </itemizedlist>

    <para>
        Dans tous les cas, <varname>$content</varname> est le contenu des déclarations <acronym>CSS</acronym>.
        <varname>$attributes</varname> sont les attributs additionnels que vous pouvez fournir à la balise
        <code>style</code> : "lang", "title", "media", ou "dir" sont autorisés.
    </para>

    <note>
        <title>Paramétrez des commentaires conditionnels</title>

        <para>
            <code>HeadStyle</code> vous permet d'englober vos balises de style avec des
            commentaires conditionnels, ce qui permet de les masquer pour des navigateurs
            spécifiques. Pour ajouter les balises conditionnelles, fournissez le paramètre
            <code>conditional</code> en tant que partie du paramètre <varname>$attrs</varname> lors de
            l'appel de la méthode.
        </para>

        <example id="zend.view.helpers.initial.headstyle.conditional">
            <title>HeadStyle avec des commentaires conditionnels</title>

            <programlisting language="php"><![CDATA[
// adding scripts
$this->headStyle()->appendStyle($styles, array('conditional' => 'lt IE 7'));
]]></programlisting>
        </example>
    </note>

    <para>
        <code>HeadStyle</code> permet aussi la capture des déclarations de style ; ceci peut
        être utile si vous voulez créer des déclarations par programme, et ensuite les placer à un
        autre endroit. L'utilisation de cette fonctionnalité est montrée dans un exemple
        ci-dessous.
    </para>

    <para>
        Enfin, vous pouvez utiliser la méthode <methodname>headStyle()</methodname> pour ajouter
        rapidement des éléments de déclarations ; la signature de la méthode est
        <methodname>headStyle($content$placement = 'APPEND', $attributes = array())</methodname>.
        <varname>$placement</varname> peut être "APPEND", "PREPEND", ou "SET".
    </para>

    <para>
        <code>HeadStyle</code> surcharge chacune des méthodes <methodname>append()</methodname>,
        <methodname>offsetSet()</methodname>, <methodname>prepend()</methodname>, et <methodname>set()</methodname> pour imposer
        l'utilisation des méthodes spéciales listées ci-dessus. En interne, il stocke chaque élément
        sous la forme d'un <code>stdClass</code>, qui est ensuite sérialisé en utilisant la méthode
        <methodname>itemToString()</methodname>. Ceci vous permet de réaliser des vérifications sur les éléments
        de la pile, et optionnellement modifier ces éléments en modifiant simplement l'objet
        retourné.
    </para>

    <para>
        L'aide <code>HeadStyle</code> est une implémentation concrète de l'aide <link
        linkend="zend.view.helpers.initial.placeholder">Placeholder</link>.
    </para>

    <note>
        <title>UTF-8 encoding used by default</title>

        <para>
            By default, Zend Framework uses <acronym>UTF-8</acronym> as its default encoding, and,
            specific to this case, <classname>Zend_View</classname> does as well. Character encoding
            can be set differently on the view object itself using the
            <methodname>setEncoding()</methodname> method (or the the <varname>encoding</varname>
            instantiation parameter). However, since <classname>Zend_View_Interface</classname> does
            not define accessors for encoding, it's possible that if you are using a custom view
            implementation with this view helper, you will not have a
            <methodname>getEncoding()</methodname> method, which is what the view helper uses
            internally for determining the character set in which to encode.
        </para>

        <para>
            If you do not want to utilize <acronym>UTF-8</acronym> in such a situation, you will
            need to implement a <methodname>getEncoding()</methodname> method in your custom view
            implementation.
        </para>
    </note>

    <example id="zend.view.helpers.initial.headstyle.basicusage">
        <title>Utilisation basique de l'aide HeadStyle</title>

        <para>
            Vous pouvez spécifier une nouvelle balise de style à n'importe quel moment
            :
        </para>

        <programlisting language="php"><![CDATA[
// ajout de styles
$this->headStyle()->appendStyle($styles);
]]></programlisting>

        <para>
            L'ordre est très important avec les <acronym>CSS</acronym> ; vous pouvez devoir assurer que les
            déclarations soient chargées dans un ordre spécifique dû à l'ordre de la cascade ;
            employez les diverses directives "append", "prepend", et "offsetSet" pour faciliter
            cette tâche :
        </para>

        <programlisting language="php"><![CDATA[
// Mettre les styles dans le bon ordre

// - placer à un offset particulier
$this->headStyle()->offsetSetStyle(100, $stylesPerso);

// - placer à la fin
$this->headStyle()->appendStyle($stylesFinaux);

// - placer au début
$this->headStyle()->prependStyle($stylesInitiaux);
]]></programlisting>

        <para>
            Quand vous êtes finalement prêt à afficher toutes les déclarations de styles dans
            votre script de layout, faîtes un simple <code>echo</code> de l'aide :
        </para>

        <programlisting language="php"><![CDATA[
<?php echo $this->headStyle() ?>
]]></programlisting>
    </example>

    <example id="zend.view.helpers.initial.headstyle.capture">
        <title>Capturer les déclarations de style en utilisant l'aide HeadStyle</title>

        <para>
            Parfois vous devez produire des déclarations de styles <acronym>CSS</acronym> par programme. Même si
            vous pouvez employer la concaténation de chaînes, les "heredocs", ou tout autre
            équivalent, il est souvent plus facile de faire juste la création des styles et de les
            entourer par des balises <acronym>PHP</acronym>. <code>HeadStyle</code> vous permet de le faire, et capture
            ainsi l'élément dans la pile :
        </para>

        <programlisting language="php"><![CDATA[
<?php $this->headStyle()->captureStart() ?>
body {
    background-color: <?php echo $this->bgColor ?>;
}
<?php $this->headStyle()->captureEnd() ?>
]]></programlisting>

        <para>Les suppositions suivantes sont considérées :</para>

        <itemizedlist>
            <listitem>
                <para>
                    Les déclarations de styles sont ajoutées à la pile. Si vous souhaitez
                    qu'elles remplacent la pile ou qu'elles soient ajoutées en début de pile, vous
                    devez fournir "SET" ou "PREPEND", en tant que premier argument de
                    <methodname>captureStart()</methodname>.
                </para>
            </listitem>

            <listitem>
                <para>
                    Si vous souhaitez spécifier un quelconque attribut additionnel pour la
                    balise <code>&lt;style&gt;</code>, fournissez-le sous la forme d'un tableau en
                    deuxième argument de <methodname>captureStart()</methodname>.
                </para>
            </listitem>
        </itemizedlist>
    </example>
</sect3>