2015-08-30 85 views
1

我認爲這應該有一個非常簡單的解釋,但我仍然在學習無脂框架(F3):如何僅渲染頁眉和頁腳一次並切換出內容代碼爲選定的路線?我有這樣的代碼:在無脂框架中加載佈局

$f3->route('GET /', 
    function($f3) { 
    $f3->set('content','views/welcome.htm'); 
    $f3->set('page_head', 'Welcome'); 
    } 
); 

如果我加入這一行:

echo View::instance()->render('layouts/header+footer.htm'); 

無論是在路線或$f3->run();後index.php文件的末尾f3->set電話後,整個頁面刷新路線變化。我不能在路由代碼之前調用上面的echo行,而不會在內容框中引發錯誤。

有什麼辦法可以禁用頁面刷新?它是否被刷新,因爲我的鏈接被瀏覽器解釋爲單獨的頁面?謝謝你的幫助!

回答

2

你的問題有點朦朧。但我會盡力以我理解的方式回答。 首先你index.php

$f3->route('GET /', 
    function($f3) { 
    $f3->set('content','views/welcome.htm'); 
    $f3->set('page_head', 'Welcome'); 
    echo Template::instance()->render('layouts/header+footer.htm'); 
    } 
); 
$f3->run(); 

在你header+footer.htm

<!DOCTYPE html> 
<html> 
<head lang="en"> 
    <meta charset="UTF-8"> 
    <title>{{@page_head}}</title> 
</head> 
<body> 
<include href="{{@content}}"/> 
</body> 
</html> 

views/welcome.htm可以包含任何數據。

<h1>Welcome</h1> 
<p>You have arrived to the welcome page</p> 

請記住文件夾viewslayouts應在UI文件夾

$f3->set('UI','ui/'); 

您的評論: 您可以從$f3->get('PARAMS')訪問請求params中,你可以做到這一點。

$f3->route('GET /@page', 
     function($f3,$params) { 
     $page = $params['page']; 
     $f3->set('content','views/'. $page .'.htm'); 
     $f3->set('page_head', 'Welcome'); 
     echo Template::instance()->render('layouts/header+footer.htm'); 
     } 
    ); 

這應該工作

+0

所以我曾經有。問題是,假設我有4條其他路線,並且它們在導航中鏈接,任何時候我點擊不同的路線,比如說一個URL爲「/ information」,整個頁面刷新,包括導航。當'f3-> set('content','views/information.htm')'被切換出來時,導航是否只能加載一次?導航能否在路線上保持不變? – ArtlyticalMedia

+0

我的改進答案是否對此進行排序? 如果你想要一個單一的頁面應用程序,你可能必須使用像AngularJs這樣的javascript框架:這裏有一個例子https://scotch.io/tutorials/single-page-apps-with-angularjs-routing-and-templating –

0

也許會不差地創建自己的視圖的實例,並延長主用類似PHPTAL過濾器的功能。然後,您可以在postFilter中的preFilter和Footer中設置Header,並擴展render()函數。擴展的render()將爲您呈現所有內容,包括頁眉,頁腳和正文內容。

我沒有親自反對FatFree View的任何內容,但會建議PHPTal作爲模板引擎 - 這裏簡單的實現https://github.com/creoLIFE/FatFree-PHPTAL,包括從單獨文件提供的Header/Footer。