所有内容均以uchome1.5版为准
一. 原 系统模板页面简介
uchome 1.5的系统模板页面主要在/templates/default目录下,命名大致分为以下几类:
****很多页面调用的模板可以从url地 址中猜测出来
比如左侧“日志”的链接为:http//home.xxx.com/space.php?do=blog, 那么把space和blog连 接起来为space_blog,然后再看该页面显示了什么,在这里这个页面显示了 日志的列表,而/template/default/下面有个文件正好是space_blog_list.htm, 呵呵……
然后我们分别点击这个页面顶上的功能导航 好友最新日志 我的日志 我踩过的日志 大家的日志 发现页面右边会显示不同的内容,有时是“按作者查看”,有时是“日志分类”,我们打开space_blog_list.htm,找 到
</DIV一行,发现从这里开始有两个IF判断,这就表示这两个不同的显示都整合到这一个模板页面里啦。。。>
同样也可以从模板文件的名称来猜测前台页面的url,比如看到一个模板文件network_blog.htm,不晓得干什么的,那么我们就拆分它, 在url里输入http://home.xxx.com/network.php?ac=blog 就可以访问了
一般url里面的参数有 do cp ac 等等几个 后面连接的是功能名,如blog日志,mtag群组,thread群组话题,album相册 等等。
二. 二次开发的插件使用的模版页面
二 次开发的插件模板页面一般位于插件文件夹下的view/文件夹下,比如结伴同行插件目录为/partner,那么模板文件在/partner/view 下,样式表位于/partner/css下
三. 图片文件夹
一些公 用的图片(如应用的icon等)放在/image/目录下,大部分与界面有关的图片位于/templates/default/image目录下
四. 系统模板页面功能详细说明
*** 注:说明里面一般是表示通过这几步操作可以看到该页面
cp_advance.htm : 说明: 个人设置-》高级管理
cp_album.htm : 说明: 相册-》我的相册-》管理相册主界面,包括编辑相册、编辑图片、删除相册、删除图片
cp_avatar.htm : 说明: 个人设置-》我的头像
cp_blog.htm : 说明: 日志-》我的日志-》发表新日志、编辑日志等操作
cp_class.htm : 说明: 日志分类操作,日志-我的日志-右侧日志分类的编辑和删除
cp_comment.htm : 说明: 评论的操作,包括编辑、删除、以及对别人评论的回复
cp_common.htm : 说明: 举报、屏蔽通知等操作
cp_credit.htm : 说明: 个人设置-》积分
cp_doing.htm : 说明: 心情记录-》回复或者删除
cp_domain.htm : 说明: 设置个人二级域名-现在不用管
cp_feed.htm : 说明: 删除某个动态以及,消息-》通知 某个通知后面图标表示的“屏蔽”
cp_friend.htm : 说明: 对好友的所有操作 ,如列表、查找、批准等等
cp_header.htm : 说明: 个人设置页面的头部 ,如我的头像、个人资料、主页风格等
cp_import.htm : 说明: 日志-》发表日志-》导入
cp_invite.htm : 说明: 页面最顶部-》“邀请”
cp_mtag.htm : 说明: 群组的操作页面,包括新建、删除、修改等
cp_password.htm : 说明: 设置-》账号设置
cp_pm.htm : 说明: 最顶部-》消息 包括发 删
cp_poke.htm : 说明: 打招呼 包括向别人打招呼 管理别人的招呼
cp_privacy.htm : 说明: 顶部-》隐私 (个人隐私设置)
cp_profile.htm : 说明: 设置-》个人资料
cp_sendmail.htm : 说明: 邮件相关
cp_share.htm : 说明: 处理“分享”操作 例如在博客列表标题后点击分享弹出的界面
cp_space.htm : 说明: 好像与“应用”有关
cp_task.htm : 说明: 参与活动 例如进入首页的 “更新个人头像”,等等。。
cp_theme.htm : 说明: 设置-》主页风格
cp_thread.htm : 说明: 群组中 “话题”的相关操作页面
cp_upload.htm : 说明: 左侧 “相册”的上传链接
cp_userapp.htm : 说明: 管理用户app应用 ,暂时不管
do_ajax.htm : 说明: 一些ajax操作的结果界面
do_inputpwd.htm : 说明: 密码验证
do_login.htm : 说明: 登陆 退出后 点击最顶部的“登录”
do_lostpasswd.htm : 说明: 忘记密码
do_register.htm : 说明: 退出后 点击最顶部的“注册”
do_swfupload.htm : 说明: 相册上传的 “批量操作”
footer.htm : 说明: 页脚
header.htm : 说明:页头
help.htm : 说明: 帮助页面 help.php可以看到
iframe.htm : 说明: 不清楚 待研究
index.htm : 说明: 首页—未登录状态的欢迎页面,聚合了blog、相册等
invite.htm : 说明: 点击别人发过来的邀请链接后出现的界面
network_album.htm : 说明: 随便看看-相册
network_blog.htm : 说明: 随便看看-博客
network_doing.htm : 说明: 随便看看-记录
network_header.htm : 说明: 随便看看-顶部那几个链接
network_index.htm : 说明: 随便看看-全部
network_mtag.htm : 说明: 随便看看-群组
network_share.htm : 说明: 随便看看-分享
network_space.htm : 说明: 随便看看-成员
network_thread.htm : 说明: 随便看看-话题
sendmail.htm : 说明: 系统邮件的模板
showmessage.htm : 说明: 信息提示
space_album_list.htm : 说明: 相册列表
space_album_pic.htm : 说明: 查看某个照片的页面
space_album_view.htm : 说明: 点击相册,列出该相册的照片(注:区分album和pic)
space_blog_list.htm : 说明: 博客列表
space_blog_view.htm : 说明: 查看某博客内容
space_comment_li.htm : 说明: 显示评论列表某条(这个在很多有评论功能的页面都引用了,用循环这个“小小”模板的方式列出所有评论)
space_doing.htm : 说明: 心情记录
space_feed.htm : 说明: 个人动态页面
space_feed_li.htm : 说明: 个人动态列表(被包含在space_feed.htm里,用循环方式引用)
space_friend.htm : 说明: 点击顶部“好友”
space_guide.htm : 说明: 用户刚开通空间时候的向导页面,提示上传头像等
space_index.htm : 说明: 点击顶部“个人主页”
space_list.htm : 说明: 用户列表(被network_space.htm包含)
space_menu.htm : 说明: 个人空间顶部的链接菜单
space_mood.htm : 说明: 个人主页-同心情的朋友
space_mtag.htm : 说明: 群组-我的群组
space_mtag_field.htm : 说明: 群组-热门群组(有群组分类)
space_mtag_index.htm : 说明:群组-进入某个群组
space_mtag_list.htm : 说明: 群组-进入某个群组-讨论区
space_mtag_member.htm : 说明: 群组-进入某个群组-成员列表
space_notice.htm : 说明:顶部-通知
space_pm.htm : 说明:顶部-通知-消息
space_post_li.htm : 说明: 被space_thread_view.htm文件引用(被循环调用显示帖子)
space_privacy.htm : 说明: 隐私相关,正在研究
space_rss.htm : 说明: 订阅的,不用管
space_share_li.htm : 说明: 分享-查看某条项目(被下面的space_share_list列表页循环引用)
space_share_list.htm : 说明: 分享-列表
space_share_view.htm : 说明: 查看某条分享的内容,在分享列表点评论的时候会出现
space_tag_list.htm : 说明: 打开某篇日志——标题下如果有标签——点击标签——标签列表
space_tag_view.htm : 说明: 查看某个标签
space_thread_list.htm : 说明: 群组话题列表 点左侧的群组默认页面
space_thread_view.htm : 说明: 查看某个主题
space_wall.htm : 说明: 留言板,包括给自己留言给别人留言
style.css : 说明: 样式表
userapp.htm : 说明:用户添加应用或管理应用操作,不用管
五. 插件模板文件说明
以 结伴同行为例/partner/view
partner.htm : 说明: 首页以及信息列表页
partner_header.htm : 说明: 头部文件,一般包括此插件的几个功能导航
partner_post.htm : 说明: 发布新信息
partner_view.htm : 说明: 浏览某条信息的内容
以几个例子来详细说明下uchome的 模板文件结构及语法说明。
必须先来了解一下uchome的模板文件解析过程,我们以“随便看看”里的“博客”为例:
它的url地址是http://home.xxx.com/network.php?ac=blog,
那么我们先打开/network.php看一下,我们看到第25行有一段
//允许的方法
$acs = array(’space’, ‘doing’, ‘blog’, ‘album’, ‘mtag’, ‘thread’, ’share’);
$ac = (empty($_GET['ac']) || !in_array($_GET['ac'], $acs))?’index’:$_GET['ac'];
这里是保证不会出现其他不存在的模块。看到里面有个’blog’了吧。
然后又看到第37行里面有一段
//数据处理
include_once(S_ROOT.”./source/network_{$ac}.php”);
这个实际上引用了/source/network_blog.php文件,而network_blog.php里面进行相关的博客数据准备及其他操 作,为下一步的解析模板做准备
最后第49行有
//模板调用
include_once template(”network_$ac”);
即用template函数解析对应的静态htm模板页面再进行调用,template函数就不详细说了,主要是定位到模板文件夹下的指定模板页面 (例如这里就是/template/default/network_blog.htm),然后用正则表达式替换模板文件中的变量和模板语法语句,填充上 一步得到的博客数据,然后输出到屏幕
之所以使用模板页面,而不直接在php里面写htm代码输出,是为了使程序代码和模板页面分离,便于设计师和程序员的工作互不影响。
好了废话了很多,先看一下uchome的基本模板语法
就以/template/default/network_blog.htm为例,它的内容是(绿色的和褐色底色的就是嵌入到模板页面里面的语法代 码了)
<!–{eval $_TPL['titles'] = array(’日志’, ‘随便看看’);}–>
<!–{template header}–>
<!–{template network_header}–>
<div id=“search” class=“h_status”>
<div id=“m_search”<!–{if !empty($gets) || !empty($_GET['view'])}–> style=”display:none;”<!–{/if}–>>
<form method=“get” action=“network.php”>
<input type=“text” name=“key” value=“$_GET[key]“ size=“26″ class=“t_input” />
<input type=“hidden” name=“ac” value=“$ac” />
<input type=“hidden” name=“searchmode” value=“1″ />
<input type=“submit” name=“searchsubmit” value=“搜索日志” class=“submit” />
<a href=“java script:;”onclick=“document.getElementById(’m_search’).style.display=’none’; document.getElementById(’adv_search’).style.display=’block’”>高级搜索< /a>
</form>
</div>
<form method=“get” action=“network.php”>
<table cellspacing=“0″ cellpadding=“0″ class=“formtable” id=“adv_search”<!–{if empty($gets) &&empty($_GET['view'])}–> style=”display:none;”<!–{/if}–>>
<tr>
<th width=“60″>关键字*</th>
<td>
<input type=“text” name=“key” value=“$_GET[key]“ size=“26″ class=“t_input” />
</td>
</tr>
<tr>
<th>作者名*</th>
<td>
<input type=“text” name=“username” value=“$_GET[username]“ size=“26″ class=“t_input” />
</td>
</tr>
<tr>
<th>时间范围</th>
<td>
<input type=“text” name=“starttime” value=“$_GET[starttime]“ size=“10″ class=“t_input” /> ~ <inputtype=“text” name=“endtime” value=“$_GET[endtime]“ size=“10″ class=“t_input” />
格式为 YYYY-MM-DD
</td>
</tr>
<tr>
<th>搜索方式</th>
<td>
<label for=“subject”><input id=“subject” type=“radio” value=“subject”name=“type”$typearr[subject]>搜索标题</label>
<label for=“fulltext”><input id=“fulltext” type=“radio” value=“fulltext” name=“type”$typearr[fulltext]>全文搜索</label>
</td>
</tr>
<tr>
<th>结果排序</th>
<td>
<select name=“orderby”>
<option value=“dateline”>发布时间</option>
<option value=“replynum”$orderbyarr[replynum]>回复数量</option>
<option value=“viewnum”$orderbyarr[viewnum]>浏览次数</option>
</select>
<select name=“ascdesc”>
<option value=“asc”>按升序排列</option>
<option value=“desc”$ascdescarr[desc]>按降序排列</option>
</select>
</td>
</tr>
<tr>
<th> </th>
<td>
<input type=“hidden” name=“ac” value=“$ac” />
<input type=“hidden” name=“searchmode” value=“1″ />
<input type=“submit” name=“searchsubmit” value=“搜索” class=“submit” />
</td>
</tr>
</table>
</form>
</div>
<!–{if $list}–>
<div class=“entry_list”>
<ul>
<!–{loop $list $value}–>
<li>
<div class=“avatar48″><a href=“space.php?uid=$value[uid]“><img src=“<!–{avatar($value[uid],small)}–>” class=“avatar” /></a></div>
<div class=“title”>
<div class=“r_option”><a href=“cp.php?ac=share&type=blog&id=$value[blogid]“id=“a_share_$value[blogid]“ onclick=“ajaxmenu(event, this.id, 99999,” , -1)” class=“a_share”>分享</a></div>
<h4><a href=“space.php?uid=$value[uid]&do=blog&id=$value[blogid]“>$value[subject]</a></h4>
<div><a href=“space.php?uid=$value[uid]“>{$_SN[$value[uid]]}</a> <span class=“time”><!–{date(’Y-m-d H:i’,$value[dateline],1)}–></span></div>
</div>
<div class=“detail image_right l_text s_clear” id=“blog_article_$value[blogid]“>
<!–{if $value[pic]}–><p class=“image”><a href=“space.php?uid=$value[uid]&do=blog&id=$value[blogid]“><img src=“$value[pic]“ /> $value[message]
</div>
<div>
<!–{if $value[viewnum]}–><a href=“space.php?uid=$value[uid]&do=blog&id=$value[blogid]“>$value[viewnum] 次阅读</a><spanclass=“pipe”>|</span><!–{/if}–>
<!–{if $value[replynum]}–><a href=“space.php?uid=$value[uid]&do=blog&id=$value[blogid]#comment”>$value[replynum] 个评论</a><!–{else}–>没有评论<!–{/if}–>
</div>
</li>
<!–{/loop}–>
</ul>
</div>
<div class=“page”>
<!–{if $multi==’networkpage’}–>仅显示最新发布的 $count 个日志<!–{else}–>$multi<!–{/if}–>
</div>
<!–{else}–>
<div class=“c_form”>没有相应的日志。</div>
<!–{/if}–>
<!–{template footer}–>
一般来说,我们需要了解一下几个与html标记不同的东西:
1><!–{xxxxx}–> 在html里面,这个表示将一段代码注释掉,不显示出来,而 在uchome模板里,它在里面放入了一对花括号,就表示是嵌入了php语句啦,可以被还原成正规的php代码。
2>在模板里面,是可以直接显示php的变量的,模板解析函数会将这些变量替换成实际的变量值。
1.变量设置与其他模板调用
第一句 设置变量的值
<!–{eval $_TPL['titles'] = array(’日志’, ‘随便看看’);}–>
表 示将$_TPL['titles']变量设置为array(’日志’, ‘随便看看’);
第二句 调用另外一个模板文件进来[模板里面再调用模板]
<!–{template header}–>实际上相当于php中的
template(”header”) 即解析/template/default/header.htm文件
条件判断 <!–{if xxx}–><!–{/if}–>类
首先是<!–{if $multi==’networkpage’}–>如果满足条件,这里显示一些东西<!–{/if}–>
以及<!–{if $multi==’networkpage’}–>如果满足条件,这里显示一些东西<!–{else}–>否则显示其他的东西& lt;!–{/if}–>
循环显示 <!–{loop}–><!–{/loop}–>类
<!–{loop $list $value}–>
显示了一遍又一遍啊又一遍 $value[name] : $value[job] <br />
<!–{/loop}–>
如上所示,这个就是将数组$list里面的元素一个接一个的显示出来。假如我们这里的$list存储了两位设计师的资料
$list = array(0=>array(’name’ => ‘baobao’,’job’=>’超级设计师’),1=>array(’name’ => ‘小马’,’job’=>’无敌设计师’));
那么这里最后得到的html代码是
显示了一遍又一遍啊又一遍 baobao :超级设计师 <br />
显示了一遍又一遍啊又一遍 小马 :无敌设计师 <br />
….
语法嵌套
当然了,语法可以嵌套,所以这也造成我们看模板文件的复杂性,比如在loop里面会有if,即表示每循环一次都要进行判断;又或者if里面有 loop,即表示只有满足条件了,才会进行循环
2.变量显示
直接显示
在php里面,变量名是以$美元号为开头的,所以如果在模板里面看见很多$_GET、$_POST、$list、$value[aaa]的 这样的东西,就表示显示变量的值。不过我们如果要直接输出变量值,一般习惯在变量名的前后加上花括号,避免模板解析错误,比如{$_GET[aa]}、{$_POST[bb]}、{$list}、{$value[aaa]}等 等。
变量与标准html混写
<a href=”cp.php?ac=friend&op=add&uid={$value[uid]}” id=”a_hot_friend_{$key}” onclick=”ajaxmenu(event, this.id, 99999, ”, -1)”>
如上面所示,其中既有html又有$value[uid]这样的变量(还记得吗?用花括号包起来防止变量解析错误),它们是混合在一起的,没有关 系,我们在脑海里把变量用一个数字或者字母来替换来想象,然后理解就容易了,类似上面那段,其实解析出来后显示的是
<a href=”cp.php?ac=friend&op=add&uid=12345” id=”a_hot_friend_2342” onclick=”ajaxmenu(event, this.id, 99999, ”, -1)”>
OK,就这么简单,这样设计师只要了解几个简单的语法,就知道显示效果是什么样了。