2009-12-09 79 views
0

我正在將我的網站從一些舊的意大利麪條代碼升級到一些漂亮,乾淨的自定義MVC結構(並在此過程中獲得樂趣)。MVC功能 - 在視圖中可以嗎?

在我的頁面上顯示博客列表,我有一個函數可以幫助我爲一個鏈接動態創建HREF - 通過$ _GET跟蹤應用過濾器...很難解釋......但這裏是:

/* APPLY BROWSE CONTROLS/FILTERS 
| this function reads current $_GET values for controlling the feed filters, 
| and replaces the $value with the desired new $value 
*/ 
function browse_controls($key,$value=null,$ret='url') { 

    // find current control settings 
    $browse_controls = array(); 
    if(array_key_exists('browse',$_GET)) { $browse_controls['browse'] = $_GET['browse']; } 
    if(array_key_exists('display',$_GET)) { $browse_controls['display'] = $_GET['display']; } 
    if(array_key_exists('q',$_GET)) { $browse_controls['q'] = $_GET['q']; } 

    // replace desired setting 
    if($value) { 
     $browse_controls[$key] = $value; 
    }else{ 
     unset($browse_controls[$key]); 
    } 

    // build url 
    $url = ABS_DOMAIN . 'sale/'; 
    if(!empty($_GET['cat'])) { $url .= $_GET['cat'] . '/';} 
    if(!empty($_GET['sub'])) { $url .= $_GET['sub'] . '/';} 
    $url .= '?' . http_build_query($browse_controls); 
    return $url; 
} 

我可以簡單地調用此查詢:

<a href='<?php echo browse_controls('browse',$prev_page); ?>' class="crumb">Previous Page</a> 

我怎樣才能做到這一點同樣與MVC結構,呈現和邏輯的完全分離。我的模板中是否允許使用函數?

幫助!

回答

1

我不確定你的特定框架,但是在Ruby on Rails和ASP.NET MVC中,這種東西是幫助類。他們是UI的關注點。所以現在邏輯在這裏。只需格式化,轉換,構建HTML。你可以把它們放在模板附近,或者給它們單獨的目錄。

我可以推薦的是檢查與您的框架綁定的示例。他們通常對框架有很好的瞭解。

+0

嗯,這很酷,我還沒有聽說過助手類之前...演示文稿課叫他們?什麼叫他們? – johnnietheblack 2009-12-09 01:31:44

+0

他們被稱爲模板 – 2009-12-09 01:37:40

2

我用下面的測試:是代碼我很想在「展示空間」決定什麼呈現,或如何呈現它來寫?如果答案是什麼,那麼感覺更像業務邏輯,可能屬於模板之外。如果它是如何來呈現它,那麼它屬於模板(或相關的支持函數)。

例如,假設您爲某些用戶提供10%的折扣。計算折扣前後的具體價格顯然是業務邏輯。測試是否有折扣,然後以紅色顯示它是表示邏輯。

當然,規則總是有例外,但這些應該被認可,您應該在註釋中專門說明爲什麼您是例外。

+0

那裏甜蜜的好邏輯......你認爲哪個應用於動態構建href的html?它不知何故似乎,但什麼和如何對我..哈哈 – johnnietheblack 2009-12-09 01:32:33

+0

我所有的對象都有一個url()方法,返回該對象的規範URL。我從模板中調用它沒有問題。但它只返回* URL,而不是完全格式化的A標籤。 – 2009-12-09 16:36:38

相關問題