在Fat-Free Framework中加载布局一次

时间:2015-08-30 21:31:34

标签: php html fat-free-framework

我认为这应该有一个非常简单的解释,但我还在学习无胖框架(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->set调用之后或在index.php文件末尾的$f3->run();之后,整个页面在路由更改时刷新。我无法在路由代码之前调用上面的echo行,而不会在内容框中引发错误。

有没有办法禁用页面刷新?它是否被刷新,因为我的链接被浏览器解释为单独的页面?谢谢你的帮助!

3 个答案:

答案 0 :(得分: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')访问请求的参数,或者您可以执行此操作。

$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');
      }
    );

这应该有效

答案 1 :(得分:1)

如果您只想更新网页的一部分,而不进行完全刷新,则需要使用 AJAX。

首先阅读以下内容: https://fatfreeframework.com/3.6/routing-engine#AJAXandSynchronousRequests

您需要在前端使用 javascript 才能完成这项工作。如果您不知道如何在 javascript 中编写代码,那么您可以从阅读以下内容开始:

https://www.w3schools.com/js/js_ajax_intro.asp

您可能会发现使用 Jquery 更容易,这是一个非常流行的 JavaScript 库。你可以在这里阅读:

https://www.w3schools.com/jquery/jquery_ref_ajax.asp

答案 2 :(得分:0)

创建自己的View实例并使用类似于PHPTal Filters的功能扩展main可能也不错。然后你可以在postFilter中的preFilter和Footer中设置Header并扩展render()函数。扩展的render()将为您呈现所有内容,包括页眉,页脚和正文内容。

我没有任何针对FatFree View的内容,但会建议PHPTal作为模板引擎 - 这里只是实现https://github.com/creoLIFE/FatFree-PHPTAL,包括从单独文件提供的页眉/页脚。