# HeadMeta Helper

The HTML <meta> element is used to provide meta information about your HTML document -- typically keywords, document character set, caching pragmas, etc. Meta tags may be either of the 'http-equiv' or 'name' types, must contain a 'content' attribute, and can also have either of the 'lang' or 'scheme' modifier attributes.

The `HeadMeta` helper supports the following methods for setting and adding meta tags:

- `appendName($keyValue, $content, $conditionalName)`

- `offsetSetName($index, $keyValue, $content, $conditionalName)`

- `prependName($keyValue, $content, $conditionalName)`

- `setName($keyValue, $content, $modifiers)`

- `appendHttpEquiv($keyValue, $content, $conditionalHttpEquiv)`

- `offsetSetHttpEquiv($index, $keyValue, $content, $conditionalHttpEquiv)`

- `prependHttpEquiv($keyValue, $content, $conditionalHttpEquiv)`

- `setHttpEquiv($keyValue, $content, $modifiers)`

- `setCharset($charset)`

The `$keyValue` item is used to define a value for the 'name' or 'http-equiv' key; `$content` is the value for the 'content' key, and `$modifiers` is an optional associative array that can contain keys for 'lang' and/or 'scheme'.

You may also set meta tags using the `headMeta()` helper method, which has the following signature: `headMeta($content, $keyValue, $keyType = 'name', $modifiers = array(), $placement = 'APPEND')`. `$keyValue` is the content for the key specified in `$keyType`, which should be either 'name' or 'http-equiv'. `$placement` can be either 'SET' (overwrites all previously stored values), 'APPEND' (added to end of stack), or 'PREPEND' (added to top of stack).

`HeadMeta` overrides each of `append()`, `offsetSet()`, `prepend()`, and `set()` to enforce usage of the special methods as listed above. Internally, it stores each item as a stdClass token, which it later serializes using the `itemToString()` method. This allows you to perform checks on the items in the stack, and optionally modify these items by simply modifying the object returned.

The `HeadMeta` helper is a concrete implementation of the Placeholder helper.

## HeadMeta Helper Basic Usage

You may specify a new meta tag at any time. Typically, you will specify client-side caching rules or SEO keywords.

For instance, if you wish to specify SEO keywords, you'd be creating a meta name tag with the name 'keywords' and the content the keywords you wish to associate with your page:

    // setting meta keywords
    $this->headMeta()->appendName('keywords', 'framework, PHP, productivity');

If you wished to set some client-side caching rules, you'd set http-equiv tags with the rules you wish to enforce:

    // disabling client-side cache
    $this->headMeta()->appendHttpEquiv('expires',
                                       'Wed, 26 Feb 1997 08:21:57 GMT')
                     ->appendHttpEquiv('pragma', 'no-cache')
                     ->appendHttpEquiv('Cache-Control', 'no-cache');

Another popular use for meta tags is setting the content type, character set, and language:

    // setting content type and character set
    $this->headMeta()->appendHttpEquiv('Content-Type',
                                       'text/html; charset=UTF-8')
                     ->appendHttpEquiv('Content-Language', 'en-US');

If you are serving an HTML5 document, you should provide the character set like this:

    // setting character set in HTML5
    $this->headMeta()->setCharset('UTF-8'); // Will look like <meta charset="UTF-8">

As a final example, an easy way to display a transitional message before a redirect is using a "meta refresh":

    // setting a meta refresh for 3 seconds to a new url:
    $this->headMeta()->appendHttpEquiv('Refresh',
                                       '3;URL=http://www.some.org/some.html');

When you're ready to place your meta tags in the layout, simply echo the helper:

    <?php echo $this->headMeta() ?>