Vom: 06.08.2012

Pimcore View Helper für Conditional Comments um Metatags

View Helper stellen eine sehr praktische Möglichkeit des Zend Frameworks dar, sich den Umgang mit HTML erheblich zu erleichtern und viele Ding auf die Orte zu konzentrieren, an denen sie tatsächlich passieren. Tags in den zu definieren, nur dort wo man sie auch tatsächlich braucht, ist zB mit dem headMeta View Helper ein Kinderspiel:

$this->view->headMeta()->setName("keywords", "blah, fasel");

Im Layout lässt sich das nun ausgeben:

<head>
<?php echo $this->headMeta().PHP_EOL ?>
// ...

Einziges Problem: die Meta-Tags lassen sich, in der Version des Zendframeworks die gegenwärtig mit Pimcore ausgeliefert wird, nicht mit Conditional Comments versehen. Wir implementieren hier gerade ein gekauftes Seitentemplate, wo genau so ein Conditional Comment für Metatags gefragt ist:

<!--[if lte IE 9 ]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><![endif]-->

In der aktuellen Version des Zend Frameworks ist das gefixt, und bis die in Pimcore Einzug hält, muss ein eigener ViewHelper her. Schritt 1: Ein Verzeichnis für die View Helper anlegen. Sinnvollerweise /website/views/helpers Schritt 2: Dem Zend Framework den Pfad zu seinen eigenen View Helpern mitteilen, zum Beispiel in /website/lib/Website/Controller/Action:

$this->view->addHelperPath(PIMCORE_WEBSITE_PATH . '/views/helpers/', 'Website_Helper');

Schritt 3: Den Viewhelper ConditionalHeadMeta.php anlegen:

class Website_Helper_ConditionalHeadMeta extends Zend_View_Helper_HeadMeta {

  public function conditionalHeadMeta($content = null, $keyValue = null, $keyType = 'name', $modifiers = array(), $placement = Zend_View_Helper_Placeholder_Container_Abstract::APPEND) {
    return parent::headMeta($content, $keyValue, $keyType, $modifiers, $placement);
  }

  public function itemToString(stdClass $item) {
    $html = parent::itemToString($item);
    if (isset($item->modifiers['conditional']) && !empty($item->modifiers['conditional']) && is_string($item->modifiers['conditional'])) {
        $html = '';
    }
    return $html;
  }

}

Nun kann man mit dem neuen ViewHelper das gewünschte Resultat erzielen:

$this->view->conditionalHeadMeta()->appendName("X-UA-Compatible", "IE=edge,chrome=1", array("conditional" => "lte IE 9"));