wp模板移植到emlog教程 第二部分(转载自:奇遇)

  • 内容
  • 相关

第二步: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="https://www.emlog.net" 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部分的框架是

 
<li><h3><span onclick="showhidediv('id')">标题</span></h3>
<ul id="id">
    内容
</ul>
</li>

与第三步提及的框架基本一致,那么修改很简单,将h3换成h2span去掉(去掉后侧边栏点击标题不再隐藏,保留也行)
剩下无需更改,此处你可以使用全文替换
接下来两个函数为置顶和编辑,可以不必更改
再来是分类,为了适应模板,将两端的方括号去掉,并在链接前面加上in (注意in后面有个空格)
继续跳过两个函数:标签和日志作者,看到相邻日志
打开原模板single.php,搜索previous_post_link(找不到可以打开index.php),这个是就前一篇日志了,看下它的样式,将它复制到module.php里,此处复制的是

<div class="navigation">
    <div class="prev"><?php previous_post_link('%link') ?></div>
    <div class="next"><?php next_post_link('%link') ?></div>
   </div>

然后,将前一篇和后一篇分别替换成emlog的,相邻日志完成
下一个是引用通告,此处先不做更改(WP中将引用作为一个评论显示了,也就是使用相同的样式,而emlog不是,因此等到最后再来调节我们所希望的样式)
接下来就是评论了
打开原模板comments.php,复制出显示评论的一段(一般是在<?php if ($comments) : ?><?php endif; ?>之间,包括它们,记得看下前后有无相关html代码,复制全了),此处为

<h2 id="comments"><?php comments_number(__('No Comments'), __('1 Comment'), __('% Comments')); ?></h2>
<?php if ($comments) : ?>
<ol class="commentlist">
  <?php foreach ($comments as $comment) : ?>
   <li <?php if ($comment->user_id) echo 'class="author"'; ?> id="comment-<?php comment_ID() ?>">
    <span class="avatar"><?php echo get_avatar(get_comment_author_email (), '48'); ?></span>
    <p class="comment-author"><?php comment_author_link() ?></p>
    <p class="comment-data"><a href="#comment-<?php comment_ID() ?>" title=""><?php comment_date() ?> @ <?php comment_time() ?></a></p>
    <?php if ($comment->comment_approved == '0') : ?>
     <span class="await_mod"><?php _e('Awaiting Moderation'); ?></span>
    <?php endif; ?>
    <p><?php comment_text() ?></p>
   </li>
  <?php endforeach; ?>
</ol>
<?php endif; ?>

我们先将这一段代码复制到评论列表函数的的前部(第二行后面)
来看下复制过来的代码,第一行是标题,此模板在标题中显示了评论数目,我们不管它,直接将整个php代码换成“评论:”即可(当然,你也可以自己写判断语句来决定是否显示评论数目),顺便加上一个锚<a name="comment"></a>

<?php foreach ($comments as $comment) : ?>

替换成

<?php
foreach($comments as $key=>$value):
$reply = $value['reply']?"<span>博主回复:{$value['reply']}</span>":'';
?>

那个博主回复的样式可以自由定制
显示评论的循环列表,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() ?>

    <b><?php echo $value['poster']; ?> </b>
    <?php if($value['mail']):?>
    <a href="mailto:<?php echo $value['mail']; ?>" title="发邮件给<?php echo $value['poster']; ?>">Email</a>
    <?php endif;?>
    <?php if($value['url']):?>
    <a href="<?php echo $value['url']; ?>" title="访问<?php echo $value['poster']; ?>的主页" target="_blank">主页</a>
    <?php endif;?>
    </p>

接着是时间,将链接去掉,时间替换成<?php echo $value['date']; ?>
再来有一个判断语句是等待评论审核的,全部删除
接着是评论回复的展示,我使用的html样式与评论时间相同,所以只需复制一段显示时间的代码,将其中的时间替换成回复

<div id="replycomm<?php echo $value['cid']; ?>"><?php echo $reply; ?></div>

再来从原评论列表里复制出前台回复的代码,粘帖到评论回复的下面

<?php if(ROLE == 'admin'): ?>
   <a href="javascript:void(0);" onclick="showhidediv('replybox<?php echo $value['cid']; ?>','reply<?php echo $value['cid']; ?>')">回复</a>
   <div id='replybox<?php echo $value['cid']; ?>' style="display:none;">
   <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>
   <br />
   <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>
   <a href="javascript:void(0);" onclick="showhidediv('replybox<?php echo $value['cid']; ?>')">取消</a>
   </div>
  <?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的判断语句,然后参照原来的评论表单进行修改,更多时候,可以直接复制过来(此处包括昵称,邮箱,主页),修改前为

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

修改后为

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

下面是wp允许的标签,全部删除,接着是评论内容的文本输入框,基本不用修改,再来就是一个隐藏的本文ID,即

<input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />

将它替换为

<input type="hidden" name="gid" value="<?php echo $logid; ?>" />

或者你前面已经复制过此行代码,此处直接删除之
接着是发表评论的按钮,先别急着修改,把验证码放在前面先,也就是在前面加上<?php echo $cheackimg; ?>
然后将按钮的value值修改为发表评论,并加上onclick="return checkform()" 

接着一是一个wp的插件接口,直接删除,然后会看到如下几句

<?php else : ?>
    <p class="nocomments"><?php _e('Comments are disabled.'); ?></p>
   <?php endif; ?>

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

 

 

 

本文标签:

版权声明:若无特殊注明,本文皆为《不安的心》原创,转载请保留文章出处。

本文链接:wp模板移植到emlog教程 第二部分(转载自:奇遇) - https://www.glr-s.com/ruanjian/134.html

头像
座右铭: 这颗不安的心呐,永远在路上流浪