喜悦国际村 » 喜悦原创 » 美工最期望的模板phpservertag

页: [1] 2
dvaknheo2006-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 &lt; 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 实例

dvaknheo2006-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; &amp;&amp; i$=1">
<php:if="<?$s=str && $i==1?>"

剑枫2006-12-13 12:38 PM
看来美工要学习php了

dvaknheo2006-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 里看到了

genshing2006-12-14 08:15 AM
:lol 扎个我感觉比SMARTY还复杂,估计是我悟性不够的原因吧....

剑枫2006-12-14 09:25 AM
[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之类的,美工九有点难了

dvaknheo2006-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_goseaside2006-12-15 02:30 AM
子非鱼,安知鱼之乐乎?

rf1232006-12-15 06:05 AM
dw有针对smarty的插件,挺好用的

nulltao2006-12-19 03:55 PM
虽然实现起来比较麻烦,可能比smarty还复杂,
但是我觉得楼主提供了一种新的思路,这样确实比dw+smarty插件什么的有先进之处,呵呵。

1153001112006-12-22 07:08 AM
那不是一般的麻烦哟

lgy12006-12-22 07:33 AM
呵呵,我宁愿用smarty.

1128sky72006-12-22 09:12 AM
美工设计出自己的作品,页面工程师切页面,程序员按功能套程序,这种方式不是恨好么?
为何要让 美工懂程序?

dvaknheo2006-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>

font2007-2-5 08:43 AM
好东西啊.嘿嘿.

starDust2007-2-8 01:34 AM
的确,这东西纯粹的"美工"会更头痛....
在我这,一个web项目有三个职位,1)页面设计:负责整个页面有外观设计,工作成果是psd.2)页面制作:负责psd切成HTML和图,加CSS 3)程序开发:写程序,并按需要将"模板"代码加到切好的THML中
所以,我用什么模板,根本不用去考虑所谓的美工,所以,抛开其它因素,最后用的是smarty或php本身来作VIEW层..
不知道大家公司的美工是不是兼1和2两种工作,甚至加上3的部份..我怎么就这么命苦啊..走了几家公司,都没碰过美工会帮我做模板的..

bg6aer2007-6-9 03:46 PM
zhege  bucuo  o

hejunbin2007-6-14 11:36 AM
为什么不用ssi呢?

idgnarn2007-7-8 02:22 AM
...
...

gudai2007-7-8 11:30 AM
搂主的解决方案是模版界的一支奇兵啊


查看完整版本: 美工最期望的模板phpservertag


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.088983 second(s), 2 queries