Closed nimoc closed 9 years ago
A small question: where is your data? will it in something like $data
? or you want to pass all global variable into your .tpl file?
Thank for your reply. I need incloude .tpl file,also use $data render .tpl file.
Just like EJS <% include header.ejs %>
My colleague PHP code:
$this->data = array(
'header'=>template('www/include/header',array('__APP__'=>__APP__,'STATIC_PATH'=>STATIC_PATH),true),
'footer'=>template('www/include/footer',array('__APP__'=>__APP__,'STATIC_PATH'=>STATIC_PATH),true),
'__APP__'=>__APP__,
'STATIC_PATH'=>STATIC_PATH
);
In the MVC,I want front-end developers to control the view。 I'm sorry for the Chinese style English (_^_^)
Are you in Taiwan?
Here is a small example to try lightncandy + include other .tpl file in PHP but without any MVC:
<?php
require('src/lightncandy.php');
function lightncandy_include($file) {
$template = file_get_contents($file);
$phpStr = LightnCandy::compile($template, array('flags' => LightnCandy::FLAG_HANDLEBARSJS));
$renderer = LightnCandy::prepare($phpStr);
echo $renderer($GLOBALS);
}
?>
Then you can do this:
This is a test ....
<?php lightncandy_include('test.tpl'); ?>
other lines
....
<?php lightncandy_include('another.tpl'); ?>
....
嗯我不確定你舉的例子是哪套MVC framework, 你可能要請同事把View 的plugin套好....我猜測應該是把 $this->template 這個function 作出來就可以了.
非常感谢你的帮助和提供如此优秀的lightncandy,已经回复我的同事。
真的真的很需要lightncandy,最近我们在前后端联调时候遇到前端开发完成的HTML交付时逻辑复杂后端很难像前端一样了解设计需求导致 view 不是按照预期输出。
但我没有能力像阿里那样做到真正的前后端分离,所以我想在 node的前端开发环境中使用 handlebars 做模板引擎的解析,让后端用lightncandy。这样达到前端可以在node中开发完全兼容后端的 view 模板。后端只需要从 C 输出对象到 V。
遇到 lightncandy 真的很激动,很高兴遇到你和lightncandy。
如上思路,我没有和同事一起实践过。我也有一些疑惑,耽误你一些时间希望你能指点我一下。
$.page({
url:'/user/', // 浏览器 url
tpl: '/view/user.tpl', // 模板服务器物理位置
data: {
user: {
name: 'nimo',
id: 2323,
avatar: 'http://dummyimage.com/600x400/000/fff'
}
},
helper:{
checked: function (target, value){
if (target === value) {
return 'checked';
}
}
}
}).doc(function () {/*
// 给后端的 view 接口文档
数据源:
user: {
name: 'nimo',
id: 2323,
avatar: 'http://dummyimage.com/600x400/000/fff'
}
}
模板路径:
/view/user.tpl
注册函数
{{helper}}
checked: function (target, value){
if (target === value) {
return 'checked';
}
}
*/})
以上是前端开发环境的页面配置代码,模拟数据源和指定模板路径进行渲染,最终 www.domain.com/user/
会根据模板内容渲染页面。
这是在 node 中实现的。我想前端实现完这个模拟后直接交付文档给后端。
/view/user.tpl
是前后公用的模板文件。前端用来做测试环境的数据模拟,后端用来做真实环境的view 模板。
后端根据前端约定的JSON数据源从C 输出数据到 V 即可。
_利用轻逻辑的 lightncandy _ 让后端只需要提供数据接口,mustache 语法又是前端非常熟悉的语法。前端也能实现任何HTML输出。
我的疑惑是,这中间会有哪些坑我并不知道。因为我对后端开发并不是完全了解。希望 zordius 能利用你的开发经验和后端知识指点一二。
https://github.com/nodeajax/nodeajax/issues/1
目前模板引擎的前后端兼容和数据源模拟只支持轻逻辑的 lightncandy,先实践一段时间后再考虑如何兼容更多的模板引擎。模板引擎的兼容不像 AJAX 模拟 只需要约定基本规则就可以实现,需要后端开发框架对前端选定的模板引擎的支持。考虑好如何让各种后端框架无痛配合。2015-01-21 23:59:57
最近几天和后端同事的沟通和思考,我发现前端控制 view 的方式还是轻逻辑的lightncandy最适合。
之前准备也支持 smarty 。但 node 并没有合适的 smarty 语法支持,并听后端同事说 smarty 是会直接转换成PHP执行,担心模板有太多逻辑代码和交付给后端后因为实现差异导致出错。
上面的node代碼確實可以轉移到PHP中實現, 我在這邊只列一下在PHP當中可能要實作的部分與可能碰到的問題:
太好了
index.php
这种关于helper:
我想约定一套常用的 helper 比如
Handlebars.registerHelper('equal', function (target, value, ok, fail) {
if (target == value) {
return ok;
} else {
return fail;
}
})
利用 equal
完成类似如:
[1,2,3,4,5,6,7,8]
{{#list}}
<li {{equal . 5 "style=color:red;" "style=color:blue;"}} >{{.}}</li>
{{/list}}
的工作。
并让后端每次的 $data
都带上 url_pathname (/user/index/)这种常用属性,并约定数据源减少一些坑。
Hi ~ I'm F2E,be unfamiliar with PHP。 How use lightncandy incloude template file ? I need you help, Thank you。