页:
[1]
2
| dvaknheo | 2006-12-13 01:57 AM |
|
美工最期望的模板phpservertag
程序已经完成,文档还在撰写中。
特性:
现有的框架程序都是以程序员为主
在没用特殊编辑工具的时候 最多只能实现可见结构编辑而非可视化编辑
PhpServerTag 采用在 html 标签里添加特殊属性而不是修改html标签的方法
使得美工不再只见结构不见样式
简单的调用模式只要嵌入 3 行 php 代码
方便的扩展
Demo:
test3.php
[php]
<?php
require_once "phpservertag.inc.php";
pst_outcachestart();
echo'<title>new title</title>';
pst_outcacheend();
$str=pst_template();
if($str){include $str;return;}
?>
<html php:htmlbodywarp="yes" php:headfile="head.inc.php" php:footfile='foot.inc.php'>
<title>justtest</title>
<body>
<div php:for="$i" php:total="2" >
<center php:if="$i < 1">PHPSERVERTAG=\PHPSERVERTAG;</center>
(\$i+1;)current php version \phpversion();
<br php:posttag="<?php echo "done"?>" php:tag="hr">
</div>
</body>
[/php]
如果 test3.cache.php 不存在或时间太小,则重新生成 test.cache.php 包含并返回
function pst_template($sourcePHP=false,$cachePHP=false);
生成的 源文件和目标文件可改
[php]
<?php if(!defined("PHPSERVERTAG"))die("permission deny");?><?php
require_once "phpservertag.inc.php";
pst_incache();
$str=pst_cache_template();
if($str){include $str;return;}
?><?php @include "head.inc.php";?>
<?php for($i=0;$i < 2;$i++){?><div>
<?php if($i < 1){ ?><center>PHPSERVERTAG=<?php echo PHPSERVERTAG?></center><?php }?>
(<?php echo $i+1?>)current php version <?php echo phpversion()?>
<hr /><?php echo "done"?>
</div><?php }?>
<?php @include "foot.inc.php";?>
[/php]
用户访问的 test3.php 的输出内容
title 部分是 test3.php 的输出,其他部分是 test3.cache.php 的输出
[php]
<title>new title</title> <div>
<center>PHPSERVERTAG=0.2</center> (1)current php version 5.0.4 <hr />done </div><div>
(2)current php version 5.0.4 <hr />done </div>
[/php]
可扩展性
[php]
var $handles=array(
'init'=>array(),
'precompile'=>array(),
'postcompile'=>array(),
'prekey'=>array(),
'textcookie'=>array(),
'comment'=>array(),
'error'=>array()
);
[/php]
上述部分都可以扩展
最简单的,你可以建立函数如
function phptag_as(&$attrs,&$ps){}
对应 php:tag 的 html 标签属性
一些有用的开发信息
phptag_xx 是 php:xx 属性的实现函数
pst_xmlparser 是xml类
phpservertag 是 主类
pst_outcachestart pst_outcacheend 编译时将被替换成 pst_incache
所以保留这三个空函数
pst_template 将被替换为 pst_cache_template 并返回 false
你可以在 html 属性中使用 < ? ? > 但只能是开头和结尾,里面的字符串将不转化
客户端输出的 html 属性 也能使用 \xx; 来替换 <?= ?>
已知 Bug
\var:$this; 不是返回母页的 $this 而是返回 当前的 PhpServerTag 实例 |
| dvaknheo | 2006-12-13 02:09 AM |
|
默认 php:phptag 说明
php:case
<?case php:case: ?>...
php:block
<? php:block?>...
php:choose
<?case php:choose: ?>...<?break;?>
php:default
<?default:?>...
php:else
<?}else{?>...
php:elseif
<?}else if(php:if){?>...<?}?>
php:for
php:total php:step
<?for(php:for){?>...<?}?>
<?for(php:for=0;php:for<php:total;php:for++){?>...<?}?>
<?for(php:for=0;php:for<php:total;php:for+=step){?>...<?}?>
php:foreach
php:key php:value php:isarray
<?foreach(php:foreach){?>...<?}?>
<?foreach(php:foreach as php:key => php:value){?>...<?}?>
<?foreach(php:foreach as php:value){?>...<?}?>
php:htmlbodywrap
扩展的一个标签只保留 <body></body> 里的内容
php:headfile
php:footfile
php:htmltablewrap
todo
php:if
<?if(php:if){?>...<?}?>
php:isarray
todo
php:key
php:line
todo
php:notag
用于显示
不输出 标签数据
但是会输出 pretag ,posttag
php:notext
用于显示
不输出文本
php:posttag
在 tag 开始之前显示
php:pretag
在 tag 结束之后显示
php:switch
<?switch(php:switch){?>...<?}?>
php:posttag="<?}?>";
php:step
见 php:for
php:total
见 php:for
php:tag
原来的标签
php:text
标签里的文本,注意:解析器先生成标签里面的文本,然后再解析标签
php:value
见 php:foreach
php:wrap
<?php:wrap{?>...<?}?>
输出顺序
php:pretag<php:tag (key=$value)>php:text</php:tag>php:posttag
如果有 php:notag 那么只输出 php:pretagphp:textphp:posttag
关于引号
+ - 如何表示 如 if($s=="str" && $i==1)
<php:if="$s==&qute;str&qute; && i$=1">
<php:if="<?$s=str && $i==1?>" |
| dvaknheo | 2006-12-14 01:26 AM |
|
[quote]原帖由 [i]剑枫[/i] 于 2006-12-13 08:38 PM 发表
看来美工要学习php了 [/quote]
我承认我的标题是有点大。
但是,你有没有仔细看我的 Demo 呢?
以往的 框架,比如 discuz 的某个框架 html 的开头:
{template header}
<table width="{TABLEWIDTH}" align="center" style="table-layout: fixed">
<tr>
...
这样的代码放到 dreamwaver 里只见结构不见样式
phpservertag 并不是 php 代码一定要和模板写在一块
如果换成 phpservertag 上面的框架可以这么写:
<html php:htmlbodywrap php:headfile="headerfile">
<!-- 用于编辑的时候查看的 头部,这部分编译后不再显示 ->
<style>
table=border:1 px solid red;</sytle>
<body>
<table width="100%" align="center" style="table-layout: fixed" over:width="\TABLEWIDTH;" >
<tr>
...
模板文件放置的地方
discuz:./templates/default
phpservertag: ./
好处:
使用 img 标签的时候在编辑阶段 phpservertag 就可以直接在 dreamwaver 里看到了 |
| genshing | 2006-12-14 08:15 AM |
|
| :lol 扎个我感觉比SMARTY还复杂,估计是我悟性不够的原因吧.... |
|
[quote]原帖由 [i]dvaknheo[/i] 于 2006-12-14 09:26 AM 发表
我承认我的标题是有点大。
但是,你有没有仔细看我的 Demo 呢?
以往的 框架,比如 discuz 的某个框架 html 的开头:
{template header}
<table width="{TABLEWIDTH}" align="center" ... [/quote]
:D应该尽量让美工轻松一点
向ft一样加个简单的循环,美工没问题,可是模版里出现 case、for之类的,美工九有点难了 |
| dvaknheo | 2006-12-14 02:16 PM |
|
在tag 的 属性里添加 php: 开头的属性就变成一个动态化的东西。
当然 ,你也可以扩展
对美工来说那些 带冒号的属性照搬就是。而且,由于在编辑的时候就可以看见期待的效果。工作效率会高很多。
如果喜欢把 php 代码放到注释如 discuz 模式,也可以自行扩展。下一个版本我就把
<!--php --> => <?php ?> 给作为默认转换提供了
比如
对于循环写 tr
<tr php:foreach="$values" php:value="$value" style="border:1px solid red" over:style="border:2px solid green;">
<td>\$value;</td>
</tr>
用dreamwaver编辑的时候直接就可以知道红线包围的是要循环;
//over标签的作用就是覆盖没冒号的绿色样式表格
=>
<?foreach ($values as $value){?><tr style="border:2px solid green;">
<td><?=$value;?></td>
</tr><?}?>
比
<!--{for $values $value}-->
<tr>
<td>$value</td>
</tr>
<!--{end for}-->
/////////////////////
<html php:htmlbodywrap php:headfile="headerfile">
<!-- 用于编辑的时候查看的 头部,这部分编译后不再显示 ->
<style>
table=border:1 px solid red;</sytle>
<body>
<table width="100%" align="center" style="table-layout: fixed" over:width="\TABLEWIDTH;" >
<tr>
...
输出
<?@ include headerfile?>
<table over:width="<?= TABLEWIDTH?>" align="center" style="table-layout: fixed" >
<tr>
...
于是编辑页面的时候可以 copy 一段头部数据以查看效果 |
| phpx_goseaside | 2006-12-15 02:30 AM |
|
| 子非鱼,安知鱼之乐乎? |
| nulltao | 2006-12-19 03:55 PM |
|
虽然实现起来比较麻烦,可能比smarty还复杂,
但是我觉得楼主提供了一种新的思路,这样确实比dw+smarty插件什么的有先进之处,呵呵。 |
| 115300111 | 2006-12-22 07:08 AM |
|
| 那不是一般的麻烦哟 |
| 1128sky7 | 2006-12-22 09:12 AM |
|
美工设计出自己的作品,页面工程师切页面,程序员按功能套程序,这种方式不是恨好么?
为何要让 美工懂程序? |
| dvaknheo | 2006-12-24 06:53 PM |
|
美工设计出自己的作品,页面工程师切页面,程序员按功能套程序,这种方式不是恨好么?
为何要让 美工懂程序?
我跟一个连 div 都没用过的美工合作过,痛苦死了,还好,不是用 只见结构的模板
本来切割页面的事和微调外观的事情都应该由她负责,到最后都归我了
说起来 有个 大的 servertag 没实现: php:tablewrap 循环用的
这样比如 2×1 的表格
用
<table php:tablewrap="$products" php:value="product" php:trnum="1" php:tdnum="2" >
<tr php:trwrap="yes" >
<td php:tdwrap="yes"> [[$prodct]]</td>
<td php:notag="yes" php:notext="yes">其他演示用的,编译后给我消失</td>
</tr>
<tr php:notag="yes" php:notext="yes">
<td>这也是演示用的</td>
</tr>
<table> |
| starDust | 2007-2-8 01:34 AM |
|
的确,这东西纯粹的"美工"会更头痛....
在我这,一个web项目有三个职位,1)页面设计:负责整个页面有外观设计,工作成果是psd.2)页面制作:负责psd切成HTML和图,加CSS 3)程序开发:写程序,并按需要将"模板"代码加到切好的THML中
所以,我用什么模板,根本不用去考虑所谓的美工,所以,抛开其它因素,最后用的是smarty或php本身来作VIEW层..
不知道大家公司的美工是不是兼1和2两种工作,甚至加上3的部份..我怎么就这么命苦啊..走了几家公司,都没碰过美工会帮我做模板的.. |
| hejunbin | 2007-6-14 11:36 AM |
|
| 为什么不用ssi呢? |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.088983 second(s), 2 queries |