喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

【村长请吃饭啊】 ---北京诚聘--- 【你还在犹豫吗?】

上一主题 下一主题
 21  1/3  1  2  3  > 
     
标题: [原创] 美工最期望的模板phpservertag  
 
dvaknheo
乞丐




UID 84538
精华 0
积分 -104
帖子 18
金钱 -104 喜悦币
威望 0
人脉 0
阅读权限 1
注册 2006-12-10
状态 离线
美工最期望的模板phpservertag

程序已经完成,文档还在撰写中。
特性:
现有的框架程序都是以程序员为主
在没用特殊编辑工具的时候 最多只能实现可见结构编辑而非可视化编辑
PhpServerTag 采用在 html 标签里添加特殊属性而不是修改html标签的方法
使得美工不再只见结构不见样式
简单的调用模式只要嵌入  3 行 php 代码
方便的扩展

Demo:
test3.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>
如果 test3.cache.php 不存在或时间太小,则重新生成 test.cache.php  包含并返回
function pst_template($sourcePHP=false,$cachePHP=false);
生成的 源文件和目标文件可改

<?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";?>
用户访问的 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
var $handles=array(
        
'init'=>array(),
        
'precompile'=>array(),
        
'postcompile'=>array(),
        
'prekey'=>array(),
        
'textcookie'=>array(),
        
'comment'=>array(),
        
'error'=>array()
        );
?>
上述部分都可以扩展
最简单的,你可以建立函数如
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
\varthis; 不是返回母页的 $this 而是返回 当前的 PhpServerTag 实例


 附件: 您所在的用户组无法下载或查看附件
2006-12-13 09:57 AM#1
查看资料  发短消息  顶部
 
dvaknheo
乞丐




UID 84538
精华 0
积分 -104
帖子 18
金钱 -104 喜悦币
威望 0
人脉 0
阅读权限 1
注册 2006-12-10
状态 离线
[推荐阅读] 我想把环境整个移植
默认 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?>"
2006-12-13 10:09 AM#2
查看资料  发短消息  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4921
帖子 1684
金钱 4911 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] 程序员/软件工程师
看来美工要学习php了



在场外支持奥运.....
2006-12-13 08:38 PM#3
查看资料  访问主页  发短消息  QQ  顶部
 
dvaknheo
乞丐




UID 84538
精华 0
积分 -104
帖子 18
金钱 -104 喜悦币
威望 0
人脉 0
阅读权限 1
注册 2006-12-10
状态 离线
[推荐阅读] 程序员(兼职)


QUOTE:
原帖由 剑枫 于 2006-12-13 08:38 PM 发表
看来美工要学习php了
我承认我的标题是有点大。
但是,你有没有仔细看我的 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 里看到了
2006-12-14 09:26 AM#4
查看资料  发短消息  顶部
 
genshing (genshing)
注册会员
Rank: 2
初级会员



UID 63245
精华 0
积分 73
帖子 71
金钱 73 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-2-18
状态 离线
[推荐阅读] 一个奇怪的问题
扎个我感觉比SMARTY还复杂,估计是我悟性不够的原因吧....
2006-12-14 04:15 PM#5
查看资料  发短消息  顶部
 
剑枫 (雪花)
论坛元老
Rank: 8Rank: 8
欧玛嘎


UID 26144
精华 1
积分 4921
帖子 1684
金钱 4911 喜悦币
威望 10
人脉 0
阅读权限 90
注册 2004-2-14
来自 山东郓城
状态 离线
[推荐阅读] 请教,错误提示


QUOTE:
原帖由 dvaknheo 于 2006-12-14 09:26 AM 发表

我承认我的标题是有点大。
但是,你有没有仔细看我的 Demo 呢?
以往的 框架,比如 discuz 的某个框架 html 的开头:
{template header}
<table width="{TABLEWIDTH}" align="center" ...
应该尽量让美工轻松一点

向ft一样加个简单的循环,美工没问题,可是模版里出现 case、for之类的,美工九有点难了




在场外支持奥运.....
2006-12-14 05:25 PM#6
查看资料  访问主页  发短消息  QQ  顶部
 
dvaknheo
乞丐




UID 84538
精华 0
积分 -104
帖子 18
金钱 -104 喜悦币
威望 0
人脉 0
阅读权限 1
注册 2006-12-10
状态 离线
[推荐阅读] 北京高薪招聘高水平PHP程序员
在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 一段头部数据以查看效果
2006-12-14 10:16 PM#7
查看资料  发短消息  顶部
 
phpx_goseaside (goseaside)
高级会员
Rank: 4
初看没有问题,细看全是问题


UID 30280
精华 1
积分 970
帖子 934
金钱 960 喜悦币
威望 10
人脉 0
阅读权限 50
注册 2004-7-23
来自 北京
状态 离线
[推荐阅读] oscommerce的问题
子非鱼,安知鱼之乐乎?
2006-12-15 10:30 AM#8
查看资料  访问主页  发短消息  顶部
 
rf123
注册会员
Rank: 2



UID 80558
精华 0
积分 78
帖子 59
金钱 78 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-9-26
状态 离线
[推荐阅读] 留言本与论坛有多远的距离?
dw有针对smarty的插件,挺好用的
2006-12-15 02:05 PM#9
查看资料  发短消息  顶部
 
nulltao
新手上路
Rank: 1



UID 84207
精华 0
积分 20
帖子 18
金钱 20 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-12-3
状态 离线
[推荐阅读] 请问如何用js判断客户端是简体还是繁体
虽然实现起来比较麻烦,可能比smarty还复杂,
但是我觉得楼主提供了一种新的思路,这样确实比dw+smarty插件什么的有先进之处,呵呵。




我的部落:净空无道
2006-12-19 11:55 PM#10
查看资料  Blog  发短消息  顶部
 21  1/3  1  2  3  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.028031 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP