emlog的模板确实太少,现在有效的方法确实就是从WP的免费模板移植过来,有两个好处:移植简单以及不用担心版权问题。 下面,我以gonzo-daily为例,一步步教大家如何从WP移植到emlog 声明: 准备工作: 第一步header.php:
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码 |
第二步: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代码,直接从默认模板中复制以下代码替换即可
- Powered by <a href="http://www.emlog.net" rel="external nofollow" title="emlog <?php echo EMLOG_VERSION;?>">emlog</a>
复制代码
本例中,我们还需要在复制过来的代码后加上一个英文句号,即.
然后,复制ICP信息,将它加在原作者链接后面吧
再下面一段,本例中是RSS,记得一楼提到的注1,此处可以用上了,或者手工替换,或者正则替换
然后将第一个RSS链接更改为<?php echo BLOG_URL; ?>rss.php,因为emlog没有评论订阅,所以第二个删掉,再往下看,本例还有一句被注释掉的,为执行时间和查询次数,直接删除即可
接下来,是一句
- <?php wp_footer(); ?>
复制代码
从默认模板中复制出
- <?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()" 即可。本例中,源代码为
- <form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
- <input type="text" value="<?php echo attribute_escape($s); ?>" name="s" id="s" />
- <input type="submit" id="searchsubmit" value="<?php _e("Search"); ?>" />
- </form>
复制代码
更改后为
- <form method="get" id="searchform" name="keyform" action="./">
- <input type="text" name="keyword" id="s" />
- <input type="submit" id="searchsubmit" value="Search" onclick="return keyw()" />
- </form>
复制代码
好了,sidebar_top.php到此修改完毕
接下来是sidebar_left.php和sidebar_right.php,之前提过,要将这个模板改为三栏的,这两个文件分别就是两个侧边栏了
打开sidebar_left.php,先在顶部加上<?php if(!defined('EMLOG_ROOT')) {exit('error!');} ?>,往下看代码,很容易发现侧边栏的HTML框架是这样的
- <ul>
- <li><h2>标题1</h2>
- <ul>
- 内容1
- </ul>
- </li>
- <li><h2>标题2</h2>
- <ul>
- 内容2
- </ul>
- </li>
- </ul>
复制代码
那么,只需将最外面的ul标签中的内容用默认模板中side.php里那段php代码,即侧边栏组件显示的代码替换即可
也就是换成如下
- <ul>
- <?php
- $widgets = !empty($options_cache['widgets1']) ? unserialize($options_cache['widgets1']) : array();
- foreach ($widgets as $val)
- {
- $widget_title = @unserialize($options_cache['widget_title']);
- $custom_widget = @unserialize($options_cache['custom_widget']);
- if(strpos($val, 'custom_wg_') === 0)
- {
- $callback = 'widget_custom_text';
- if(function_exists($callback))
- {
- call_user_func($callback, htmlspecialchars($custom_widget[$val]['title']), $custom_widget[$val]['content'], $val);
- }
- }else{
- $callback = 'widget_'.$val;
- if(function_exists($callback))
- {
- preg_match("/^.*\s\((.*)\)/", $widget_title[$val], $matchs);
- $wgTitle = isset($matchs[1]) ? $matchs[1] : $widget_title[$val];
- call_user_func($callback, htmlspecialchars($wgTitle));
- }
- }
- }
- ?>
- </ul>
复制代码
够简单吧,sidebar_right.php如法炮制,只需将侧边栏组件显示代码的第一行替换成
- $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部分的框架是
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码
复制代码 接下来看到将<?php _e("Leave a comment"); ?>修改为发表评论,然后几句判断是否需要登录的,不管它,删了,记得连同后面与它配对的<?php endif; ?>也删除了
复制代码
复制代码
复制代码
复制代码 接着一是一个wp的插件接口,直接删除,然后会看到如下几句
复制代码 |
第五步:log_list.php
先将index.php重命名为log_list.php,然后打开它
将第一行<?php get_header(); ?>给替换成<?php if(!defined('EMLOG_ROOT')) {exit('error!');}?>
考虑到本模板首页突出显示了第一片日志,因此先打开home.php,复制如下代码
- <?php if (empty($_GET) && isset($logs[0])) : ?>
- <div class="latest" id="post-<?php $logs[0]['logid']; ?>">
- <p class="details_small">
- on <?php echo date('Y-n-j G:i l', $logs[0]['date']); ?>
- by <?php blog_author($logs[0]['author']); ?>
- <?php blog_sort($logs[0]['sortid'], $logs[0]['logid']); ?>,
- <?php blog_tag($logs[0]['logid']); ?>
- <a href="./?post=<?php echo $logs[0]['logid']; ?>#comment" rel="external nofollow" >评论(<?php echo $logs[0]['comnum']; ?>)</a>
- <a href="./?post=<?php echo $logs[0]['logid']; ?>#tb" rel="external nofollow" >引用(<?php echo $logs[0]['tbcount']; ?>)</a>
- <a href="./?post=<?php echo $logs[0]['logid']; ?>" rel="external nofollow" rel="external nofollow" >浏览(<?php echo $logs[0]['views']; ?>)</a>
- </p>
- <h2><a href="./?post=<?php echo $logs[0]['logid']; ?>" rel="external nofollow" rel="external nofollow" rel="bookmark"><?php echo $logs[0]['log_title']; ?></a></h2>
- <div class="post_content">
- <?php echo $logs[0]['log_description']; ?>
- </div>
- </div>
- <?php
- array_shift($logs);
- endif;
- ?>
复制代码
然后就是下面其余博文列表了,看到有个判断是否首页的,WP的首页和其它页调用的不是同一个模板文件,因而样式可能有所不同,此处就需要自己加上判断,修改
- <div id="content"<?php if (is_home() && !is_paged()) { ?> class="home"<?php } ?>>
复制代码
为
- <div id="content"<?php if (empty($_GET)) { ?> class="home"<?php }else{ ?> class="archive"<?php } ?>>
复制代码
第二个class的值可以在archive.php中获得
接下来是一句判断是否有文章的,删除它,并删掉后面与之配对else语句和endif,即删除
- <?php else : ?>
- <?php include (TEMPLATEPATH . '/not_found.php'); ?>
- <?php endif; ?>
复制代码
再来会看到类似
- <?php rewind_posts(); ?>
- <?php
- remove_filter('get_the_excerpt', 'wp_trim_excerpt');
- add_filter('get_the_excerpt', 'gd_short_excerpt');
- ?>
复制代码
全删除了,接着将<?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']; ?>等等,参考默认可得,此处贴出替换前后参考
- <div class="post list" id="post-<?php the_ID(); ?>">
- <h2><a href="<?php the_permalink() ?>" rel="external nofollow" rel="external nofollow" rel="bookmark" title="ermalink: <?php the_title(); ?>"><?php the_title(); ?></a></h2>
- <p class="details_small">
- on <?php the_date(); ?>
- by <?php the_author(); ?>
- in <?php the_category(', '); ?>,
- <?php comments_popup_link(__('Comments (0)'), __('Comments (1)'), __('Comments (%)')); ?>
- </p>
- <?php the_excerpt(); ?>
- <p><a href="<?php the_permalink() ?>" rel="external nofollow" rel="external nofollow" rel="bookmark"><?php _e('Read more...') ;?></a></p>
- </div>
复制代码
- <div class="post list" id="post-<?php the_ID(); ?>">
- <h2><a href="./?post=<?php echo $value['logid']; ?>" rel="external nofollow" rel="external nofollow" rel="bookmark"><?php echo $value['log_title']; ?></a></h2>
- <p class="details_small">
- on <?php echo date('Y-n-j G:i l', $value['date']); ?>
- by <?php blog_author($value['author']); ?>
- <?php blog_sort($value['sortid'], $value['logid']); ?>,
- <?php blog_tag($value['logid']); ?>
- <a href="./?post=<?php echo $value['logid']; ?>#comment" rel="external nofollow" >评论(<?php echo $value['comnum']; ?>)</a>
- <a href="./?post=<?php echo $value['logid']; ?>#tb" rel="external nofollow" >引用(<?php echo $value['tbcount']; ?>)</a>
- <a href="./?post=<?php echo $value['logid']; ?>" rel="external nofollow" rel="external nofollow" >浏览(<?php echo $value['views']; ?>)</a>
- </p>
- <?php echo $value['log_description']; ?>
- <?php blog_att($value['logid']); ?>
- </div>
复制代码
应该刚刚在module.php中已经给分类加上了in,所以此处去掉
然后将下面那句<?php endwhile; ?>替换成<?php endforeach; ?>,结束日志列表
再来看到一句判断是否为显示文章的语句<?php if (is_single()) : ?>,下面则是翻页,我们需要的是else后面的部分,其余删除,仅保留文章列表的翻页,并将其中内容修改为emlog的页码,此处也仅贴出修改前后供参考
- <?php if (is_single()) : ?>
- <div class="navigation">
- <span class="prev"><?php previous_post_link('%link') ?></span>
- <span class="next"><?php next_post_link('%link') ?></span>
- </div>
- <?php else : ?>
- <div class="navigation">
- <div class="prev"><?php next_posts_link('? Previous posts') ?></div>
- <div class="next"><?php previous_posts_link('Next posts ?') ?></div>
- </div>
- <?php endif; ?>
复制代码
- <div class="navigation">
- <?php echo $page_url;?>
- </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!');}?>
同第五步,删掉判断是否有文章的相关语句,分别是接下来的
- <?php if (have_posts()) : ?>
复制代码
以及后面的
- <?php else : ?>
- <?php include (TEMPLATEPATH . '/not_found.php'); ?>
- <?php endif; ?>
复制代码
接着删掉<?php the_post(); ?>,继续往下看,同第五步,参考默认模板echo_log.php修改相应php代码,修改前后如下
- <div class="post" id="post-<?php the_ID(); ?>">
- <p class="details_small">
- on <?php the_date(); ?>
- by <?php the_author(); ?>
- in <?php the_category(', '); ?>,
- <?php comments_popup_link(__('Comments (0)'), __('Comments (1)'), __('Comments (%)')); ?>
- </p>
- <h1><?php the_title(); ?></h1>
- <div class="post_content">
- <?php the_content(); ?>
- </div>
- <p><?php the_tags('Tags: ', ', ', '<br />'); ?></p>
- <?php wp_link_pages(array('before' => '<p><strong>ages:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>
- </div>
复制代码
- <div id="content" class="single">
- <div class="post" id="post-<?php echo $logid; ?>">
- <p class="details_small">
- on <?php echo date('Y-n-j G:i l', $date); ?>
- by <?php blog_author($author); ?>
- <?php blog_sort($sortid, $logid); ?>
- </p>
- <h1><?php echo $log_title; ?></h1>
- <div class="post_content">
- <?php echo $log_content; ?>
- <?php blog_att($logid); ?>
- <?php doAction('log_related'); ?>
- </div>
- <p><?php blog_tag($logid); ?></p>
- </div>
复制代码
下一句是评论表单<?php comments_template(); ?>,替换成
- <?php blog_trackback(); ?>
- <?php blog_comments(); ?>
复制代码
下来是评论表单,之前第四步用到过这段代码,现在全部删除,用<?php if ($allow_remark == 'y'){blog_comments_post();}?>替换
在下来是相邻日志,保留前后的div,中间的用<?php neighbor_log(); ?>替换,贴出修改前后的代码
- <div class="navigation">
- <div class="prev"><?php previous_post_link('%link') ?></div>
- <div class="next"><?php next_post_link('%link') ?></div>
- </div>
复制代码
- <div class="navigation">
- <?php neighbor_log(); ?>
- </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也要删除,如本例中的
- <div class="navigation">
- <?php neighbor_log(); ?>
- </div>
复制代码
应全部删除
那么第六步也完成了
第七步:整理 1、遗漏部分: 之前有一个引用的地方没有修改,现在来修改它,首先给测试的emlog发送一个引用,然后打开那篇日志,看看引用显示的效果 本例中如图: 引用地址显示还行,但是下面的显示不尽人意,那么回去module.php,修改html样式吧 ,在此,我使用评论列表的样式 修改后: 这样引用修改完毕 还漏了什么呢?日志编辑标记,对,就是这个,从默认模板log_list.php和echo_log.php分别找到如下代码
复制代码
复制代码 本教程到此完毕,同时意味着一个新的模板gonzo-daily完成了 |
评论(0)