<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 24868 -->
<sect3 id="zend.view.helpers.initial.headmeta">
    <title>HeadMeta ヘルパー</title>

    <para>
        <acronym>HTML</acronym> の <emphasis>&lt;meta&gt;</emphasis> 要素は、
        <acronym>HTML</acronym> ドキュメントに関するメタ情報を扱います。
        たとえばキーワードや文字セット、キャッシュ方式などです。
        Meta タグには 'http-equiv' 形式と 'name' 形式があり、
        'content' 属性が必須となります。また、
        'lang' あるいは 'scheme' のいずれかの属性を含むことができます。
    </para>

    <para>
        <classname>HeadMeta</classname> ヘルパーは、
        meta タグを設定したり追加したりするための次のようなメソッドを提供します。
    </para>

    <itemizedlist>
        <listitem>
            <para>
                <command>appendName($keyValue, $content, $conditionalName)</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>offsetSetName($index, $keyValue, $content, $conditionalName)</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>prependName($keyValue, $content, $conditionalName)</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>setName($keyValue, $content, $modifiers)</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>appendHttpEquiv($keyValue, $content, $conditionalHttpEquiv)</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>offsetSetHttpEquiv($index, $keyValue, $content, $conditionalHttpEquiv)</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>prependHttpEquiv($keyValue, $content, $conditionalHttpEquiv)</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>setHttpEquiv($keyValue, $content, $modifiers)</command>
            </para>
        </listitem>
    </itemizedlist>

     <para>
        XHTML1_RDFA doctype では、<link
            linkend="zend.view.helpers.initial.doctype">Doctype ヘルパー</link>
        で設定される以下のメソッドもサポートされます。
    </para>

    <itemizedlist>
        <listitem>
            <para>
                <command>appendProperty($property, $content, $modifiers)</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>offsetSetProperty($index, $property, $content, $modifiers)</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>prependProperty($property, $content, $modifiers)</command>
            </para>
        </listitem>

        <listitem>
            <para>
                <command>setProperty($property, $content, $modifiers)</command>
            </para>
        </listitem>
    </itemizedlist>

    <para>
        <varname>$keyValue</varname> は 'name' あるいは 'http-equiv'
        キーの値を定義します。<varname>$content</varname> は
        'content' キーの値を定義し、<varname>$modifiers</varname>
        はオプションで連想配列を指定します。この配列には
        'lang' や 'scheme' といったキーが含まれます。
    </para>

    <para>
        ヘルパーメソッド <methodname>headMeta()</methodname> で meta タグを設定することもできます。
        このメソッドのシグネチャは <command>headMeta($content,
            $keyValue, $keyType = 'name', $modifiers = array(), $placement =
            'APPEND')</command>
        です。<varname>$keyValue</varname> には、
        <varname>$keyType</varname> ('name' あるいは 'http-equiv')
        で指定したキーのコンテンツを指定します。
        もし doctype が XHTML1_RDFA に設定されていたら、<varname>$keyType</varname>
        は 'property' としても指定されるかもしれません。
        <varname>$placement</varname> は 'SET' (既存の値をすべて上書きする)
        か 'APPEND' (スタックの最後に追加する)、
        あるいは 'PREPEND' (スタックの先頭に追加する) となります。
    </para>

    <para>
        <classname>HeadMeta</classname> は <methodname>append()</methodname> や
        <methodname>offsetSet()</methodname>、<methodname>prepend()</methodname>、そして <methodname>set()</methodname>
        をそれぞれオーバーライドして、上にあげた特別なメソッドを使用させるようにします。
        内部的には、各項目を <property>stdClass</property> のトークンとして保管し、
        あとで <methodname>itemToString()</methodname> メソッドでシリアライズします。
        これはスタック内の項目についてチェックを行い、
        オプションでそれを修正したものを返します。
    </para>

    <para>
        <classname>HeadMeta</classname> ヘルパーは、
        <link linkend="zend.view.helpers.initial.placeholder">Placeholder
        ヘルパー</link> の具象実装です。
    </para>

    <example id="zend.view.helpers.initial.headmeta.basicusage">
        <title>HeadMeta ヘルパーの基本的な使用法</title>

        <para>
            meta タグは、いつでも好きなときに指定できます。
            一般的には、クライアント側でのキャッシュの制御方法や
            SEO 用キーワードなどを指定します。
        </para>

        <para>
            たとえば、SEO 用のキーワードを指定したい場合は
            'keywords' という名前の meta タグを作成します。
            そして、そのページに関連するキーワードを値として指定します。
        </para>

        <programlisting language="php"><![CDATA[
// meta タグでキーワードを指定します
$this->headMeta()->appendName('keywords', 'framework, PHP, productivity');
]]></programlisting>

        <para>
            クライアント側でのキャッシュの制御方法を指定したい場合は、
            http-equiv タグを設定してルールを指定します。
        </para>

        <programlisting language="php"><![CDATA[
// クライアント側でのキャッシュを無効にします
$this->headMeta()->appendHttpEquiv('expires',
                                   'Wed, 26 Feb 1997 08:21:57 GMT')
                 ->appendHttpEquiv('pragma', 'no-cache')
                 ->appendHttpEquiv('Cache-Control', 'no-cache');
]]></programlisting>

        <para>
            meta タグの使い方としてもうひとつよくあるのは、
            コンテンツタイプや文字セット、言語を指定するものです。
        </para>

        <programlisting language="php"><![CDATA[
// コンテンツタイプと文字セットを設定します
$this->headMeta()->appendHttpEquiv('Content-Type',
                                   'text/html; charset=UTF-8')
                 ->appendHttpEquiv('Content-Language', 'en-US');
]]></programlisting>

         <para>
            もし <acronym>HTML</acronym>5 文書を提供しているなら、
            このように文字セットを提示すべきです。:
        </para>

        <programlisting language="php"><![CDATA[
// HTML5 で文字セットを設定します
$this->headMeta()->setCharset('UTF-8'); // <meta charset="UTF-8"> のように見えます
]]></programlisting>

        <para>
            最後の例として、リダイレクトの前に見せるメッセージを
            "meta refresh" で指定するものを示します。
        </para>

        <programlisting language="php"><![CDATA[
// 3 秒後に新しい URL に移動させます
$this->headMeta()->appendHttpEquiv('Refresh',
                                   '3;URL=http://www.some.org/some.html');
]]></programlisting>

        <para>
            レイアウト内で meta タグを指定し終えたら、ヘルパーの内容を出力します。
        </para>

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

    <example id="zend.view.helpers.initial.headmeta.property">
        <title>XHTML1_RDFA doctype を用いた HeadMeta 使用法</title>

        <para>
            <link linkend="zend.view.helpers.initial.doctype">Doctype ヘルパー</link>
            で RDFa doctype を有功にすると、標準的な 'name' や 'http-equiv' に加えて、
            HeadMeta で 'property' 属性が使えるようになります。
            これは Facebook の <ulink url="http://opengraphprotocol.org/">Open Graph プロトコル</ulink>
            で一般的に用いられます。
        </para>

        <para>
            例えば、Open Graph ページのタイトルと型を以下のように指定するかもしれません。
        </para>

        <programlisting language="php"><![CDATA[
$this->doctype(Zend_View_Helper_Doctype::XHTML1_RDFA);
$this->headMeta()->setProperty('og:title', 'my article title');
$this->headMeta()->setProperty('og:type', 'article');
echo $this->headMeta();

//出力です。
//   <meta property="og:title" content="my article title" />
//   <meta property="og:type" content="article" />
]]></programlisting>

    </example>
</sect3>
<!--
vim:se ts=4 sw=4 et:
-->
