2011-03-18 61 views
8

所以我一直在使用如何改變meta標籤Zend框架佈局

$this->headTitle() and $this->headMeta()->appendName() 

上layout.phtml設定一些默認的meta標籤,並在layout.phtml的頭部相呼應

我的問題是:如何做我從視圖文件更改這些默認元標記,以便它們被替換?

我試着使用:

$this->headMeta()->appendName() or setName() 

替換舊的默認meta標籤相反的,它會創建一個全新的meta標籤。我該如何替換它們?

回答

10

我建議設置關鍵字的視圖變量。 例如,在你的bootstrap.php中你可以如下定義一個默認的關鍵字:

protected function _initSetDefaultKeywords() { 
    $view = $this->bootstrap('view')->getResource('view');   
    $view->keywords = 'default keywords'; 
} 

佈局。PHTML你會那麼:

<?php echo $this->headMeta()->appendName('keywords', $this->keywords); ?> 

最後,在意見(或行爲)你可以通過改變簡單地改變超常關鍵字的關鍵字查看變量:

// in an action 
$this->view->keywords = 'new kewords'; 
//or in a view 
<?php $this->keywords = 'new kewords'; ?> 
+0

我試過這樣做,但然後它返回錯誤:致命錯誤:未知的異常'Zend_Application_Bootstrap_Exception'與消息'資源匹配'視圖「未找到」,當我在application.ini中添加resources.view [] =「」,我的視圖助手突然停止工作 – 2011-03-18 17:00:12

+0

你如何引導你的觀點?這與官方的zend [快速入門教程](http://framework.zend.com/manual/en/learning.quickstart.create-layout.html)有何不同? – Marcin 2011-03-18 23:57:48

14

我只是測試這一點,setName()應該工作

<?php $this->headMeta()->setName('keywords', 'test'); ?> 
<?php $this->headMeta()->setName('keywords', 'test'); ?> 

結果:

<meta name="keywords" content="another test" > 

雖然:

<?php $this->headMeta()->setName('keywords', 'test'); ?> 
<?php $this->headMeta()->appendName('keywords', 'another test'); ?> 

結果:

<meta name="keywords" content="test" > 
<meta name="keywords" content="another test" > 
+0

它似乎沒有工作....我第一次的setName在佈局設置它的意思是所有頁面的默認元標記...另一個setname在視圖文件中設置,但它不會覆蓋 – 2011-03-18 08:52:36

+0

@ kamikaze pilot,當您在佈局中調用setName()時,確保您在實施之前做簡單地迴應它。佔位符概念在佈局中不起作用:它從視圖開始工作。 – 2011-03-18 08:57:36

+0

是的,我做了,當我這樣做,在視圖中的setname不會取代佈局...有沒有更好的方法來設置默認元標籤以外的呢? – 2011-03-18 09:07:09

1

關鍵字和描述生成無需使用控制器/動作

寄存器2插件在自舉

 
    // register navigation, $view->navigation()->setContainer(new Zend_Navigation($navigationArray)); 
    $controller = Zend_Controller_Front::getInstance(); 
    $controller->registerPlugin(new App_Controller_Plugin_PrepareNavigation()); 

    $controller->registerPlugin(new App_Controller_Plugin_SetMeta()); 

元插件可能看起來像:

 
    public function routeShutdown(Zend_Controller_Request_Abstract $request) 
    { 
     $view = Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer')->view; 
     $activePage = $view->navigation()->findOneBy('active', true); 

     $view->headTitle($activePage->title); 
     $view->headMeta()->appendName('keywords', $activePage->keywords); 
     $view->headMeta()->appendName('description', $activePage->description); 
     $view->pageHeader = $activePage->pageHeader; 
    } 

navigationArray會比:

 
      'pages' => array(
      array('label' => 'introduction', 
        'controller' => 'controller', 
        'action' => 'introduction', 
        'route' => 'controlleraction', 
        'pageHeader' => 'h1 or something', 
        'title' => 'used as meta title' 
        'keywords' => 'meta keywords' 
        'description' => 'meta desc', 

比你可以簡單的調用(從佈局/視圖)打印$這個 - > pageHeader;

1

下面是我工作。在佈局文件中,您必須確保元標記被回顯。它在階段是空的,但你會標記元標記將被輸出的位置。這種方法唯一的缺點是,似乎沒有一種方法來獲得默認的元標記,因此您必須在每個視圖文件中添加元標記。

在佈局文件

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

在視圖一個.phtml文件

$this->headMeta("test description text", "description");