我认为这应该有一个非常简单的解释,但我还在学习无胖框架(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
行,而不会在内容框中引发错误。
有没有办法禁用页面刷新?它是否被刷新,因为我的链接被浏览器解释为单独的页面?谢谢你的帮助!
答案 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>
请记住文件夹views
和layouts
应位于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 库。你可以在这里阅读:
答案 2 :(得分:0)
创建自己的View实例并使用类似于PHPTal Filters的功能扩展main可能也不错。然后你可以在postFilter中的preFilter和Footer中设置Header并扩展render()函数。扩展的render()将为您呈现所有内容,包括页眉,页脚和正文内容。
我没有任何针对FatFree View的内容,但会建议PHPTal作为模板引擎 - 这里只是实现https://github.com/creoLIFE/FatFree-PHPTAL,包括从单独文件提供的页眉/页脚。