殷德瑶博客
喜欢的歌,静静地听!喜欢的人,远远地看!

WordPress的模板移植到EMlog教程

殷德瑶 2016-5-7 emlog教程 评论 4059 次
复制代码 从emlog的默认模板中的header.php,复制出前18行到目标模板最前面,即

  1. <?php
  2. /*
  3. Template Name:默认模板
  4. Description:这是emlog的默认模板,简洁明快 ……
  5. Author:emlog开发小组
  6. Author Url:http://www.emlog.net
  7. Sidebar Amount:1
  8. */
  9. if(!defined('EMLOG_ROOT')) {exit('error!');}
  10. require_once (getViews('module'));
  11. ?>
  12. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  13. <html xmlns="http://www.w3.org/1999/xhtml">
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  16. <meta name="keywords" content="<?php echo $site_key; ?>" />
  17. <meta name="generator" content="emlog" />
  18. <title><?php echo $blogtitle; ?></title>

前几行中的注释部分因情况而异有所删改,本例中,因为目标模板三栏(实际是2栏,但是我想把它改为三栏),所以保留Sidebar Amount,并将其值设置为2
然后将CSS样式的代码用默认模板中的替换,本例中用
  1. <link href="<?php echo CERTEMPLATE_URL; ?>/main.css" rel="stylesheet" type="text/css" />
替换
  1. <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="all" />
并将main.css修改为style.css
再往下,会看到一句RSS的,同CSS部分,用默认的替换之
继续往下看,有一句pingback的,删除
接下来,复制默认模板中的
  1. <script src="<?php echo BLOG_URL; ?>lib/js/common_tpl.js" type="text/javascript"></script>

到目标模板
接着往下看,有一句
  1. <?php wp_head(); ?>
换成默认模板的
  1. <?php doAction('index_head'); ?>
再往下看,就到头部的博客名称和博客描述这块了
本例中,博客名称使用了if语句判断以在不同模式下显示不同样式,我在本地架设的WP上验证了两种样式的一致性,于是我们采取第一种
即将代码

  1. <?php if (is_home() || is_page_template('archives.php') ){ ?>
  2.   <h1><a href="<?php echo get_option('home'); ?>/"><?php echo html_entity_decode(get_option('blogname'),ENT_NOQUOTES,'UTF-8'); ?></a></h1>
  3.   <?php } else { ?>
  4.   <p class="title"><a href="<?php echo get_option('home'); ?>/"><?php echo html_entity_decode(get_option('blogname'),ENT_NOQUOTES,'UTF-8'); ?></a></p>
  5.   <?php } ?>
的第二行保留,其余删除
然后,把<?php echo get_option('home'); ?>替换成.,把a标签中的部分替换成<?php echo $blogname; ?>,即博客名称
再来将<?php bloginfo('description'); ?>替换成<?php echo $bloginfo; ?>
接着,在本例中我们看到一段在php标签内被注释掉的代码:

  1.   <?php /*
  2.   <ul id="navigation">
  3.    <li><a href="/"><?php _e('Home'); ?></a></li>
  4.    <?php wp_list_pages('title_li=&depth=1&sort_column=menu_order'); ?>
  5.   </ul>
  6.   */ ?>

这一段是导航栏,因此我们将php标签以及注释符去掉,接着将<?php _e('Home'); ?>替换成Home(注1),注意此处链接应为./而不是/,补上一个半角逗号
下面有个WP的函数<?php wp_list_pages('title_li=&depth=1&sort_column=menu_order'); ?>,不管它,删了
然后从默认模板中复制一下代码

  1. <?php foreach ($navibar as $key => $val):
  2.    <?php foreach ($navibar as $key => $val):
  3.    if ($val['hide'] == 'y'){continue;}
  4.    if (empty($val['url'])){$val['url'] = './?post='.$key;}
  5.    ?>
  6.    <li class="menus2"><a href="<?php echo $val['url']; ?>" target="<?php echo $val['is_blank']; ?>"><?php echo $val['title']; ?></a></li>
  7.    <?php endforeach;?>
  8.    <?php doAction('navbar', '<li class="menus2">', '</li>'); ?>

刚刚删除的位置,本例中头部导航栏的li无样式,因此删掉 class="menus2"(即将<li class="menus2">替换成<li>),注意有两处
至此,本例中的header.php修改完毕,博客登陆以及管理部分将放在侧边栏
注:
1、此类替换以后会多次用到,编辑器若支持正则替换可将搜索
  1. <\?php _e\('(.*?)'\); \?>
,替换成
  1. \1


第二步:footer.php
凡是得循序渐进,于是第二步就先介绍footer.php吧(其实我是避重就轻 )
打开footer.php,现在头部加上<?php if(!defined('EMLOG_ROOT')) {exit('error!');} ?>
本例中你会看到,从第二行开始就是一段php代码,什么意思呢?很简单,就是载入sidebar_top.php、sidebar_left.php、sidebar_right.php三个文件,这是wordpress的写法,将其替换为emlog的方法
include (TEMPLATEPATH . '/sidebar_top.php');             =>               include getViews('sidebar_top');
另外两个文件以此类推,以后遇到的载入某个页面的函数也以此类推
接下来是id为footer的div了,又是一段php代码,但是很明显,显示的是Powered by WordPress,即是版权,我们需要保留的是模板作者链接,至于这段php代码,直接从默认模板中复制以下代码替换即可
  1. Powered by <a href="http://www.emlog.net" title="emlog <?php echo EMLOG_VERSION;?>">emlog</a>
本例中,我们还需要在复制过来的代码后加上一个英文句号,即.
然后,复制ICP信息,将它加在原作者链接后面吧 
再下面一段,本例中是RSS,记得一楼提到的注1,此处可以用上了,或者手工替换,或者正则替换
然后将第一个RSS链接更改为<?php echo BLOG_URL; ?>rss.php,因为emlog没有评论订阅,所以第二个删掉,再往下看,本例还有一句被注释掉的,为执行时间和查询次数,直接删除即可
接下来,是一句
  1. <?php wp_footer(); ?>
从默认模板中复制出
  1. <?php doAction('index_footer'); ?>
替换即可

至此,footer.php修改完毕




第三步:侧边栏
本例中侧边栏设计三个文件:sidebar_top.php,sidebar_left.php,sidebar_right.php,让我们一步步来看下如何移植
1、sidebar_top.php,打开它,发现只有简短的几句话,先在顶部加上<?php if(!defined('EMLOG_ROOT')) {exit('error!');} ?>(这段代码可以从任意一个默认模板文件的头部获得)
继续往下看,可以发现,这只是一个判断语句以及一个搜索框,移植过程中,我决定将这个搜索框固定,而不是由程序决定,于是,我们需要去掉判断语句,接着将<?php _e("Search"); ?>替换为Search(注2)
可以看到,中间有一句<?php include (TEMPLATEPATH . '/searchform.php'); ?>,此处不再采用将其换成emlog载入页面的方法,而是打开searchform.php,将里面所有内容复制过来进行替换,这实际上是一个搜索表单,还需要进行处理
参考默认模板的搜索表单,在module.php175行,先个form标签加上name="keyform",然后将action值更改为./;接着是第二行,看到一个value的值是由程序生成的,此处的值上上一次搜索的关键词,不管它,直接去掉value,将name值改为keyword;接着是搜索按钮,只需加上onclick="return keyw()" 即可。本例中,源代码为

  1. <form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
  2. <input type="text" value="<?php echo attribute_escape($s); ?>" name="s" id="s" />
  3. <input type="submit" id="searchsubmit" value="<?php _e("Search"); ?>" />
  4. </form>


更改后为
  1. <form method="get" id="searchform" name="keyform" action="./">
  2. <input type="text" name="keyword" id="s" />
  3. <input type="submit" id="searchsubmit" value="Search" onclick="return keyw()" />
  4. </form>

好了,sidebar_top.php到此修改完毕
接下来是sidebar_left.php和sidebar_right.php,之前提过,要将这个模板改为三栏的,这两个文件分别就是两个侧边栏了
打开sidebar_left.php,先在顶部加上<?php if(!defined('EMLOG_ROOT')) {exit('error!');} ?>,往下看代码,很容易发现侧边栏的HTML框架是这样的
  1. <ul>
  2.    <li><h2>标题1</h2>
  3.     <ul>
  4.     内容1
  5.     </ul>
  6.    </li>
  7.    <li><h2>标题2</h2>
  8.     <ul>
  9.     内容2
  10.     </ul>
  11.    </li>
  12. </ul>

那么,只需将最外面的ul标签中的内容用默认模板中side.php里那段php代码,即侧边栏组件显示的代码替换即可
也就是换成如下
  1. <ul>
  2. <?php 
  3. $widgets = !empty($options_cache['widgets1']) ? unserialize($options_cache['widgets1']) : array();
  4. foreach ($widgets as $val)
  5. {
  6. $widget_title = @unserialize($options_cache['widget_title']);
  7. $custom_widget = @unserialize($options_cache['custom_widget']);
  8. if(strpos($val, 'custom_wg_') === 0)
  9. {
  10.   $callback = 'widget_custom_text';
  11.   if(function_exists($callback))
  12.   {
  13.    call_user_func($callback, htmlspecialchars($custom_widget[$val]['title']), $custom_widget[$val]['content'], $val);
  14.   }
  15. }else{
  16.   $callback = 'widget_'.$val;
  17.   if(function_exists($callback))
  18.   {
  19.    preg_match("/^.*\s\((.*)\)/", $widget_title[$val], $matchs);
  20.    $wgTitle = isset($matchs[1]) ? $matchs[1] : $widget_title[$val];
  21.    call_user_func($callback, htmlspecialchars($wgTitle));
  22.   }
  23. }
  24. }
  25. ?>
  26. </ul>

够简单吧,sidebar_right.php如法炮制,只需将侧边栏组件显示代码的第一行替换成
  1. $widgets = !empty($options_cache['widgets2']) ? unserialize($options_cache['widgets2']) : array();

也就是第二个边栏的组件
ok,侧边栏就这样搞定了
注:
2、实际上,WP模板中函数_e(string)就是显示string的内容,相当于echo string,此处字符串表现形式为双引号,如要用注1的正则替换,只需将相应的单引号改为双引号即可。当然,手动替换也OK





第四步:module.php
这个是模板中涉及的函数所在目录,包括侧边栏widgets的显示
我们从默认模板copy一个过来,打开它,先搞定widgets部分
可以看出,widgets部分的框架是

  1. <li><h3><span onclick="showhidediv('id')">标题</span></h3>
  2. <ul id="id">
  3.     内容
  4. </ul>
  5. </li>

与第三步提及的框架基本一致,那么修改很简单,将h3换成h2span去掉(去掉后侧边栏点击标题不再隐藏,保留也行)
剩下无需更改,此处你可以使用全文替换
接下来两个函数为置顶和编辑,可以不必更改
再来是分类,为了适应模板,将两端的方括号去掉,并在链接前面加上in (注意in后面有个空格)
继续跳过两个函数:标签和日志作者,看到相邻日志
打开原模板single.php,搜索previous_post_link(找不到可以打开index.php),这个是就前一篇日志了,看下它的样式,将它复制到module.php里,此处复制的是
  1. <div class="navigation">
  2.     <div class="prev"><?php previous_post_link('%link') ?></div>
  3.     <div class="next"><?php next_post_link('%link') ?></div>
  4.    </div>
然后,将前一篇和后一篇分别替换成emlog的,相邻日志完成
下一个是引用通告,此处先不做更改(WP中将引用作为一个评论显示了,也就是使用相同的样式,而emlog不是,因此等到最后再来调节我们所希望的样式)
接下来就是评论了
打开原模板comments.php,复制出显示评论的一段(一般是在<?php if ($comments) : ?><?php endif; ?>之间,包括它们,记得看下前后有无相关html代码,复制全了),此处为
  1. <h2 id="comments"><?php comments_number(__('No Comments'), __('1 Comment'), __('% Comments')); ?></h2>
  2. <?php if ($comments) : ?>
  3. <ol class="commentlist">
  4.   <?php foreach ($comments as $comment) : ?>
  5.    <li <?php if ($comment->user_id) echo 'class="author"'; ?> id="comment-<?php comment_ID() ?>">
  6.     <span class="avatar"><?php echo get_avatar(get_comment_author_email (), '48'); ?></span>
  7.     <p class="comment-author"><?php comment_author_link() ?></p>
  8.     <p class="comment-data"><a href="#comment-<?php comment_ID() ?>" title=""><?php comment_date() ?> @ <?php comment_time() ?></a></p>
  9.     <?php if ($comment->comment_approved == '0') : ?>
  10.      <span class="await_mod"><?php _e('Awaiting Moderation'); ?></span>
  11.     <?php endif; ?>
  12.     <p><?php comment_text() ?></p>
  13.    </li>
  14.   <?php endforeach; ?>
  15. </ol>
  16. <?php endif; ?>
我们先将这一段代码复制到评论列表函数的的前部(第二行后面)
来看下复制过来的代码,第一行是标题,此模板在标题中显示了评论数目,我们不管它,直接将整个php代码换成“评论:”即可(当然,你也可以自己写判断语句来决定是否显示评论数目),顺便加上一个锚<a name="comment"></a>
  1. <?php foreach ($comments as $comment) : ?>
替换成
  1. <?php
  2. foreach($comments as $key=>$value):
  3. $reply = $value['reply']?"<span>博主回复:{$value['reply']}</span>":'';
  4. ?>
那个博主回复的样式可以自由定制
显示评论的循环列表,li样式里有一个<?php if ($comment->user_id) echo 'class="author"'; ?>,删除之,然后将<?php comment_ID() ?>,替换成<?php echo $value['cid']; ?>,加上一个锚<a name="<?php echo $value['cid']; ?>"></a>
下来一行是头像的,整行删除
下来是作者,从下面的原来的评论列表里复制出如下代码,将其替换原来的<?php comment_author_link() ?>
  1.     <b><?php echo $value['poster']; ?> </b>
  2.     <?php if($value['mail']):?>
  3.     <a href="mailto:<?php echo $value['mail']; ?>" title="发邮件给<?php echo $value['poster']; ?>">Email</a>
  4.     <?php endif;?>
  5.     <?php if($value['url']):?>
  6.     <a href="<?php echo $value['url']; ?>" title="访问<?php echo $value['poster']; ?>的主页" target="_blank">主页</a>
  7.     <?php endif;?>
  8.     </p>
接着是时间,将链接去掉,时间替换成<?php echo $value['date']; ?>
再来有一个判断语句是等待评论审核的,全部删除
接着是评论回复的展示,我使用的html样式与评论时间相同,所以只需复制一段显示时间的代码,将其中的时间替换成回复
  1. <div id="replycomm<?php echo $value['cid']; ?>"><?php echo $reply; ?></div>

再来从原评论列表里复制出前台回复的代码,粘帖到评论回复的下面
  1. <?php if(ROLE == 'admin'): ?>
  2.    <a href="javascript:void(0);" onclick="showhidediv('replybox<?php echo $value['cid']; ?>','reply<?php echo $value['cid']; ?>')">回复</a>
  3.    <div id='replybox<?php echo $value['cid']; ?>' style="display:none;">
  4.    <textarea name="reply<?php echo $value['cid']; ?>" class="input" id="reply<?php echo $value['cid']; ?>" style="overflow-y: hidden;width:360px;height:50px;"><?php echo $value['reply']; ?></textarea>
  5.    <br />
  6.    <a href="javascript:void(0);" onclick="postinfo('./admin/comment.php?action=doreply&cid=<?php echo $value['cid']; ?>&flg=1','reply<?php echo $value['cid']; ?>','replycomm<?php echo $value['cid']; ?>');">提交</a>
  7.    <a href="javascript:void(0);" onclick="showhidediv('replybox<?php echo $value['cid']; ?>')">取消</a>
  8.    </div>
  9.   <?php endif; ?>
最后一步,将前面提到的标题移到<?php if ($comments) : ?>的后面,然后删除原来评论列表,至此评论列表修改完成
最后一个是发表评论表单,打开single.php,搜索comments_template();,这个就是显示评论了,下面就是发表评论表单,复制过去,同评论列表,先放在前部,修改完后再将原来的删除
先将一个判断是否允许评论的php替换了:'open' == $post->comment_status       =>       $allow_remark == 'y'

接下来看到将<?php _e("Leave a comment"); ?>修改为发表评论,然后几句判断是否需要登录的,不管它,删了,记得连同后面与它配对的<?php endif; ?>也删除了
将form的action值改为./index.php?action=addcom,然后会看到一个判断是否已登录的,我们需要的是未登录的部分,将前面的删除,同时删除php的判断语句,然后参照原来的评论表单进行修改,更多时候,可以直接复制过来(此处包括昵称,邮箱,主页),修改前为

  1. <p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
  2.        <label for="author"><?php _e('Name'); ?>: <?php if ($req) _e('(required)'); ?></label></p>
  3.        <p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
  4.        <label for="email"><?php _e('Mail (will not be published)');?>: <?php if ($req) _e('(required)'); ?></label></p>
  5.        <p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
  6.        <label for="url"><?php _e('Website'); ?></label></p>

修改后为

  1.       <p><input type="hidden" name="gid" value="<?php echo $logid; ?>"  size="22" tabindex="1"/>
  2.       <input type="text" name="comname" maxlength="49" value="<?php echo $ckname; ?>"  size="22" tabindex="1">
  3.       <label for="author"><small>昵称</small></label></p>
  4.       <p><input type="text" name="commail"  maxlength="128"  value="<?php echo $ckmail; ?>" size="22" tabindex="2"> 
  5.       <label for="email"><small>邮件地址 (选填)</small></label></p>
  6.       <p><input type="text" name="comurl" maxlength="128"  value="<?php echo $ckurl; ?>" size="22" tabindex="3">
  7.       <label for="url"><small>个人主页 (选填)</small></label></p>

下面是wp允许的标签,全部删除,接着是评论内容的文本输入框,基本不用修改,再来就是一个隐藏的本文ID,即
  1. <input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
将它替换为
  1. <input type="hidden" name="gid" value="<?php echo $logid; ?>" />
或者你前面已经复制过此行代码,此处直接删除之
接着是发表评论的按钮,先别急着修改,把验证码放在前面先,也就是在前面加上<?php echo $cheackimg; ?>
然后将按钮的value值修改为发表评论,并加上onclick="return checkform()" 

接着一是一个wp的插件接口,直接删除,然后会看到如下几句
  1. <?php else : ?>
  2.     <p class="nocomments"><?php _e('Comments are disabled.'); ?></p>
  3.    <?php endif; ?>
保留最后一行,其余删除,然后删除原来的发表评论表单,到此评论发表表单也修改完毕,module.php也修改完毕


第五步:log_list.php
先将index.php重命名为log_list.php,然后打开它
将第一行<?php get_header(); ?>给替换成<?php if(!defined('EMLOG_ROOT')) {exit('error!');}?>
考虑到本模板首页突出显示了第一片日志,因此先打开home.php,复制如下代码


  1. <?php if (empty($_GET) && isset($logs[0])) : ?>
  2. <div class="latest" id="post-<?php $logs[0]['logid']; ?>">
  3.   <p class="details_small">
  4.    on <?php echo date('Y-n-j G:i l', $logs[0]['date']); ?> 
  5.    by <?php blog_author($logs[0]['author']); ?>
  6.    <?php blog_sort($logs[0]['sortid'], $logs[0]['logid']); ?>, 
  7.    <?php blog_tag($logs[0]['logid']); ?>
  8.    <a href="./?post=<?php echo $logs[0]['logid']; ?>#comment">评论(<?php echo $logs[0]['comnum']; ?>)</a>
  9.    <a href="./?post=<?php echo $logs[0]['logid']; ?>#tb">引用(<?php echo $logs[0]['tbcount']; ?>)</a> 
  10.    <a href="./?post=<?php echo $logs[0]['logid']; ?>">浏览(<?php echo $logs[0]['views']; ?>)</a>
  11.   </p>
  12.   <h2><a href="./?post=<?php echo $logs[0]['logid']; ?>" rel="bookmark"><?php echo $logs[0]['log_title']; ?></a></h2>
  13.   <div class="post_content">
  14.   <?php echo $logs[0]['log_description']; ?>
  15.   </div>
  16. </div>
  17. <?php
  18. array_shift($logs);
  19. endif;
  20. ?>

然后就是下面其余博文列表了,看到有个判断是否首页的,WP的首页和其它页调用的不是同一个模板文件,因而样式可能有所不同,此处就需要自己加上判断,修改

  1. <div id="content"<?php if (is_home() && !is_paged()) { ?> class="home"<?php } ?>>


  1. <div id="content"<?php if (empty($_GET)) { ?> class="home"<?php }else{ ?> class="archive"<?php } ?>>

第二个class的值可以在archive.php中获得
接下来是一句判断是否有文章的,删除它,并删掉后面与之配对else语句和endif,即删除

  1. <?php else : ?>
  2.   <?php include (TEMPLATEPATH . '/not_found.php'); ?>
  3. <?php endif; ?>

再来会看到类似

  1.   <?php rewind_posts(); ?>
  2.   <?php
  3.   remove_filter('get_the_excerpt', 'wp_trim_excerpt');
  4.      add_filter('get_the_excerpt', 'gd_short_excerpt');
  5.   ?>

全删除了,接着将<?php while (have_posts()) : the_post(); ?>替换为<?php foreach($logs as $value): ?>(此句可在默认模板中找到)
然后就是一大堆的替换了,诸如<?php the_ID(); ?>换成<?php echo $value['logid']; ?>,<?php the_permalink() ?>换成./?post=<?php echo $value['logid']; ?>等等,参考默认可得,此处贴出替换前后参考
  1. <div class="post list" id="post-<?php the_ID(); ?>">
  2.    <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="ermalink: <?php the_title(); ?>"><?php the_title(); ?></a></h2>
  3.    <p class="details_small">
  4.     on <?php the_date(); ?> 
  5.     by <?php the_author(); ?>
  6.     in <?php the_category(', '); ?>, 
  7.     <?php comments_popup_link(__('Comments (0)'), __('Comments (1)'), __('Comments (%)')); ?>
  8.    </p>
  9.    <?php the_excerpt(); ?>
  10.    <p><a href="<?php the_permalink() ?>" rel="bookmark"><?php _e('Read more...') ;?></a></p>
  11.   </div>


  1.   <div class="post list" id="post-<?php the_ID(); ?>">
  2.    <h2><a href="./?post=<?php echo $value['logid']; ?>" rel="bookmark"><?php echo $value['log_title']; ?></a></h2>
  3.    <p class="details_small">
  4.     on <?php echo date('Y-n-j G:i l', $value['date']); ?> 
  5.     by <?php blog_author($value['author']); ?>
  6.     <?php blog_sort($value['sortid'], $value['logid']); ?>, 
  7.     <?php blog_tag($value['logid']); ?>
  8.     <a href="./?post=<?php echo $value['logid']; ?>#comment">评论(<?php echo $value['comnum']; ?>)</a>
  9.     <a href="./?post=<?php echo $value['logid']; ?>#tb">引用(<?php echo $value['tbcount']; ?>)</a> 
  10.     <a href="./?post=<?php echo $value['logid']; ?>">浏览(<?php echo $value['views']; ?>)</a>
  11.    </p>
  12.    <?php echo $value['log_description']; ?>
  13.    <?php blog_att($value['logid']); ?>
  14.   </div>

应该刚刚在module.php中已经给分类加上了in,所以此处去掉
然后将下面那句<?php endwhile; ?>替换成<?php endforeach; ?>,结束日志列表
再来看到一句判断是否为显示文章的语句<?php if (is_single()) : ?>,下面则是翻页,我们需要的是else后面的部分,其余删除,仅保留文章列表的翻页,并将其中内容修改为emlog的页码,此处也仅贴出修改前后供参考

  1.   <?php if (is_single()) : ?>
  2.   
  3.   <div class="navigation">
  4.    <span class="prev"><?php previous_post_link('%link') ?></span>
  5.    <span class="next"><?php next_post_link('%link') ?></span>
  6.   </div>
  7.   
  8.   <?php else : ?>
  9.   
  10.   <div class="navigation">
  11.    <div class="prev"><?php next_posts_link('« Previous posts') ?></div>
  12.    <div class="next"><?php previous_posts_link('Next posts »') ?></div>
  13.   </div>
  14.   
  15.   <?php endif; ?>


  1.   <div class="navigation">
  2.    <?php echo $page_url;?>
  3.   </div>

最后,将最后一句<?php get_footer(); ?>替换成<?php include getViews('footer'); ?>即可
注:
时间格式可以自由控制,参考php的date函数
至此,log_list.php编辑完毕,此时,如果修改正确,你已经可以在首页预览此模板的效果了





第六步:echo_log.php及page.php


echo_log.php有两个方法:一是修改log_list.php,二是修改原模板single.php,这里介绍第二个
single.php重命名为echo_log.php打开它,将第一行<?php get_header(); ?>给替换成<?php if(!defined('EMLOG_ROOT')) {exit('error!');}?>
同第五步,删掉判断是否有文章的相关语句,分别是接下来的

  1. <?php if (have_posts()) : ?>
以及后面的

  1. <?php else : ?>
  2.   <?php include (TEMPLATEPATH . '/not_found.php'); ?>
  3. <?php endif; ?>

接着删掉<?php the_post(); ?>,继续往下看,同第五步,参考默认模板echo_log.php修改相应php代码,修改前后如下

  1.    <div class="post" id="post-<?php the_ID(); ?>">
  2.     <p class="details_small">
  3.      on <?php the_date(); ?> 
  4.      by <?php the_author(); ?>
  5.      in <?php the_category(', '); ?>, 
  6.      <?php comments_popup_link(__('Comments (0)'), __('Comments (1)'), __('Comments (%)')); ?>
  7.     </p>
  8.     <h1><?php the_title(); ?></h1>
  9.     <div class="post_content">
  10.     <?php the_content(); ?>
  11.     </div>
  12.     <p><?php the_tags('Tags: ', ', ', '<br />'); ?></p>
  13.     <?php wp_link_pages(array('before' => '<p><strong>ages:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>
  14.    </div>


  1.   <div id="content" class="single">
  2.    <div class="post" id="post-<?php echo $logid; ?>">
  3.     <p class="details_small">
  4.      on <?php echo date('Y-n-j G:i l', $date); ?> 
  5.      by <?php blog_author($author); ?>
  6.      <?php blog_sort($sortid, $logid); ?>
  7.     </p>
  8.     <h1><?php echo $log_title; ?></h1>
  9.     <div class="post_content">
  10.     <?php echo $log_content; ?>
  11.     <?php blog_att($logid); ?>
  12.     <?php doAction('log_related'); ?>
  13.    </div>
  14.     <p><?php blog_tag($logid); ?></p>
  15.   </div>

下一句是评论表单<?php comments_template(); ?>,替换成

  1. <?php blog_trackback(); ?>
  2. <?php blog_comments(); ?>

下来是评论表单,之前第四步用到过这段代码,现在全部删除,用<?php if ($allow_remark == 'y'){blog_comments_post();}?>替换
在下来是相邻日志,保留前后的div,中间的用<?php neighbor_log(); ?>替换,贴出修改前后的代码

  1.    <div class="navigation">
  2.     <div class="prev"><?php previous_post_link('%link') ?></div>
  3.     <div class="next"><?php next_post_link('%link') ?></div>
  4.    </div>

  1.     <div class="navigation">
  2.     <?php neighbor_log(); ?>
  3.    </div>

最后,将<?php get_footer(); ?>替换成<?php include getViews('footer'); ?>
至此,echo_log.php修改完成
下面是page.php,复制一个echo_log.php,重命名为page.php(删掉原有的page.php)
打开它,删除如下代码即可:
<?php echo date('Y-n-j G:i l', $date); ?> 
<?php editflg($logid,$author); ?>
<?php blog_sort($sortid, $logid); ?>
<?php doAction('log_related'); ?>
<?php blog_tag($logid); ?>
<?php blog_trackback(); ?>
<?php neighbor_log(); ?>
这些代码附近的一些相关的html也要删除,如本例中的

  1.    <div class="navigation">
  2.     <?php neighbor_log(); ?>
  3.    </div>

应全部删除
那么第六步也完成了





第七步:整理
1、遗漏部分:
之前有一个引用的地方没有修改,现在来修改它,首先给测试的emlog发送一个引用,然后打开那篇日志,看看引用显示的效果
本例中如图:
引用地址显示还行,但是下面的显示不尽人意,那么回去module.php,修改html样式吧 ,在此,我使用评论列表的样式
修改后:
这样引用修改完毕
还漏了什么呢?日志编辑标记,对,就是这个,从默认模板log_list.php和echo_log.php分别找到如下代码

  1. <?php editflg($value['logid'],$value['author']); ?>


  1. <?php editflg($logid,$author); ?>

加在合适的位置吧
2、修饰侧边栏
主要是html样式,更多情况下,要修饰的只有日历,twitter和blogger
先说后两者,主要问题是发表唠叨和更改状态的那个输入框,改个合适的宽度就OK了
然后是日历,先从默认模板的css文件复制过来相应代码(最后10行),粘帖到新模板中,然后调成一个合适的就OK了
像这样就挺合适的:
3、删除无用文件及代码
文件包括home.php,single.php,archive.php,archives.php等与本教程中未提及的原模板文件
代码就是style.css里前几行注释
4、缩略图
这个怎么做我就不说了,我制图不好,直接用原版的,改成preview.jpg
5、测试
测试各个页面是否显示正常,我一般是写一篇包括图片附件,文件附件,评论,引用等等的日志来测试日志显示页面,记得测试各个浏览器兼容性,有时候还要适当的改变样式,本例中,我最后将导航栏移到sidebar_top.php了

本教程到此完毕,同时意味着一个新的模板gonzo-daily完成了

复制代码 从emlog的默认模板中的header.php,复制出前18行到目标模板最前面,即

  1. <?php
  2. /*
  3. Template Name:默认模板
  4. Description:这是emlog的默认模板,简洁明快 ……
  5. Author:emlog开发小组
  6. Author Url:http://www.emlog.net
  7. Sidebar Amount:1
  8. */
  9. if(!defined('EMLOG_ROOT')) {exit('error!');}
  10. require_once (getViews('module'));
  11. ?>
  12. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  13. <html xmlns="http://www.w3.org/1999/xhtml">
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  16. <meta name="keywords" content="<?php echo $site_key; ?>" />
  17. <meta name="generator" content="emlog" />
  18. <title><?php echo $blogtitle; ?></title>

前几行中的注释部分因情况而异有所删改,本例中,因为目标模板三栏(实际是2栏,但是我想把它改为三栏),所以保留Sidebar Amount,并将其值设置为2
然后将CSS样式的代码用默认模板中的替换,本例中用
  1. <link href="<?php echo CERTEMPLATE_URL; ?>/main.css" rel="stylesheet" type="text/css" />
替换
  1. <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="all" />
并将main.css修改为style.css
再往下,会看到一句RSS的,同CSS部分,用默认的替换之
继续往下看,有一句pingback的,删除
接下来,复制默认模板中的
  1. <script src="<?php echo BLOG_URL; ?>lib/js/common_tpl.js" type="text/javascript"></script>

到目标模板
接着往下看,有一句
  1. <?php wp_head(); ?>
换成默认模板的
  1. <?php doAction('index_head'); ?>
再往下看,就到头部的博客名称和博客描述这块了
本例中,博客名称使用了if语句判断以在不同模式下显示不同样式,我在本地架设的WP上验证了两种样式的一致性,于是我们采取第一种
即将代码

  1. <?php if (is_home() || is_page_template('archives.php') ){ ?>
  2.   <h1><a href="<?php echo get_option('home'); ?>/"><?php echo html_entity_decode(get_option('blogname'),ENT_NOQUOTES,'UTF-8'); ?></a></h1>
  3.   <?php } else { ?>
  4.   <p class="title"><a href="<?php echo get_option('home'); ?>/"><?php echo html_entity_decode(get_option('blogname'),ENT_NOQUOTES,'UTF-8'); ?></a></p>
  5.   <?php } ?>
的第二行保留,其余删除
然后,把<?php echo get_option('home'); ?>替换成.,把a标签中的部分替换成<?php echo $blogname; ?>,即博客名称
再来将<?php bloginfo('description'); ?>替换成<?php echo $bloginfo; ?>
接着,在本例中我们看到一段在php标签内被注释掉的代码:

  1.   <?php /*
  2.   <ul id="navigation">
  3.    <li><a href="/"><?php _e('Home'); ?></a></li>
  4.    <?php wp_list_pages('title_li=&depth=1&sort_column=menu_order'); ?>
  5.   </ul>
  6.   */ ?>

这一段是导航栏,因此我们将php标签以及注释符去掉,接着将<?php _e('Home'); ?>替换成Home(注1),注意此处链接应为./而不是/,补上一个半角逗号
下面有个WP的函数<?php wp_list_pages('title_li=&depth=1&sort_column=menu_order'); ?>,不管它,删了
然后从默认模板中复制一下代码

  1. <?php foreach ($navibar as $key => $val):
  2.    <?php foreach ($navibar as $key => $val):
  3.    if ($val['hide'] == 'y'){continue;}
  4.    if (empty($val['url'])){$val['url'] = './?post='.$key;}
  5.    ?>
  6.    <li class="menus2"><a href="<?php echo $val['url']; ?>" target="<?php echo $val['is_blank']; ?>"><?php echo $val['title']; ?></a></li>
  7.    <?php endforeach;?>
  8.    <?php doAction('navbar', '<li class="menus2">', '</li>'); ?>

刚刚删除的位置,本例中头部导航栏的li无样式,因此删掉 class="menus2"(即将<li class="menus2">替换成<li>),注意有两处
至此,本例中的header.php修改完毕,博客登陆以及管理部分将放在侧边栏
注:
1、此类替换以后会多次用到,编辑器若支持正则替换可将搜索
  1. <\?php _e\('(.*?)'\); \?>
,替换成
  1. \1


第二步:footer.php
凡是得循序渐进,于是第二步就先介绍footer.php吧(其实我是避重就轻 )
打开footer.php,现在头部加上<?php if(!defined('EMLOG_ROOT')) {exit('error!');} ?>
本例中你会看到,从第二行开始就是一段php代码,什么意思呢?很简单,就是载入sidebar_top.php、sidebar_left.php、sidebar_right.php三个文件,这是wordpress的写法,将其替换为emlog的方法
include (TEMPLATEPATH . '/sidebar_top.php');             =>               include getViews('sidebar_top');
另外两个文件以此类推,以后遇到的载入某个页面的函数也以此类推
接下来是id为footer的div了,又是一段php代码,但是很明显,显示的是Powered by WordPress,即是版权,我们需要保留的是模板作者链接,至于这段php代码,直接从默认模板中复制以下代码替换即可
  1. Powered by <a href="http://www.emlog.net" title="emlog <?php echo EMLOG_VERSION;?>">emlog</a>
本例中,我们还需要在复制过来的代码后加上一个英文句号,即.
然后,复制ICP信息,将它加在原作者链接后面吧 
再下面一段,本例中是RSS,记得一楼提到的注1,此处可以用上了,或者手工替换,或者正则替换
然后将第一个RSS链接更改为<?php echo BLOG_URL; ?>rss.php,因为emlog没有评论订阅,所以第二个删掉,再往下看,本例还有一句被注释掉的,为执行时间和查询次数,直接删除即可
接下来,是一句
  1. <?php wp_footer(); ?>
从默认模板中复制出
  1. <?php doAction('index_footer'); ?>
替换即可

至此,footer.php修改完毕




第三步:侧边栏
本例中侧边栏设计三个文件:sidebar_top.php,sidebar_left.php,sidebar_right.php,让我们一步步来看下如何移植
1、sidebar_top.php,打开它,发现只有简短的几句话,先在顶部加上<?php if(!defined('EMLOG_ROOT')) {exit('error!');} ?>(这段代码可以从任意一个默认模板文件的头部获得)
继续往下看,可以发现,这只是一个判断语句以及一个搜索框,移植过程中,我决定将这个搜索框固定,而不是由程序决定,于是,我们需要去掉判断语句,接着将<?php _e("Search"); ?>替换为Search(注2)
可以看到,中间有一句<?php include (TEMPLATEPATH . '/searchform.php'); ?>,此处不再采用将其换成emlog载入页面的方法,而是打开searchform.php,将里面所有内容复制过来进行替换,这实际上是一个搜索表单,还需要进行处理
参考默认模板的搜索表单,在module.php175行,先个form标签加上name="keyform",然后将action值更改为./;接着是第二行,看到一个value的值是由程序生成的,此处的值上上一次搜索的关键词,不管它,直接去掉value,将name值改为keyword;接着是搜索按钮,只需加上onclick="return keyw()" 即可。本例中,源代码为

  1. <form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
  2. <input type="text" value="<?php echo attribute_escape($s); ?>" name="s" id="s" />
  3. <input type="submit" id="searchsubmit" value="<?php _e("Search"); ?>" />
  4. </form>


更改后为
  1. <form method="get" id="searchform" name="keyform" action="./">
  2. <input type="text" name="keyword" id="s" />
  3. <input type="submit" id="searchsubmit" value="Search" onclick="return keyw()" />
  4. </form>

好了,sidebar_top.php到此修改完毕
接下来是sidebar_left.php和sidebar_right.php,之前提过,要将这个模板改为三栏的,这两个文件分别就是两个侧边栏了
打开sidebar_left.php,先在顶部加上<?php if(!defined('EMLOG_ROOT')) {exit('error!');} ?>,往下看代码,很容易发现侧边栏的HTML框架是这样的
  1. <ul>
  2.    <li><h2>标题1</h2>
  3.     <ul>
  4.     内容1
  5.     </ul>
  6.    </li>
  7.    <li><h2>标题2</h2>
  8.     <ul>
  9.     内容2
  10.     </ul>
  11.    </li>
  12. </ul>

那么,只需将最外面的ul标签中的内容用默认模板中side.php里那段php代码,即侧边栏组件显示的代码替换即可
也就是换成如下
  1. <ul>
  2. <?php 
  3. $widgets = !empty($options_cache['widgets1']) ? unserialize($options_cache['widgets1']) : array();
  4. foreach ($widgets as $val)
  5. {
  6. $widget_title = @unserialize($options_cache['widget_title']);
  7. $custom_widget = @unserialize($options_cache['custom_widget']);
  8. if(strpos($val, 'custom_wg_') === 0)
  9. {
  10.   $callback = 'widget_custom_text';
  11.   if(function_exists($callback))
  12.   {
  13.    call_user_func($callback, htmlspecialchars($custom_widget[$val]['title']), $custom_widget[$val]['content'], $val);
  14.   }
  15. }else{
  16.   $callback = 'widget_'.$val;
  17.   if(function_exists($callback))
  18.   {
  19.    preg_match("/^.*\s\((.*)\)/", $widget_title[$val], $matchs);
  20.    $wgTitle = isset($matchs[1]) ? $matchs[1] : $widget_title[$val];
  21.    call_user_func($callback, htmlspecialchars($wgTitle));
  22.   }
  23. }
  24. }
  25. ?>
  26. </ul>

够简单吧,sidebar_right.php如法炮制,只需将侧边栏组件显示代码的第一行替换成
  1. $widgets = !empty($options_cache['widgets2']) ? unserialize($options_cache['widgets2']) : array();

也就是第二个边栏的组件
ok,侧边栏就这样搞定了
注:
2、实际上,WP模板中函数_e(string)就是显示string的内容,相当于echo string,此处字符串表现形式为双引号,如要用注1的正则替换,只需将相应的单引号改为双引号即可。当然,手动替换也OK





第四步:module.php
这个是模板中涉及的函数所在目录,包括侧边栏widgets的显示
我们从默认模板copy一个过来,打开它,先搞定widgets部分
可以看出,widgets部分的框架是

  1. <li><h3><span onclick="showhidediv('id')">标题</span></h3>
  2. <ul id="id">
  3.     内容
  4. </ul>
  5. </li>

与第三步提及的框架基本一致,那么修改很简单,将h3换成h2span去掉(去掉后侧边栏点击标题不再隐藏,保留也行)
剩下无需更改,此处你可以使用全文替换
接下来两个函数为置顶和编辑,可以不必更改
再来是分类,为了适应模板,将两端的方括号去掉,并在链接前面加上in (注意in后面有个空格)
继续跳过两个函数:标签和日志作者,看到相邻日志
打开原模板single.php,搜索previous_post_link(找不到可以打开index.php),这个是就前一篇日志了,看下它的样式,将它复制到module.php里,此处复制的是
  1. <div class="navigation">
  2.     <div class="prev"><?php previous_post_link('%link') ?></div>
  3.     <div class="next"><?php next_post_link('%link') ?></div>
  4.    </div>
然后,将前一篇和后一篇分别替换成emlog的,相邻日志完成
下一个是引用通告,此处先不做更改(WP中将引用作为一个评论显示了,也就是使用相同的样式,而emlog不是,因此等到最后再来调节我们所希望的样式)
接下来就是评论了
打开原模板comments.php,复制出显示评论的一段(一般是在<?php if ($comments) : ?><?php endif; ?>之间,包括它们,记得看下前后有无相关html代码,复制全了),此处为
  1. <h2 id="comments"><?php comments_number(__('No Comments'), __('1 Comment'), __('% Comments')); ?></h2>
  2. <?php if ($comments) : ?>
  3. <ol class="commentlist">
  4.   <?php foreach ($comments as $comment) : ?>
  5.    <li <?php if ($comment->user_id) echo 'class="author"'; ?> id="comment-<?php comment_ID() ?>">
  6.     <span class="avatar"><?php echo get_avatar(get_comment_author_email (), '48'); ?></span>
  7.     <p class="comment-author"><?php comment_author_link() ?></p>
  8.     <p class="comment-data"><a href="#comment-<?php comment_ID() ?>" title=""><?php comment_date() ?> @ <?php comment_time() ?></a></p>
  9.     <?php if ($comment->comment_approved == '0') : ?>
  10.      <span class="await_mod"><?php _e('Awaiting Moderation'); ?></span>
  11.     <?php endif; ?>
  12.     <p><?php comment_text() ?></p>
  13.    </li>
  14.   <?php endforeach; ?>
  15. </ol>
  16. <?php endif; ?>
我们先将这一段代码复制到评论列表函数的的前部(第二行后面)
来看下复制过来的代码,第一行是标题,此模板在标题中显示了评论数目,我们不管它,直接将整个php代码换成“评论:”即可(当然,你也可以自己写判断语句来决定是否显示评论数目),顺便加上一个锚<a name="comment"></a>
  1. <?php foreach ($comments as $comment) : ?>
替换成
  1. <?php
  2. foreach($comments as $key=>$value):
  3. $reply = $value['reply']?"<span>博主回复:{$value['reply']}</span>":'';
  4. ?>
那个博主回复的样式可以自由定制
显示评论的循环列表,li样式里有一个<?php if ($comment->user_id) echo 'class="author"'; ?>,删除之,然后将<?php comment_ID() ?>,替换成<?php echo $value['cid']; ?>,加上一个锚<a name="<?php echo $value['cid']; ?>"></a>
下来一行是头像的,整行删除
下来是作者,从下面的原来的评论列表里复制出如下代码,将其替换原来的<?php comment_author_link() ?>
  1.     <b><?php echo $value['poster']; ?> </b>
  2.     <?php if($value['mail']):?>
  3.     <a href="mailto:<?php echo $value['mail']; ?>" title="发邮件给<?php echo $value['poster']; ?>">Email</a>
  4.     <?php endif;?>
  5.     <?php if($value['url']):?>
  6.     <a href="<?php echo $value['url']; ?>" title="访问<?php echo $value['poster']; ?>的主页" target="_blank">主页</a>
  7.     <?php endif;?>
  8.     </p>
接着是时间,将链接去掉,时间替换成<?php echo $value['date']; ?>
再来有一个判断语句是等待评论审核的,全部删除
接着是评论回复的展示,我使用的html样式与评论时间相同,所以只需复制一段显示时间的代码,将其中的时间替换成回复
  1. <div id="replycomm<?php echo $value['cid']; ?>"><?php echo $reply; ?></div>

再来从原评论列表里复制出前台回复的代码,粘帖到评论回复的下面
  1. <?php if(ROLE == 'admin'): ?>
  2.    <a href="javascript:void(0);" onclick="showhidediv('replybox<?php echo $value['cid']; ?>','reply<?php echo $value['cid']; ?>')">回复</a>
  3.    <div id='replybox<?php echo $value['cid']; ?>' style="display:none;">
  4.    <textarea name="reply<?php echo $value['cid']; ?>" class="input" id="reply<?php echo $value['cid']; ?>" style="overflow-y: hidden;width:360px;height:50px;"><?php echo $value['reply']; ?></textarea>
  5.    <br />
  6.    <a href="javascript:void(0);" onclick="postinfo('./admin/comment.php?action=doreply&cid=<?php echo $value['cid']; ?>&flg=1','reply<?php echo $value['cid']; ?>','replycomm<?php echo $value['cid']; ?>');">提交</a>
  7.    <a href="javascript:void(0);" onclick="showhidediv('replybox<?php echo $value['cid']; ?>')">取消</a>
  8.    </div>
  9.   <?php endif; ?>
最后一步,将前面提到的标题移到<?php if ($comments) : ?>的后面,然后删除原来评论列表,至此评论列表修改完成
最后一个是发表评论表单,打开single.php,搜索comments_template();,这个就是显示评论了,下面就是发表评论表单,复制过去,同评论列表,先放在前部,修改完后再将原来的删除
先将一个判断是否允许评论的php替换了:'open' == $post->comment_status       =>       $allow_remark == 'y'

接下来看到将<?php _e("Leave a comment"); ?>修改为发表评论,然后几句判断是否需要登录的,不管它,删了,记得连同后面与它配对的<?php endif; ?>也删除了
将form的action值改为./index.php?action=addcom,然后会看到一个判断是否已登录的,我们需要的是未登录的部分,将前面的删除,同时删除php的判断语句,然后参照原来的评论表单进行修改,更多时候,可以直接复制过来(此处包括昵称,邮箱,主页),修改前为

  1. <p><input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
  2.        <label for="author"><?php _e('Name'); ?>: <?php if ($req) _e('(required)'); ?></label></p>
  3.        <p><input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
  4.        <label for="email"><?php _e('Mail (will not be published)');?>: <?php if ($req) _e('(required)'); ?></label></p>
  5.        <p><input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
  6.        <label for="url"><?php _e('Website'); ?></label></p>

修改后为

  1.       <p><input type="hidden" name="gid" value="<?php echo $logid; ?>"  size="22" tabindex="1"/>
  2.       <input type="text" name="comname" maxlength="49" value="<?php echo $ckname; ?>"  size="22" tabindex="1">
  3.       <label for="author"><small>昵称</small></label></p>
  4.       <p><input type="text" name="commail"  maxlength="128"  value="<?php echo $ckmail; ?>" size="22" tabindex="2"> 
  5.       <label for="email"><small>邮件地址 (选填)</small></label></p>
  6.       <p><input type="text" name="comurl" maxlength="128"  value="<?php echo $ckurl; ?>" size="22" tabindex="3">
  7.       <label for="url"><small>个人主页 (选填)</small></label></p>

下面是wp允许的标签,全部删除,接着是评论内容的文本输入框,基本不用修改,再来就是一个隐藏的本文ID,即
  1. <input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
将它替换为
  1. <input type="hidden" name="gid" value="<?php echo $logid; ?>" />
或者你前面已经复制过此行代码,此处直接删除之
接着是发表评论的按钮,先别急着修改,把验证码放在前面先,也就是在前面加上<?php echo $cheackimg; ?>
然后将按钮的value值修改为发表评论,并加上onclick="return checkform()" 

接着一是一个wp的插件接口,直接删除,然后会看到如下几句
  1. <?php else : ?>
  2.     <p class="nocomments"><?php _e('Comments are disabled.'); ?></p>
  3.    <?php endif; ?>

保留最后一行,其余删除,然后删除原来的发表评论表单,到此评论发表表单也修改完毕,module.php也修改完毕


第五步:log_list.php
先将index.php重命名为log_list.php,然后打开它
将第一行<?php get_header(); ?>给替换成<?php if(!defined('EMLOG_ROOT')) {exit('error!');}?>
考虑到本模板首页突出显示了第一片日志,因此先打开home.php,复制如下代码


  1. <?php if (empty($_GET) && isset($logs[0])) : ?>
  2. <div class="latest" id="post-<?php $logs[0]['logid']; ?>">
  3.   <p class="details_small">
  4.    on <?php echo date('Y-n-j G:i l', $logs[0]['date']); ?> 
  5.    by <?php blog_author($logs[0]['author']); ?>
  6.    <?php blog_sort($logs[0]['sortid'], $logs[0]['logid']); ?>, 
  7.    <?php blog_tag($logs[0]['logid']); ?>
  8.    <a href="./?post=<?php echo $logs[0]['logid']; ?>#comment">评论(<?php echo $logs[0]['comnum']; ?>)</a>
  9.    <a href="./?post=<?php echo $logs[0]['logid']; ?>#tb">引用(<?php echo $logs[0]['tbcount']; ?>)</a> 
  10.    <a href="./?post=<?php echo $logs[0]['logid']; ?>">浏览(<?php echo $logs[0]['views']; ?>)</a>
  11.   </p>
  12.   <h2><a href="./?post=<?php echo $logs[0]['logid']; ?>" rel="bookmark"><?php echo $logs[0]['log_title']; ?></a></h2>
  13.   <div class="post_content">
  14.   <?php echo $logs[0]['log_description']; ?>
  15.   </div>
  16. </div>
  17. <?php
  18. array_shift($logs);
  19. endif;
  20. ?>

然后就是下面其余博文列表了,看到有个判断是否首页的,WP的首页和其它页调用的不是同一个模板文件,因而样式可能有所不同,此处就需要自己加上判断,修改

  1. <div id="content"<?php if (is_home() && !is_paged()) { ?> class="home"<?php } ?>>


  1. <div id="content"<?php if (empty($_GET)) { ?> class="home"<?php }else{ ?> class="archive"<?php } ?>>

第二个class的值可以在archive.php中获得
接下来是一句判断是否有文章的,删除它,并删掉后面与之配对else语句和endif,即删除

  1. <?php else : ?>
  2.   <?php include (TEMPLATEPATH . '/not_found.php'); ?>
  3. <?php endif; ?>

再来会看到类似

  1.   <?php rewind_posts(); ?>
  2.   <?php
  3.   remove_filter('get_the_excerpt', 'wp_trim_excerpt');
  4.      add_filter('get_the_excerpt', 'gd_short_excerpt');
  5.   ?>

全删除了,接着将<?php while (have_posts()) : the_post(); ?>替换为<?php foreach($logs as $value): ?>(此句可在默认模板中找到)
然后就是一大堆的替换了,诸如<?php the_ID(); ?>换成<?php echo $value['logid']; ?>,<?php the_permalink() ?>换成./?post=<?php echo $value['logid']; ?>等等,参考默认可得,此处贴出替换前后参考
  1. <div class="post list" id="post-<?php the_ID(); ?>">
  2.    <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="ermalink: <?php the_title(); ?>"><?php the_title(); ?></a></h2>
  3.    <p class="details_small">
  4.     on <?php the_date(); ?> 
  5.     by <?php the_author(); ?>
  6.     in <?php the_category(', '); ?>, 
  7.     <?php comments_popup_link(__('Comments (0)'), __('Comments (1)'), __('Comments (%)')); ?>
  8.    </p>
  9.    <?php the_excerpt(); ?>
  10.    <p><a href="<?php the_permalink() ?>" rel="bookmark"><?php _e('Read more...') ;?></a></p>
  11.   </div>


  1.   <div class="post list" id="post-<?php the_ID(); ?>">
  2.    <h2><a href="./?post=<?php echo $value['logid']; ?>" rel="bookmark"><?php echo $value['log_title']; ?></a></h2>
  3.    <p class="details_small">
  4.     on <?php echo date('Y-n-j G:i l', $value['date']); ?> 
  5.     by <?php blog_author($value['author']); ?>
  6.     <?php blog_sort($value['sortid'], $value['logid']); ?>, 
  7.     <?php blog_tag($value['logid']); ?>
  8.     <a href="./?post=<?php echo $value['logid']; ?>#comment">评论(<?php echo $value['comnum']; ?>)</a>
  9.     <a href="./?post=<?php echo $value['logid']; ?>#tb">引用(<?php echo $value['tbcount']; ?>)</a> 
  10.     <a href="./?post=<?php echo $value['logid']; ?>">浏览(<?php echo $value['views']; ?>)</a>
  11.    </p>
  12.    <?php echo $value['log_description']; ?>
  13.    <?php blog_att($value['logid']); ?>
  14.   </div>

应该刚刚在module.php中已经给分类加上了in,所以此处去掉
然后将下面那句<?php endwhile; ?>替换成<?php endforeach; ?>,结束日志列表
再来看到一句判断是否为显示文章的语句<?php if (is_single()) : ?>,下面则是翻页,我们需要的是else后面的部分,其余删除,仅保留文章列表的翻页,并将其中内容修改为emlog的页码,此处也仅贴出修改前后供参考

  1.   <?php if (is_single()) : ?>
  2.   
  3.   <div class="navigation">
  4.    <span class="prev"><?php previous_post_link('%link') ?></span>
  5.    <span class="next"><?php next_post_link('%link') ?></span>
  6.   </div>
  7.   
  8.   <?php else : ?>
  9.   
  10.   <div class="navigation">
  11.    <div class="prev"><?php next_posts_link('« Previous posts') ?></div>
  12.    <div class="next"><?php previous_posts_link('Next posts »') ?></div>
  13.   </div>
  14.   
  15.   <?php endif; ?>


  1.   <div class="navigation">
  2.    <?php echo $page_url;?>
  3.   </div>

最后,将最后一句<?php get_footer(); ?>替换成<?php include getViews('footer'); ?>即可
注:
时间格式可以自由控制,参考php的date函数
至此,log_list.php编辑完毕,此时,如果修改正确,你已经可以在首页预览此模板的效果了





第六步:echo_log.php及page.php


echo_log.php有两个方法:一是修改log_list.php,二是修改原模板single.php,这里介绍第二个
single.php重命名为echo_log.php打开它,将第一行<?php get_header(); ?>给替换成<?php if(!defined('EMLOG_ROOT')) {exit('error!');}?>
同第五步,删掉判断是否有文章的相关语句,分别是接下来的

  1. <?php if (have_posts()) : ?>
以及后面的

  1. <?php else : ?>
  2.   <?php include (TEMPLATEPATH . '/not_found.php'); ?>
  3. <?php endif; ?>

接着删掉<?php the_post(); ?>,继续往下看,同第五步,参考默认模板echo_log.php修改相应php代码,修改前后如下

  1.    <div class="post" id="post-<?php the_ID(); ?>">
  2.     <p class="details_small">
  3.      on <?php the_date(); ?> 
  4.      by <?php the_author(); ?>
  5.      in <?php the_category(', '); ?>, 
  6.      <?php comments_popup_link(__('Comments (0)'), __('Comments (1)'), __('Comments (%)')); ?>
  7.     </p>
  8.     <h1><?php the_title(); ?></h1>
  9.     <div class="post_content">
  10.     <?php the_content(); ?>
  11.     </div>
  12.     <p><?php the_tags('Tags: ', ', ', '<br />'); ?></p>
  13.     <?php wp_link_pages(array('before' => '<p><strong>ages:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>
  14.    </div>


  1.   <div id="content" class="single">
  2.    <div class="post" id="post-<?php echo $logid; ?>">
  3.     <p class="details_small">
  4.      on <?php echo date('Y-n-j G:i l', $date); ?> 
  5.      by <?php blog_author($author); ?>
  6.      <?php blog_sort($sortid, $logid); ?>
  7.     </p>
  8.     <h1><?php echo $log_title; ?></h1>
  9.     <div class="post_content">
  10.     <?php echo $log_content; ?>
  11.     <?php blog_att($logid); ?>
  12.     <?php doAction('log_related'); ?>
  13.    </div>
  14.     <p><?php blog_tag($logid); ?></p>
  15.   </div>

下一句是评论表单<?php comments_template(); ?>,替换成

  1. <?php blog_trackback(); ?>
  2. <?php blog_comments(); ?>

下来是评论表单,之前第四步用到过这段代码,现在全部删除,用<?php if ($allow_remark == 'y'){blog_comments_post();}?>替换
在下来是相邻日志,保留前后的div,中间的用<?php neighbor_log(); ?>替换,贴出修改前后的代码

  1.    <div class="navigation">
  2.     <div class="prev"><?php previous_post_link('%link') ?></div>
  3.     <div class="next"><?php next_post_link('%link') ?></div>
  4.    </div>

  1.     <div class="navigation">
  2.     <?php neighbor_log(); ?>
  3.    </div>

最后,将<?php get_footer(); ?>替换成<?php include getViews('footer'); ?>
至此,echo_log.php修改完成
下面是page.php,复制一个echo_log.php,重命名为page.php(删掉原有的page.php)
打开它,删除如下代码即可:
<?php echo date('Y-n-j G:i l', $date); ?> 
<?php editflg($logid,$author); ?>
<?php blog_sort($sortid, $logid); ?>
<?php doAction('log_related'); ?>
<?php blog_tag($logid); ?>
<?php blog_trackback(); ?>
<?php neighbor_log(); ?>
这些代码附近的一些相关的html也要删除,如本例中的

  1.    <div class="navigation">
  2.     <?php neighbor_log(); ?>
  3.    </div>

应全部删除
那么第六步也完成了





第七步:整理
1、遗漏部分:
之前有一个引用的地方没有修改,现在来修改它,首先给测试的emlog发送一个引用,然后打开那篇日志,看看引用显示的效果
本例中如图:
引用地址显示还行,但是下面的显示不尽人意,那么回去module.php,修改html样式吧 ,在此,我使用评论列表的样式
修改后:
这样引用修改完毕
还漏了什么呢?日志编辑标记,对,就是这个,从默认模板log_list.php和echo_log.php分别找到如下代码

  1. <?php editflg($value['logid'],$value['author']); ?>


  1. <?php editflg($logid,$author); ?>

加在合适的位置吧
2、修饰侧边栏
主要是html样式,更多情况下,要修饰的只有日历,twitter和blogger
先说后两者,主要问题是发表唠叨和更改状态的那个输入框,改个合适的宽度就OK了
然后是日历,先从默认模板的css文件复制过来相应代码(最后10行),粘帖到新模板中,然后调成一个合适的就OK了
像这样就挺合适的:
3、删除无用文件及代码
文件包括home.php,single.php,archive.php,archives.php等与本教程中未提及的原模板文件
代码就是style.css里前几行注释
4、缩略图
这个怎么做我就不说了,我制图不好,直接用原版的,改成preview.jpg
5、测试
测试各个页面是否显示正常,我一般是写一篇包括图片附件,文件附件,评论,引用等等的日志来测试日志显示页面,记得测试各个浏览器兼容性,有时候还要适当的改变样式,本例中,我最后将导航栏移到sidebar_top.php了

本教程到此完毕,同时意味着一个新的模板gonzo-daily完成了

发表评论


粤ICP备15078261号 Powered by 黑暗之夜
Theme by 殷德瑶博客