# HeadMeta The HTML `` 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 following methods are also supported with `XHTML1_RDFA` doctype set with the [Doctype helper](doctype.md). - `appendProperty($property, $content, $modifiers)` - `offsetSetProperty($index, $property, $content, $modifiers)` - `prependProperty($property, $content, $modifiers)` - `setProperty($property, $content, $modifiers)` 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`. `$keyType` may also be specified as `property` if the doctype has been set to `XHTML1_RDFA`. `$placement` can be `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](placeholder.md). ## 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: ```php // 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: ```php // 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: ```php // 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: ```php // setting character set in HTML5 $this->headMeta()->setCharset('UTF-8'); // Will look like ``` As a final example, an easy way to display a transitional message before a redirect is using a "meta refresh": ```php // 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, echo the helper: ```php headMeta() ?> ``` ## Usage with XHTML1\_RDFA doctype Enabling the RDFa doctype with the [Doctype helper](doctype.md) enables the use of the `property` attribute (in addition to the standard `name` and `http-equiv`) with `HeadMeta`. This is commonly used with the Facebook [Open Graph Protocol](http://opengraphprotocol.org/). For instance, you may specify an open graph page title and type as follows: ```php $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(); // output is: // // ```