2010-04-27 39 views
8

Tôi tự hỏi liệu có ai có lời khuyên/kinh nghiệm tốt về việc thiết lập tiêu đề meta động trong Symfony không?Tiêu đề trang động trong Symfony 1.4

Hiện nay, giải pháp tôi biết sẽ sử dụng đoạn mã sau để thiết lập một tiêu đề individidually trong mỗi hành động:

$this->getResponse()->setTitle('This is a title'); 

Bởi vì tôi cũng cần danh hiệu dịch, tôi có thể gọi helper i18n trong hành động để đưa chúng vào các XLIFF được trích xuất. Không có công cụ SEO đặc biệt cần thiết, chỉ cần một tiêu đề sạch sẽ.

Tuy nhiên, điều trên không yêu cầu tôi phải tinh chỉnh từng hành động riêng lẻ. View.yml không phù hợp vì tôi thường xuyên có nhiều hành động/mẫu cho mỗi mô-đun.

Có ai biết cách tiếp cận tốt hơn trong Symfony hay đây thực sự là cách phù hợp/duy nhất để đi?

Cảm ơn bạn.

Trả lời

5

Tôi nghĩ rằng viết tiêu đề riêng biệt trong mọi hành động là OK. Nhưng nếu bạn muốn thêm một số tiền tố chung, bạn có thể sử dụng một số thứ như thế này trong bố cục:

<title>SITE NAME — <?= $sf_response->getTitle() ?></title> 

Bạn cũng có thể thao tác tiêu đề cho mỗi mô-đun bằng phương thức preExecute().

+2

Sử dụng phương pháp preExecute không phải là một cách tốt đẹp để làm việc đó vì nó sẽ buộc logic hữu đối với con xe đẩy. Nó thực sự nên được xem bởi vì nó là một phần của lớp trình bày, không phải là bộ điều khiển. – phidah

25

Bạn nên sử dụng slots.

Trong bạn bố trí <head> tag:

<title><?php echo get_slot('page_title', __('Default page title here')) ?></title> 

Và trong một action template:

<?php slot('page_title', __('Action page title goes here')) ?> 
3

Tôi cá nhân như sử dụng các tập tin yml, nó tách 'cấu hình' từ mã

Để đối phó với tiêu đề động, tôi thực hiện theo:

trong ứng dụng/f rontend/config/app.yml

all: 
    title_separator: ' - ' 
    title_default: 'TITLE' 

trong apps/frontend/config/view.yml

default: 
    metas: 
    title: %APP_TITLE_DEFAULT% 

Nếu bạn cần phải có dữ liệu từ hành động của bạn đưa vào tiêu đề, tạo file lib/myActions .class.php với nội dung sau:

<?php 

class myActions extends sfActions 
{ 

    protected function setTitle($string) 
    { 
     $this->getResponse()->setTitle($string . sfConfig::get('app_title_separator') . sfConfig::get('app_title_default')); 
    } 

} 

?> 

(lưu ý: sửa đổi điều này theo ý muốn, ví dụ: đặt tiêu đề mặc định ở phía trước)

Sau đó thay đổi action.class của bạn.php để mở rộng myActions thay vì sfActions

class memberActions extends myActions 

và bất cứ khi nào bạn cần phải thay đổi tiêu đề, chỉ cần gọi này trong hành động của bạn

$this->setTitle('This is how I roll'); 

và bạn sẽ nhận được danh hiệu sau (nếu sử dụng cấu hình tương tự như tôi đã làm ở trên):

This is how I roll - TITLE 
1
$i18n = $this->getContext()->getI18N(); 
$this->getResponse()->setTitle('Your title' . ' | ' . $i18n->__('your module name')); 
Các vấn đề liên quan