2011-05-19 75 views
0

我有2個表,pagesettings自定義meta標籤配置

page只是一堆字段,如名稱和slu,,還有3個其他字段用於元標記(標題,關鍵字,描述)並顯示一個cms頁面。

settings有3個領域:default_meta_title,default_meta_keywords,default_meta_description

現在正是我希望做的是在HTML源顯示default_meta_ *標記,如果我在頁面上沒有具體的元從cms頁面設置的信息。

所有的網頁,除了主頁被管理這種方式,所以我想我需要一些代碼添加到layout.php得到這個工作。

所以網頁會顯示我default_meta_ *,因爲我不能設置在CMS pages表。

+0

你能指定你的問題嗎? – Tom 2011-05-19 20:11:03

回答

4

有兩種方法來解決這個問題。

首先是使用sfYaml類更新view.yml與默認元標記(請參閱documentation about view.yml)。之後,如果特定的頁面應該使用其他METAS你可以覆蓋默認與addMeta method of response object

二(如ManseUK建議)是聲明插槽放置這樣的代碼到佈局

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> 
    <?php include_javascripts() ?> 
    <?php include_stylesheets() ?> 
    <?php include_title() ?> 
    <?php if (has_slot('metas')): ?> 
     <?php include_slot('metas') ?> 
    <?php else: ?> 
     <?php include_component('page', 'metas') ?> 
    <?php endif; ?> 

    <link rel="shortcut icon" href="/favicon.ico" /> 
    </head> 
    <body> 

默認METAS將通過pagecomponents呈現。您的模板的頂部(我猜modules/page/templates/showSuccess.php)處代碼

<?php slot('metas') ?> 
    <?php if($page->hasMetas()):?> 
    <!-- code to render nondefault page metas --> 
    <?php echo $page->getMetas(); ?> 
    <?php else: ?> 
    <?php include_component('page', 'metas') ?> 
    <?php endif;?> 
<?php end_slot() ?> 

我認爲你會與真正的代碼,將檢查您的page對象有元標記替換$page->hasMetas()

其實我寧願去進一步和代碼page部件接受參數。在模板代碼看起來像

<?php slot('metas') ?> 
    <?php include_component('page', 'metas', array('metas'=>$page->getMetas())) ?> 
<?php end_slot() ?> 

決定哪些METAS(默認或沒有)應該呈現將於page組件(我假設你可以輕鬆地檢索defaul;從數據庫牛逼的設置)。如果沒有參數傳遞(參見佈局代碼),那麼組件也應該呈現默認元素。

我希望這會有所幫助。

+0

輝煌!像魅力一樣工作,現在在沒有在數據庫中定義元的所有頁面上呈現默認元,並且當數據庫存在於數據庫中時,還在數據庫中顯示元數據。大! – terrid25 2011-05-23 08:36:24

0

你可以使用一個插槽 - 爲您在佈局插槽的存在 - 如果它存在,那麼添加自定義的元字段 - 如果不添加默認的