EMLOG模板结构: 默认模板包含header.php、log_list.php、echo_log.php、module.php、side.php、page.php、footer.php、main.css、preview.jpg这个9个文件,各个文件主要功能如下:
· header.php:header.php是存储模板信息和控制模板顶部元素的文件,该文件是必须存在的,如果emlog系统检测不到该文件的存在,emlog将不会工作。
· log_list.php:该文件也是必须存在的文件,默认为日志首页生成、分类页面生成、搜索结果页面生成、按标签查看页面生成、存档页面生成等等列表页面的生成控制文件。但是在高级的emlog的DIY中,你可以更改该文件。高级DIY教程将在以后单独发布,这里不作赘述。
EMLOG模板结构: 默认模板包含header.php、log_list.php、echo_log.php、module.php、side.php、page.php、footer.php、main.css、preview.jpg这个9个文件,各个文件主要功能如下:
· header.php:header.php是存储模板信息和控制模板顶部元素的文件,该文件是必须存在的,如果emlog系统检测不到该文件的存在,emlog将不会工作。
· log_list.php:该文件也是必须存在的文件,默认为日志首页生成、分类页面生成、搜索结果页面生成、按标签查看页面生成、存档页面生成等等列表页面的生成控制文件。但是在高级的emlog的DIY中,你可以更改该文件。高级DIY教程将在以后单独发布,这里不作赘述。
· echo_log.php:该文件同样为必须文件,单个日志页面由该文件生成。
· module.php:一般来说这个文件是必须存在的,当然,在高级DIY中你可以去掉它,但是此文件中的代码无一不是模板的核心代码。几乎所有前台显示的内容都由此文件管理。不熟悉的请不要轻易动该文件。
· side.php:该文件为边栏控制文件,并不是必须存在的,如果你不想在你的模板中出现边栏,你大可以删掉它。
· page.php:该文件必须存在。该文件是控制你的自定义页面的文件。如果此文件不存在,你在后台添加的自定义页面将不工作。当然,在以后的高级DIY教程中,你可以直接在模板中DIY一个个性页面,并不需要后台添加,同时也不受后台限制,就像鼠标生活的链接页面一样。
· footer.php:该文件为页底文件,包含版权说明、备案信息等。一般你的外部统计代码可以添加到这个文件中。这个文件也不是必须存在的,如果你不想要页底的话,也可以删除。
· main.css:该文件为页面显示效果的控制文件,是主体CSS。当然也不是必须存在的,前提是你将css写到header.php等文件里,不过我猜想你不会那样做的。
· preview.jpg:这个是预览图片,也就是你在后台更换模板的时候看到的那个预览图片。该图片不能更改名字,否则你在后台依然看不到预览图片。好像这个图片是支持gif格式的,但是不支持png格式。
另外在默认风格里面还存在一个images的文件夹,里面放置的是风格所需要的图片和swf文件。
好了,上面将emlog的结构从文件上进行了分析。然而要制作风格,我们还需要细致地了解各个文件里面的东西。后面我将一一解剖各个文件,当然,我是一个温柔的庖丁,你看到的不是血淋淋的场面,而将是精致的脉络和清晰的骨骼构架。
模板信息
模板信息写在第一个PHP标签里面,即是第1到11行。模板信息主要是给后台的模板预览时读取模板信息使用的。下面来分析模板信息的各个项,括号内红色字体是我的注释:
· Template Name:默认模板(这里是模板的名字,例如此时你在后台看到的模板名字就是“默认模板”)
· Description:这是emlog的默认模板,简洁明快 ……(这是模板的简介)
· Author:emlog开发小组(这是作者名字)
· Author Url:http://www.emlog.net(这是作者的主页)
· Sidebar Amount:1(这是边栏个数,如果你的模板有2个边栏,即是3栏式的话,这里就填2,默认模板是1个边栏,所以为1)
主体HTML标记
主体HTML标记又可以分为2个部分,及包含在<head></head>标签内的为一个部分,包含在标签<body>后的为一个部分。下面分析两个部分的每一行,括号内的是我的分析注释。HTML标签我将不会讲解,看下面的部分请自学HTML标记。PHP代码已被我用蓝色标记。
· head部分
1. <head>
2. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
3. <meta name="keywords" content="<?php echo $site_key; ?>" />(博客的关键字,这里的PHP代码提取的是你在后台博客设置里面“博客关键字”里面填写的信息。)
4. <meta name="description" content="<?php echo $bloginfo; ?>" />(博客的描述,这里的PHP调用的是后台“博客描述”里面的信息)
5. <meta name="generator" content="emlog" />(generator公共头像服务预留位置)
6. <title><?php echo $blogtitle; ?></title>(博客名字)
7. <link rel="EditURI" type="application/rsd+xml" title="RSD" href="<?php echo BLOG_URL; ?>xmlrpc.php?rsd" />(远程过程调用开放接口,用于支持离线写作)
8. <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="<?php echo BLOG_URL; ?>wlwmanifest.xml" />(专门为Live Writer开放的离线写作接口)
9. <link rel="alternate" type="application/rss+xml" title="RSS" href="<?php echo BLOG_URL; ?>rss.php">(RSS输出接口)
10. <link href="<?php echo TEMPLATE_URL; ?>main.css" rel="stylesheet" type="text/css" />(主体CSS样式加载,PHP代码为模板的网络绝对路径)
11. <script src="<?php echo BLOG_URL; ?>lib/js/common_tpl.js" type="text/javascript"></script>(前台公用JS文件加载,PHP代码为博客的网络绝对路径)
12. <?php doAction('index_head'); ?> (header挂载点)
13. </head>
· body部分
1. <body>
2. <div class="main">
3. <div class="header">
4. <ul>
5. <li id="title"><h1><a href="<?php echo BLOG_URL; ?>"><?php echo $blogname; ?></a></h1></li>(博客名字)
6. <li id="tagline"><?php echo $bloginfo; ?></li>(博客描述)
7. </ul>
8. <ul id="menus">(菜单开始标记)
9. <li class="menus1"><a href="<?php echo BLOG_URL; ?>">首页</a></li>(首页)
10. <?php (从这里开始将循环读取你的所有自定义页面的标题,并加入菜单中,例如你自定义了一个“留言”页面,那么这里将读取这个页面的标题“留言”将其加入到菜单里面)
11. foreach ($navibar as $key => $val):
12. if ($val['hide'] == 'y'){continue;}
13. if (empty($val['url'])){$val['url'] = BLOG_URL.'?post='.$key;}
14. ?>
15. <li class="menus2"><a href="<?php echo $val['url']; ?>" target="<?php echo $val['is_blank']; ?>"><?php echo $val['title']; ?></a></li>
16. <?php endforeach;?>(循环读取自定义页面标题结束)
17. <?php doAction('navbar', '<li class="menus2">', '</li>'); ?>(这里是将读取你所有插件生成的菜单,例如你安装了相册插件,并设置使之在菜单里出现“相册”,那么这里将读取“相册”到菜单里)
18. <?php if(ROLE == 'admin'
|| ROLE == 'writer'): ?>(这里开始将后台登陆链接加入到菜单中,删掉本部分代码菜单中将不会显示“登陆”链接)
19. <li class="menus2"><a href="<?php echo BLOG_URL; ?>admin/write_log.php">写日志</a></li>
20. <li class="menus2"><a href="<?php echo BLOG_URL; ?>admin/">管理中心</a></li>
21. <li class="menus2"><a href="<?php echo BLOG_URL; ?>admin/?action=logout">退出</a></li>
22. <?php else: ?>
23. <li class="menus2"><a href="<?php echo BLOG_URL; ?>admin/">登录</a></li>
24. <?php endif; ?>(后台登陆链接结束)
25. </ul>(菜单结束标记)
26. <div class="clear"></div>
27. </div>
好了,header.php分析结束,重要的东西我都标注完了。这里没有讲HTML和DIV+CSS知识,不会的朋友可以自己看看相关书籍。在header.php里面我们需要特别注意这两个参数:<?php echo BLOG_URL; ?>和<?php echo TEMPLATE_URL; ?>。前者是博客的网络绝对路径,如我的博客绝对路径即是“http://mouselife.cn/”。需要说明的是这里面已经包含了域名后面的那个斜杠,所以在使用的时候不要再多加一个斜杠了。后者是模板的网络绝对路径,也包含了“/”,使用的时候不要再加上“/”了,例如上面加载CSS的时候路径写的是“<?php echo TEMPLATE_URL; ?>main.css”而不是“<?php echo TEMPLATE_URL; ?>/main.css”。
header.php相对于3.3的主要变化即是上面这两个参数,3.3使用的博客路径是相对路径,3.4变为了绝对路径。而模板路径的参数名字改变了,由<?php echo TPL_PATH; ?>变为<?php echo TEMPLATE_URL; ?>。另外新增了两个离线写作接口。
承接上一篇,本篇教程将来仔细分析log_list.php文件。log_list.php文件默认为日志列表生成文件,即所有日志列表都是由这个文件生成的,如默认首页的日志列表、搜索结果列表、分类列表等等。EMLOG会分析URL,如果URL里面包含日志列表请求的话,EMLOG就会调用header.php、log_list.php、side.php、footer.php、module.php来生成一个列表页面。log_list.php影响到页面有:首页、分类页面、日志标签页面、搜索结果页面、分页页面、单个作者所有文章页面等。 现在来仔细分析log_list.php的结构,分析方法如同header.php。
<?php if(!defined('EMLOG_ROOT')) {exit('error!');}?>
<div id="content">
<?php doAction('index_loglist_top'); ?>(列表页面顶部插件挂载点)
<ul>
<?php foreach($logs as $value): ?>(从这里开始循环输出日子列表,一直到<?php endforeach; ?>处结束)
<li>
<h2 class="content_h2">
<?php topflg($value['top']); ?><a href="<?php echo BLOG_URL; ?>?post=<?php echo $value['logid']; ?>"><?php echo $value['log_title']; ?></a>(href=“”内是每篇日志的绝对URL,<a>标签内是每一篇日志的标题)
</h2>
<div class="act"><?php blog_sort($value['sortid'], $value['logid']); ?></div>(每篇日志所属的分类)
<div class="editor"><?php editflg($value['logid'],$value['author']); ?></div>(指向后台改日志的编辑链接,只有在管理员登录的情况下前台才会出现“编辑”超链接,删掉该行无论登录与否都不会出现)
<div class="clear line"></div>
<div class="bloger">post by <?php blog_author($value['author']); ?> / <?php echo date('Y-n-j G:i l', $value['date']); ?></div>(这里生成的效果为post by Kuma / 2009-12-5 0:57 Saturday, <?php blog_author($value['author']); ?>是该日志的作者,<?php echo date('Y-n-j G:i l', $value['date']); ?>是发布时间。这个时间格式你可以随意更改,时间的格式输出请见附录)
<div class="post"><?php echo $value['log_description']; ?></div>(这是对应日志的摘要,如果你在后台发布日志的时候填写了摘要的话,这里显示摘要内容,如果没填写,则显示整篇日志)
<div class="fujian"><?php blog_att($value['logid']); ?></div>(显示对应附件,该日志有附件则显示附件,没有附件则不显示,去掉的话列表页面将不会有附件下载链接)
<div class="under">
<div class="top"></div>
<div class="under_p">
<div class="tag"><?php blog_tag($value['logid']); ?></div>(该日志所拥有的标签,你发布日志填写了标签就会显示对应标签,没填则显示为空。删掉该行将不显示标签)
<div>
<a href="<?php echo BLOG_URL; ?>?post=<?php echo $value['logid']; ?>#comment">评论(<?php echo $value['comnum']; ?>)</a>(该日志的评论条数,href=“”里面是链接指向,括号里面是评论条数的参数)
<a href="<?php echo BLOG_URL; ?>?post=<?php echo $value['logid']; ?>#tb">引用(<?php echo $value['tbcount']; ?>)</a> (类似评论条数)
<a href="<?php echo BLOG_URL; ?>?post=<?php echo $value['logid']; ?>">浏览(<?php echo $value['views']; ?>)</a>(类似评论条数)
</div>
</div>
<div class="bottom"></div>
</div>
</li>
<?php endforeach; ?>(日志列表生成结束)
</ul>
<div id="pagenavi">
<?php echo $page_url;?>(显示分页的页码)
</div>
</div>
<!--end content-->
<?php
include getViews('side');
include getViews('footer');
?>(将side.php和footer.php加载进来,并放在下面)
附录:PHP输出各种格式的时间
年份的表示:
如2009年,y输出09 而Y输出2009
月份的表示:
如10或者9月:m输出10或09,而 n输出10或9,m和n的区别在于输出10一下的数字是否在前面加0,M将输出10月将是:Oct ,而F输出10月将是:October
星期的表示:
如输出星期四,D输出:Thu而 l 输出Thursday
天数的表示:
如输出1号,d输出01, D输出1 ,j输出1 ,js输出1st
上下午:
上下午a输出am/pm 而A输出AM/PM
小时:
如14时的输出:G输出14, g输出2, h输出02 ,H输出14
分钟:
输出分钟为i
给个实例,如输出2009年10月1日,下面给出几种输出方式:
'M d Y' Oct 01 2009
'F jS, Y' October 1st, 2009
'd-m-Y' 01-10-2009
'Y-n-j l' 2009-10-1 Thursday