<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect3 id="zend.view.helpers.initial.headstyle">
    <title>HeadStyle Helfer</title>

    <para>
        Das <acronym>HTML</acronym> Element <emphasis>&lt;style&gt;</emphasis> wird verwendet um
        <acronym>CSS</acronym> Stylesheets im <acronym>HTML</acronym> Element
        <emphasis>&lt;head&gt;</emphasis> zu inkludieren.
    </para>

    <note>
        <title>HeadLink verwenden um CSS Dateien zu verlinken</title>

        <para>
            <link linkend="zend.view.helpers.initial.headlink">HeadLink</link> sollte verwendet
            werden um <emphasis>&lt;link&gt;</emphasis> Elemente zu Erstellen die externe
            Stylesheets enthalten. <classname>HeadStyle</classname> wird verwendet wenn man
            Stylesheets inline definieren will.
        </para>
    </note>

    <para>
        Der <classname>HeadStyle</classname> Helfer unterstützt die folgenden Methoden für das
        Setzen und Hinzufügen von Stylesheet Deklarationen:
    </para>

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

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

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

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

    <para>
        In allen Fällen ist <varname>$content</varname> die aktuelle <acronym>CSS</acronym>
        Deklaration. <varname>$attributes</varname> sind alle zusätzlichen Attribute die das
        <property>style</property> Tag erhalten soll: lang, title, media, oder dir sind alle
        möglich.
    </para>

    <note>
        <title>Abhängige Kommentare setzen</title>

        <para>
            <classname>HeadStyle</classname> erlaubt es ein Script Tag in abhängige Kommentare zu
            setzen, das es erlaubt es vor speziellen Browsern zu verstecken. Um abhängige Tags zu
            setzen, muß der abhängige Wert als Teil des <varname>$attrs</varname> Parameters im
            Methodenaufruf übergeben werden.
        </para>

        <example id="zend.view.helpers.initial.headstyle.conditional">
            <title>Headstyle mit abhängigen Kommentaren</title>

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

    <para>
        <classname>HeadStyle</classname> erlaubt auch das Erfassen von Style Deklarationen; das kann
        nützlich sein wenn eine Deklaration programmtechnisch erstellt werden soll und Sie dann
        woanders platziert wird. Die Verwendung hierfür wird in einem unten angeführten Beispiel
        gezeigt.
    </para>

    <para>
        Letztendlich kann auch die <methodname>headStyle()</methodname> Methode verwendet werden um
        schnellstens Deklarationselemente hinzuzufügen; die Signatur dafür ist
        <methodname>headStyle($content$placement = 'APPEND', $attributes = array())</methodname>.
        <varname>$placement</varname> sollte entweder 'APPEND', 'PREPEND', oder 'SET' sein.
    </para>

    <para>
        <classname>HeadStyle</classname> überschreibt jedes <methodname>append()</methodname>,
        <methodname>offsetSet()</methodname>, <methodname>prepend()</methodname>, und
        <methodname>set()</methodname> um die Verwendung der oben gelisteten speziellen Methoden zu
        forcieren. Intern wird jeder Teil als <property>stdClass</property> Token gespeichert,
        welches später serialisiert wird durch Verwendung der
        <methodname>itemToString()</methodname> Methode. Das erlaubt es die Teile im Stack zu
        Prüfen, und optional auch zu Ändern durch einfaches Modifizieren des zurückgegebenen
        Objektes.
    </para>

    <para>
        Der <classname>HeadStyle</classname> Helfer ist eine konkrete Implementation des
        <link linkend="zend.view.helpers.initial.placeholder">Platzhalter Helfers</link>.
    </para>

    <note>
        <title>Standardmäßig wird die UTF-8 Kodierung verwendet</title>

        <para>
            Standardmäßig verwendet Zend Framework <acronym>UTF-8</acronym> als seine
            Standardkodierung, und speziell in diesem Fall, macht das
            <classname>Zend_View</classname> genauso. Die Zeichenkodierung kann im View Objekt
            selbst auf etwas anderes gesetzt werden indem die Methode
            <methodname>setEncoding()</methodname> verwendet wird (oder der Parameter
            <varname>encoding</varname> bei der Instanzierung angegeben wird). Trotzdem, da
            <classname>Zend_View_Interface</classname> keine Zugriffsmethoden für die Kodierung
            anbietet ist es möglich dass, wenn man eine eigene View Implementation verwendet, man
            keine <methodname>getEncoding()</methodname> Methode hat, welche der View Helfer intern
            für die Erkennung des Zeichensets verwendet in das kodiert werden soll.
        </para>

        <para>
            Wenn man <acronym>UTF-8</acronym> in solch einer Situation nicht verwenden will, muss
            man in der eigenen View Implementation eine <methodname>getEncoding()</methodname>
            Methode implementieren.
        </para>
    </note>

    <example id="zend.view.helpers.initial.headstyle.basicusage">
        <title>Grundsätzliche Verwendung des HeadStyle Helfers</title>

        <para>
            Ein neues Style Tag kann jederzeit spezifiziert werden:
        </para>

        <programlisting language="php"><![CDATA[
// Stile hinzufügen
$this->headStyle()->appendStyle($styles);
]]></programlisting>

        <para>
            Die Reihenfolge ist in <acronym>CSS</acronym> sehr wichtig; es könnte sein das man
            sichergestellen muß das Deklarationen in einer speziellen Reihenfolge geladen werden
            wegen der Reihenfolge der Kaskade; die verschiedenen append, prepend und offsetSet
            Direktiven können für diesen Zweck verwendet werden:
        </para>

        <programlisting language="php"><![CDATA[
// Styles in Reihenfolge bringen

// Ein spezielles Offset platzieren:
$this->headStyle()->offsetSetStyle(100, $customStyles);

// Am Ende platzieren:
$this->headStyle()->appendStyle($finalStyles);

// Am Anfang platzieren:
$this->headStyle()->prependStyle($firstStyles);
]]></programlisting>

        <para>
            Wenn man damit fertig ist und alle Style Deklarationen im Layout Skript ausgegeben
            werden können kann der Helfer einfach wiederholt werden:
        </para>

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

    <example id="zend.view.helpers.initial.headstyle.capture">
        <title>Den HeadStyle Helfer verwenden um Style Deklarationen zu Erfassen</title>

        <para>
            Hier und da müssen <acronym>CSS</acronym> Style Deklarationen programmtechnisch erstellt
            werden. Wärend String Kopplungen, HereDocs und ähnliches verwendet werden könnte, ist es
            oft einfacher das durch erstellen der Styles und deren Einfügung in
            <acronym>PHP</acronym> Tags zu machen. <classname>HeadStyle</classname> lässt das zu
            indem es in den Stack erfasst wird:
        </para>

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

        <para>
            Die folgenden Annahmen werden gemacht:
        </para>

        <itemizedlist>
            <listitem>
                <para>
                    Die Style Deklarationen werden dem Stack angefügt. Wenn Sie den Stack ersetzen
                    sollen oder an den Anfang hinzugefügt werden sollten muß 'SET' oder 'PREPEND'
                    als erstes Argument an <methodname>captureStart()</methodname> übergeben werden
                </para>
            </listitem>

            <listitem>
                <para>
                    Wenn zusätzliche Attribute für das <emphasis>&lt;style&gt;</emphasis> Tag
                    spezifiziert werden sollen, dann müssen diese in einem Array als zweites
                    Argument an <methodname>captureStart()</methodname> übergeben werden.
                </para>
            </listitem>
        </itemizedlist>
    </example>
</sect3>
