2011-03-18 30 views
8

Vì vậy, tôi có một số thẻ meta mặc định trên bộ layout.phtml sử dụngLàm thế nào để thay đổi các thẻ meta trong cách bố trí khung zend

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

và được lặp lại ở tiêu đề layout.phtml của

Câu hỏi của tôi là: Làm thế nào Tôi thay đổi các thẻ meta mặc định từ tệp xem sao cho chúng được thay thế?

tôi đã cố gắng sử dụng:

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

Thay vì thay thế các thẻ meta mặc định cũ, nó sẽ tạo ra một thẻ meta hoàn toàn mới. Làm thế nào tôi có thể thay thế chúng?

Trả lời

10

Tôi khuyên bạn nên đặt biến chế độ xem cho từ khóa. Ví dụ, trong bootstrap.php bạn bạn có thể định nghĩa một từ khoá mặc định như sau:

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

Trong bố trí.phtml bạn sẽ có sau đó:

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

Cuối cùng, trong quan điểm của bạn (hoặc hành động) bạn có thể thay đổi các từ khóa meta chỉ đơn giản bằng cách thay đổi các từ khóa xem biến:

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

Tôi đã thử làm điều đó nhưng sau đó nó trả về lỗi: Lỗi nghiêm trọng: Ngoại lệ không được phép 'Zend_Application_Bootstrap_Exception' với thông báo 'Kết hợp tài nguyên' xem "không tìm thấy 'và khi tôi thêm resources.view [] =" "vào application.ini, trợ giúp xem của tôi đột nhiên ngừng hoạt động –

+0

Bạn khởi động như thế nào? Có khác gì ở zend chính thức [hướng dẫn bắt đầu nhanh] (http://framework.zend.com/manual/en/learning.quickstart.create-layout.html) không? – Marcin

14

tôi chỉ thử nghiệm này, và setName() nên làm việc:

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

Kết quả trong:

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

Trong khi:

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

Kết quả trong:

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

nó dường như không làm việc .... setName đầu tiên của tôi đã được thiết lập trong cách bố trí và nó có nghĩa là một thẻ meta mặc định cho tất cả các trang ... setname khác được đặt trong tệp xem nhưng nó không ghi đè lên thí điểm –

+0

@kamikaze, khi gọi setName() bên trong bố cục của bạn, hãy chắc chắn rằng bạn làm điều đó trước khi actua lly echo'ing nó. Khái niệm trình giữ chỗ không hoạt động trong bố cục: nó hoạt động từ các khung nhìn. –

+0

yea tôi đã làm và khi tôi làm điều đó các setname trong xem không thay thế một từ bố trí ... là có một cách tốt hơn để thiết lập thẻ meta mặc định khác hơn này? –

1

từ khóa và mô tả tạo không có bộ điều khiển/hành động

đăng ký 2 plugin trong bootstrap

 
    // 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()); 

Plugin Meta có thể trông giống như:

 
    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 sẽ hơn:

 
      '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', 

hơn bạn có thể gọi đơn giản (từ bố cục/view) print $ this-> pageHeader;

1

Đây là những gì làm việc cho tôi. Trong tệp bố cục, bạn phải đảm bảo rằng các thẻ meta được lặp lại. Nó trống ở giai đoạn nhưng bạn sẽ đánh dấu nơi các thẻ meta sẽ được xuất ra. Điều bất lợi duy nhất với phương pháp này là dường như không có cách nào để có thẻ meta mặc định, do đó bạn sẽ phải thêm thẻ meta vào mỗi tệp xem.

Trong file layout

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

Trong giao diện .phtml nộp

$this->headMeta("test description text", "description"); 
Các vấn đề liên quan