记录学习与后端知识并分享学习代码过程(会飞的鱼Blog)

emlog模板结构说明

会飞的鱼 1 2585 2017年10月1日
header.php篇
<?php /*
Template Name:默认模板
   模板名称
Description:默认模板,简洁优雅 ……
   模板简介
Version:1.2
   模板版本号
Author:emlog
   模板作者名称
Author Url:http://www.emlog.net
   模板作者链接地址
Sidebar Amount:1
   边栏数目(一般是0,1或者20代表是没有边栏即单栏模板,1代表1个边栏即二栏模板,2代表2个边栏即三栏模板)
ForEmlog:5.0.0
   emlog程序版本号
*/
if(!defined('em_ROOT')) {exit('error!');}
   模板文件开头的判断语句检查是否是函数em_ROOT的绝对地址,否就显示error
require_once View::getView('module');
   公共模块加载项,加载module,这里面包含了模板必须要的函数
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   声明文件,声明了文档的根元素是 html,它在公共标识符被定义为 "-//W3C//DTD XHTML 1.0 Strict//EN" 的 DTD 中进行了定义浏览器将明白如何寻找匹配此公共标识符的 DTD如果找不到,浏览器将使用公共标识符后面的 URL 作为寻找 DTD 的位置
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   meta原标记,这里标记了为UTF-8格式
<title><?php echo $site_title; ?></title>
   页面的title标记,这里输出的是博客名称
<meta name="keywords" content="<?php echo $site_key; ?>" />
   meta原标记,这里标记的是关键词输出博客后台设置的关键词
<meta name="description" content="<?php echo $site_description; ?>" />
   meta原标记,这里标记的是网站简介信息这里输出的是博客后台设置的站点描述在日志内容页面的时候输出的是日志的摘要
<meta name="generator" content="emlog" />
   meta原标记,这里标记的是系统名称,这里输出的是emlog
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="<?php echo BLOG_URL; ?>xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="<?php echo BLOG_URL; ?>wlwmanifest.xml" />
      这两个元素主要供远程发布使用,比如你使用Windows Live Write等桌面博客编辑器来发布文章
<link rel="alternate" type="application/rss+xml" title="RSS"  href="<?php echo BLOG_URL; ?>rss.php" />
   这里是emlog博客的RSS发布地址
<link href="<?php echo TEMPLATE_URL; ?>main.css" rel="stylesheet" type="text/css" />
   CSS加载链接,这里加载的是main.css样式文件该文件存放在模板文件夹的根目录下
<script src="<?php echo BLOG_URL; ?>include/lib/js/common_tpl.js" type="text/javascript"></script>
   JS文件加载链接,这里加载的是common_tpl.js文件该文件存放于程序include/lib/js/目录下,这个JS文件主要用于镶套评论
<?php doAction('index_head'); ?>
页面头部插件挂载钩子(主要用于插件挂载一些CSS或者JS文件)
</head>
heder头部文件到此结束,上面部分一般是不用修改在移植模板或者制作模板的时候,样式文件是必须要修改加载的如果有特效的话,也要在这里加载一些JS文件的当然也可以在底部加载
<body>
<p id="wrap">
  <p id="header">
    <h1><a href="<?php echo BLOG_URL; ?>"><?php echo $blogname; ?></a></h1>
站点名称 站点链接
    <h3><?php echo $bloginfo; ?></h3>
输出博客描述,输出的是后台设置的博客描述信息
  </p>
  <p id="banner"><a href="<?php echo BLOG_URL; ?>"><img src="<?php echo BLOG_URL.Option::get('topimg'); ?>" height="134" width="960" /></a></p>
这里是页面头部的banner图片,这个只有在默认模板才有不用理会,直接删除就行
  <p id="nav"><?php blog_navi();?></p>

        页面头部导航菜单加函数该函数位于module.php文件,这个是emlog5.0新增加的与以往版本的区别    
        log_list.php篇       <?php 
/*
* 首页日志列表部分
*/
if(!defined('em_ROOT')) {exit('error!');} 
?>
注释文件头,表明是日志列表页面
模板文件开头的判断语句检查是否是函数em_ROOT的绝对地址,否就显示error
<p id="content">
<p id="contentleft">
<?php doAction('index_loglist_top'); ?>
日志列表页的插件钩子,加载插件所需要的文件如:em_ad插件,RSS订阅插件等
<?php foreach($logs as $value): ?>
日志列表页面列表循环开始大体意思是设置变量$logs为$value
    <h2><?php topflg($value['top']); ?>
置顶日志输出函数,该函数位于module.php文件主要用于置顶日志的显示图标,或者可以更改module.php文件显示【推荐】之类的效果
<a href="<?php echo $value['log_url']; ?>"><?php echo $value['log_title']; ?></a>
带超链接的日志标题
</h2>
    <p class="date">作者:<?php blog_author($value['author']); ?>
作者名称的输出函数,该函数位于module.php文件
 发布于:<?php echo gmdate('Y-n-j G:i l', $value['date']); ?> 
日志日期的输出函数,该函数位于系统核心一般不需要改动,如果想显示不同样式的日期格式,可以百度下PHP日期代码
    <?php blog_sort($value['logid']); ?> 
日志分类的输出函数,该函数位于module.php文件
    <?php editflg($value['logid'],$value['author']); ?>
日志编辑函数,该函数位于module.php文件
    </p>
    <?php echo $value['log_description']; ?>
日志摘要输出变量,该变量位于系统核心
    <p class="tag"><?php blog_tag($value['logid']); ?>
日志标签输出函数,该函数位于module.php文件
</p>
    <p class="count">
    <a href="<?php echo $value['log_url']; ?>#comments">评论(<?php echo $value['comnum']; ?>)</a>
带评论地址超链接的评论数量点击该地址可以到该日志的评论列表
    <a href="<?php echo $value['log_url']; ?>#tb">引用(<?php echo $value['tbcount']; ?>)</a>
带引用超链接地址的引用数量点击该地址可以到引用通告地址显示页面
    <a href="<?php echo $value['log_url']; ?>">浏览(<?php echo $value['views']; ?>)</a>
带日志超链接的浏览数量点击该地址可以到该日志页面
    </p>
    <p style="clear:both;"></p>
<?php endforeach; ?>
日志列表页面的日志列表循环结束
 
<p id="pagenavi">
    <?php echo $page_url;?>
日志列表分页函数,该函数位于系统核心
</p>
 
</p><!-- end #contentleft-->
<?php
 include View::getView('side');
加载side.php文件,即加载边栏(如果是单栏模板不用加载该文件)
 include View::getView('footer');
加载footer.php文件,即加载页面底部(一般显示的是版权,统计代码之类,放在通用底部的代码)
?>

echo_log.php篇       
<?php 
/*
* 阅读日志页面
*/
if(!defined('em_ROOT')) {exit('error!');} 
?>
注释文件头,表明是阅读日志页面
模板文件开头的判断语句检查是否是函数em_ROOT的绝对地址,否就显示error
<p id="content">
<p id="contentleft">
    <h2><?php topflg($top); ?>
置顶日志输出函数,该函数位于module.php文件主要用于置顶日志的显示图标,或者可以更改module.php文件显示【推荐】之类的效果(和list_log.php的函数为同一个函数)
<?php echo $log_title; ?>
日志标题的输出变量该变量位于系统核心
</h2>
    <p class="date">作者:
<?php blog_author($author); ?>
作者名称的输出函数,该函数位于module.php文件
 发布于:<?php echo gmdate('Y-n-j G:i l', $date); ?>
日志日期的输出函数,该函数位于系统核心一般不需要改动,如果想显示不同样式的日期格式,可以百度下PHP日期代码 
    <?php blog_sort($logid); ?>
日志分类的输出函数,该函数位于module.php文件
 <?php editflg($logid,$author); ?>
日志编辑函数,该函数位于module.php文件
    </p>
    <?php echo $log_content; ?>
日志文章内容的输出变量该变量位于系统核心
    <p class="tag">
<?php blog_tag($logid); ?>
日志标签的输出函数该函数位于module.php文件
</p>
    <?php doAction('log_related', $logData); ?>
日志阅读内容页面的插件钩子主要加载插件文件如:相关日志插件,心情顶踩插件,日志顶踩插件之类
    <p class="nextlog">
<?php neighbor_log($neighborLog); ?>
上一篇 下一篇列表输出函数,该函数位于module.php文件
</p>
    <?php blog_trackback($tb, $tb_url, $allow_tb); ?>
引用通告地址显示函数,该函数位于module.php文件(注意:请百度下引用通告的意思这里只要显示引用通告的地址就可以了,不用做超链接的)
    <?php blog_comments($comments); ?>
评论列表输出函数,该函数位于module.php文件,后期舞城会详细介绍
    <?php blog_comments_post($logid,$ckname,$ckmail,$ckurl,$verifyCode,$allow_remark); ?>
评论表单输出函数,该函数位于module.php文件,后期舞城会详细介绍
    <p style="clear:both;"></p>
</p><!--end #contentleft-->
<?php
 include View::getView('side');
加载side.php文件,即加载边栏(如果是单栏模板不用加载该文件)
 include View::getView('footer');
加载footer.php文件,即加载页面底部(一般显示的是版权,统计代码之类,放在通用底部的代码)
?>

page.php篇       
<?php 
/*
* 自建页面模板
*/
if(!defined('em_ROOT')) {exit('error!');} 
?>
<p id="content">
<p id="contentleft">
    <h2><?php echo $log_title; ?>
自建页面的标题输出,该变量位于系统核心
</h2>
    <?php echo $log_content; ?>
自建页面的内容输出,该变量位于系统核心
    <?php blog_comments($comments); ?>
评论列表
    <?php blog_comments_post($logid,$ckname,$ckmail,$ckurl,$verifyCode,$allow_remark); ?>
评论表单
    <p style="clear:both;"></p>
</p><!--end #contentleft-->
<?php
 include View::getView('side');
side.php文件加载即加载边栏
 include View::getView('footer');
footer.php文件加载,即加载通用底部
?>

side.php&footer.php 篇       
<?php 
/*
* 侧边栏
*/
if(!defined('em_ROOT')) {exit('error!');} 
?>
<ul id="sidebar">
从这里开始
<?php 
$widgets = !empty(
$options_cache['widgets1']) ? unserialize(
$options_cache['widgets1']) : array();
doAction('diff_side');
边栏的插件钩子,主要用于加载插件的文件
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']);
        }
    }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));
        }
    }
}
?>
到这里以上的所有代码都不用修改,这些主要是用于加载边栏组件其函数位于module.php文件
<p class="rss">
<a href="<?php echo BLOG_URL; ?>rss.php" title="RSS订阅"><img src="<?php echo TEMPLATE_URL; ?>images/rss.gif" alt="订阅Rss"/></a>
含有RSS订阅链接的图片超链接
</p>
</ul><!--end #siderbar-->
side.php文件基本上是不用动的,如果是单栏模板的话,这个页面就可以删除掉
下面是footer.php文件
<?php 
/*
* 底部信息
*/
if(!defined('em_ROOT')) {exit('error!');} 
?>
</p><!--end #content-->
<p style="clear:both;"></p>
<p id="footerbar">
Powered by <a href="http://www.emlog.net" title="emlog <?php echo Option::em_VERSION;?>">emlog</a>
emlog程序官网超链接,title显示的是emlog版本号请支持国产开源的emlog程序,保留他们的版权 
<a href="http://www.miibeian.gov.cn" target="_blank"><?php echo $icp; ?></a>
带有超链接的备案号备案号是在后台设置的
 <?php echo $footer_info; ?>
页面底部信息输出变量,可以在后台设置可以添加统计代码等信息
<?php doAction('index_footer'); ?>
</p><!--end #footerbar-->
</p><!--end #wrap-->
</body>
</html>

    module.php篇 
    <?php 
/*
* 侧边栏组件、页面模块
*/
if(!defined('em_ROOT')) {exit('error!');} 
?>
<?php
//widget:blogger
边栏blogger组件
function widget_blogger($title){
    global $CACHE;
    $user_cache = $CACHE->readCache('user');
    $name = $user_cache[1]['mail'] != '' ? "<a href=\"mailto:".$user_cache[1]['mail']."\">"
.$user_cache[1]['name']."</a>" : $user_cache[1]['name'];?>
读取blogger缓存
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul id="bloggerinfo">
    <p id="bloggerinfoimg">
    <?php if (!empty($user_cache[1]['photo']['src'])): ?>
如果有用户图片,就显示用户图片
    <img src="<?php echo BLOG_URL.$user_cache[1]['photo']['src']; ?>" 
width="<?php echo $user_cache[1]['photo']['width']; ?>" 
height="<?php echo $user_cache[1]['photo']['height']; ?>" alt="blogger" />
显示用户图片
    <?php endif;?>
    </p>
    <p><b>
<?php echo $name; ?>
输出用户名称
</b>
    <?php echo $user_cache[1]['des']; ?>
输出用户的个人描述
</p>
    </ul>
    </li>
<?php }?>
<?php
//widget:日历
边栏日历组件
function widget_calendar($title){ ?>
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <p id="calendar">
    </p>
这个id="calendar"千万别删除哦是日历的显示样式
    <script>sendinfo('<?php echo Calendar::url(); ?>','calendar');</script>
有文章的日历项链接
    </li>
<?php }?>
<?php
//widget:标签
边栏标签组件
function widget_tag($title){
    global $CACHE;
    $tag_cache = $CACHE->readCache('tags');?>
读取标签缓存
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul id="blogtags">
    <?php foreach($tag_cache as $value): ?>
标签循环开始
        <span style="font-size:<?php echo $value['fontsize']; ?>pt; line-height:30px;">
标签字体大小样式,根据该标签文章数量来决定大小
        <a href="<?php echo Url::tag($value['tagurl']); ?>" 
title="<?php echo $value['usenum']; ?> 篇日志"><?php echo $value['tagname']; ?></a>
带超链接的标签
</span>
    <?php endforeach; ?>
标签循环结束
    </ul>
    </li>
<?php }?>
<?php
//widget:分类
边栏 分类 组件
function widget_sort($title){
    global $CACHE;
    $sort_cache = $CACHE->readCache('sort'); ?>
读取分类缓存
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul id="blogsort">
    <?php foreach($sort_cache as $value): ?>
分类循环开始
    <li>
    <a href="<?php echo Url::sort($value['sid']); ?>">
<?php echo $value['sortname']; ?>(<?php echo $value['lognum'] ?>)
</a>
带分类超链接的分类名称+该分类日志数量
    <a href="<?php echo BLOG_URL; ?>rss.php?sort=<?php echo $value['sid']; ?>">
<img src="<?php echo TEMPLATE_URL; ?>images/rss.png" alt="订阅该分类"/>
</a>
带分类订阅链接的RSS图片(位于该分类的名称后面)
    </li>
    <?php endforeach; ?>
分类循环结束
    </ul>
    </li>
<?php }?>
<?php
//widget:最新碎语
边栏 最新碎语 组件
function widget_twitter($title){
    global $CACHE; 
    $newtws_cache = $CACHE->readCache('newtw');
    $istwitter = Option::get('istwitter');
    ?>
读取最新碎语缓存
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul id="twitter">
    <?php foreach($newtws_cache as $value): ?>
最新碎语循环开始
    <?php $img = empty($value['img']) ? "" : 
'<a title="查看图片" class="t_img" href="'.BLOG_URL.str_replace('thum-', '', $value['img']).'" target="_blank">&nbsp;</a>';?>
这个是emlog5.0新增加的功能,碎语图片功能设置变量$img的图片地址
    <li><?php echo $value['t']; ?><?php echo $img;?><p><?php echo smartDate($value['date']); ?></p>
输出碎语(文字+图片) 发布碎语的时间
</li>
    <?php endforeach; ?>
最新碎语循环结束
    <?php if ($istwitter == 'y') :?>
    <p><a href="<?php echo BLOG_URL . 't/'; ?>">更多&raquo;</a></p>
    <?php endif;?>
判断是否开启碎语,开启的话显示带碎语页面超链接的更多字样
    </ul>
    </li>
<?php }?>
<?php
//widget:最新评论
边栏 最新评论 组件
function widget_newcomm($title){
    global $CACHE; 
    $com_cache = $CACHE->readCache('comment');
    ?>
读取最新评论缓存
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul id="newcomment">
    <?php
    foreach($com_cache as $value):
最新评论循环开始
    $url = Url::comment($value['gid'], $value['page'], $value['cid']);
设置变量$url为评论的链接地址
    ?>
    <li id="comment"><?php echo $value['name']; ?>
输出评论者的名称
    <br />
<a href="<?php echo $url; ?>"><?php echo $value['content']; ?></a>
带评论超链接的评论内容
</li>
    <?php endforeach; ?>
最新评论循环结束
    </ul>
    </li>
<?php }?>
<?php
//widget:最新日志
边栏 最新日志 组件
function widget_newlog($title){
    global $CACHE; 
    $newLogs_cache = $CACHE->readCache('newlog');
    ?>
读取最新日志缓存
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul id="newlog">
    <?php foreach($newLogs_cache as $value): ?>
最新日志循环开始
    <li>
<a href="<?php echo Url::log($value['gid']); ?>"><?php echo $value['title']; ?></a>
带日志超链接的日志标题
</li>
    <?php endforeach; ?>
最新日志循环结束
    </ul>
    </li>
<?php }?>
<?php
//widget:热门日志
边栏 热门日志 组件
function widget_hotlog($title){
    $index_hotlognum = Option::get('index_hotlognum');
    $Log_Model = new Log_Model();
    $randLogs = $Log_Model->getHotLog($index_hotlognum);?>
读取热门日志设置
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul id="hotlog">
    <?php foreach($randLogs as $value): ?>
热门日志循环开始
    <li>
<a href="<?php echo Url::log($value['gid']); ?>"><?php echo $value['title']; ?></a>
带日志超链接的日志标题
</li>
    <?php endforeach; ?>
热门日志循环结束
    </ul>
    </li>
<?php }?>
<?php
//widget:随机日志
边栏 随机日志 组件
function widget_random_log($title){
    $index_randlognum = Option::get('index_randlognum');
    $Log_Model = new Log_Model();
    $randLogs = $Log_Model->getRandLog($index_randlognum);?>
读取随机日志设置
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul id="randlog">
    <?php foreach($randLogs as $value): ?>
随机日志循环开始
    <li>
<a href="<?php echo Url::log($value['gid']); ?>"><?php echo $value['title']; ?></a>
带日志超链接的日志标题
</li>
    <?php endforeach; ?>
随机日志循环结束
    </ul>
    </li>
<?php }?>
<?php
//widget:搜索
边栏 搜索 组件
function widget_search($title){ ?>
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul id="logserch">
    <form name="keyform" method="get" action="<?php echo BLOG_URL; ?>index.php">
    <input name="keyword" class="search" type="text" />
    </form>
from内的name method和action不要更改,搜索功能就不会出错
    </ul>
    </li>
<?php } ?>
<?php
//widget:归档
边栏 归档 组件
function widget_archive($title){
    global $CACHE; 
    $record_cache = $CACHE->readCache('record');
    ?>
读取归档缓存
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul id="record">
    <?php foreach($record_cache as $value): ?>
归档循环开始
    <li>
<a href="<?php echo Url::record($value['date']); ?>">
<?php echo $value['record']; ?>(<?php echo $value['lognum']; ?>)
</a>
带归档时间超链接的归档时间
</li>
    <?php endforeach; ?>
归档循环结束
    </ul>
    </li>
<?php } ?>
<?php
//widget:自定义组件
边栏 自定义 组件
function widget_custom_text($title, $content){ ?>
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul>
    <?php echo $content; ?>
输出用户设置的自定义代码
    </ul>
    </li>
<?php } ?>
<?php
//widget:链接
边栏 链接 组件
function widget_link($title){
    global $CACHE; 
    $link_cache = $CACHE->readCache('link');
    ?>
读取链接缓存
    <li>
    <h3><span><?php echo $title; ?></span></h3>
    <ul id="link">
    <?php foreach($link_cache as $value): ?>
链接循环开始
    <li>
<a href="<?php echo $value['url']; ?>" title="<?php echo $value['des']; ?>" target="_blank">
<?php echo $value['link']; ?>
</a>
带链接站点超链接的链接名称
</li>
    <?php endforeach; ?>
链接循环结束
    </ul>
    </li>
<?php }?>
中篇
<?php
//blog:导航
页面顶部的导航函数
function blog_navi(){
   global $CACHE; 
   $navi_cache = $CACHE->readCache('navi');
   ?>
读取导航缓存
   <ul>
   <?php 
   foreach($navi_cache as $value):
导航循环开始
       if($value['url'] == 'admin' && (ROLE == 'admin' || ROLE == 'writer')):
           ?>
           <li class="common"><a href="<?php echo BLOG_URL; ?>admin/write_log.php">写日志</a></li>
           <li class="common"><a href="<?php echo BLOG_URL; ?>admin/">管理站点</a></li>
           <li class="common"><a href="<?php echo BLOG_URL; ?>admin/?action=logout">退出</a></li>
           <?php 
           continue;
       endif;
判断是否是管理员登陆,是就显示管理员相关功能链接
       $newtab = $value['newtab'] == 'y' ? 'target="_blank"' : '';
       $value['url'] = $value['isdefault'] == 'y' ? BLOG_URL . $value['url'] : trim($value['url'], '/');
       $current_tab = (BLOG_URL . trim(Dispatcher::setPath(), '/') == $value['url']) ? 'current' : 'common';
       ?>
设置相关变量,不需要改动$newtab (是否是新窗口打开,后台设置) $value['url'] (导航链接) $current_tab(导航的class类,当前页面的类为current,非当前页的类为common)
       <li class="<?php echo $current_tab;?>"><a href="<?php echo $value['url']; ?>" <?php echo $newtab;?>><?php echo $value['naviname']; ?></a></li>
输出带导航地址超链接的导航名称
   <?php endforeach; ?>
导航循环结束
   </ul>
<?php }?>
<?php
//blog:置顶
function topflg($istop){
   $topflg = $istop == 'y' ? "<img src=\"".TEMPLATE_URL."/images/import.gif\" title=\"置顶日志\" /> " : '';
   echo $topflg;
}
?>
置顶日志函数,主要用于log_list.php echo_log.php文件
<?php
//blog:编辑
function editflg($logid,$author){
   $editflg = ROLE == 'admin' || $author == UID ? '<a href="'.BLOG_URL.'admin/write_log.php?action=edit&gid='.$logid.'">编辑</a>' : '';
   echo $editflg;
}
?>
日志编辑函数,主要用于echo_log.php page.php文件,也可以用在log_list.php文件
<?php
//blog:分类
function blog_sort($blogid){
   global $CACHE; 
   $log_cache_sort = $CACHE->readCache('logsort');
   ?>
   <?php if(!empty($log_cache_sort[$blogid])): ?>
   分类:<a href="<?php echo Url::sort($log_cache_sort[$blogid]['id']); ?>"><?php echo $log_cache_sort[$blogid]['name'];?></a>
   <?php endif;?>
<?php }?>
日志分类函数,主要用于echo_log.php文件,也可以用在log_list.php文件
<?php
//blog:日志标签
function blog_tag($blogid){
   global $CACHE;
   $log_cache_tags = $CACHE->readCache('logtags');
   if (!empty($log_cache_tags[$blogid])){
       $tag = '标签:';
       foreach ($log_cache_tags[$blogid] as $value){
           $tag .= "    <a href=\"".Url::tag($value['tagurl'])."\">".$value['tagname'].'</a>';
       }
       echo $tag;
   }
}
?>
日志标签函数,主要用于echo_log.php文件
<?php
//blog:日志作者
function blog_author($uid){
   global $CACHE;
   $user_cache = $CACHE->readCache('user');
   $author = $user_cache[$uid]['name'];
   $mail = $user_cache[$uid]['mail'];
   $des = $user_cache[$uid]['des'];
   $title = !empty($mail) || !empty($des) ? "title=\"$des $mail\"" : '';
   echo '<a href="'.Url::author($uid)."\" $title>$author</a>";
}
?>
日志作者函数,主要用于echo_log.php文件
<?php
//blog:相邻日志
function neighbor_log($neighborLog){
   extract($neighborLog);?>
   <?php if($prevLog):?>
   &laquo; <a href="<?php echo Url::log($prevLog['gid']) ?>"><?php echo $prevLog['title'];?></a>
   <?php endif;?>
   <?php if($nextLog && $prevLog):?>
       |
   <?php endif;?>
   <?php if($nextLog):?>
        <a href="<?php echo Url::log($nextLog['gid']) ?>"><?php echo $nextLog['title'];?></a>&raquo;
   <?php endif;?>
<?php }?>
相邻日志函数(即上一篇 下一篇),主要用于echo_log.php文件
<?php
//blog:引用通告
function blog_trackback($tb, $tb_url, $allow_tb){
   if($allow_tb == 'y' && Option::get('istrackback') == 'y'):?>
   <p id="trackback_address">
   <p>引用地址: <input type="text" style="width:350px" class="input" value="<?php echo $tb_url; ?>">
   <a name="tb"></a></p>
   </p>
   <?php endif; ?>
   <?php foreach($tb as $key=>$value):?>
       <ul id="trackback">
       <li><a href="<?php echo $value['url'];?>" target="_blank"><?php echo $value['title'];?></a></li>
       <li>BLOG: <?php echo $value['blog_name'];?></li><li><?php echo $value['date'];?></li>
       </ul>
   <?php endforeach; ?>
<?php }?>
引用通告地址函数,主要用于echo_log.php文件
    下篇 
    module.php文件中比较重要的评论列表与表单的函数因为在4.0版本开始emlog引入了镶套评论的效果,所以评论列表比以前的也稍微复杂了点如果这里更改了相关的class类与ID的话,也要在common_tpl.js文件更改相关ID(一般建议不要更改ID,不给ID设置相关CSS属性就没问题,不会产生页面变形问题)
<?php
//blog:评论列表
function blog_comments($comments){
   extract($comments);
   if($commentStacks): ?>
   <a name="comments"></a>
   <p class="comment-header"><b>评论:</b></p>
   <?php endif; ?>
   <?php
   $isGravatar = Option::get('isgravatar');
   foreach($commentStacks as $cid):
评论列表循环开始(注意!)
   $comment = $comments[$cid];
   $comment['poster'] = $comment['url'] ? '<a href="'.$comment['url'].'" target="_blank">'.$comment['poster'].'</a>' :$comment['poster'];
   ?>
以上为Gravatar头像,地址,内容的相关变量设置,一般无需更改,除了红色字体部分
   <p class="comment" id="comment-<?php echo $comment['cid']; ?>">
该ID为评论列表的编号ID
       <a name="<?php echo $comment['cid']; ?>"></a>
name为评论列表的编号
       <?php if($isGravatar == 'y'): ?><p class="avatar"><img src="<?php echo getGravatar($comment['mail']); ?>" /></p><?php endif; ?>
判断Gravatar头像是否开启,开启就显示Gravatar头像
       <p class="comment-info">
           <b>
<?php echo $comment['poster']; ?> 
评论人名称
</b><br /><span class="comment-time">
<?php echo $comment['date']; ?>
评论时间
</span>
           <p class="comment-content">
<?php echo $comment['content']; ?>
评论内容
</p>
           <p class="comment-reply">
<a href="#comment-<?php echo $comment['cid']; ?>" onclick="commentReply(<?phpecho $comment['cid']; ?>,this)">回复</a>
回复该评论的链接
</p>
       </p>
       <?php blog_comments_children($comments, $comment['children']); ?>
子评论列表函数
   </p>
   <?php endforeach; ?>
评论列表循环结束(注意)
   <p id="pagenavi">
       <?php echo $commentPageUrl;?>
评论分页输出变量
   </p>
<?php }?>
<?php
//blog:子评论列表
function blog_comments_children($comments, $children){
   $isGravatar = Option::get('isgravatar');
   foreach($children as $child):
子评论列表循环开始
   $comment = $comments[$child];
   $comment['poster'] = $comment['url'] ? '<a href="'.$comment['url'].'" target="_blank">'.$comment['poster'].'</a>' :$comment['poster'];
   ?>
以上为Gravatar头像,地址,内容的相关变量设置,一般无需更改
   <p class="comment comment-children" id="comment-<?php echo $comment['cid']; ?>">
该ID为评论列表的编号ID
       <a name="<?php echo $comment['cid']; ?>"></a>
name为评论列表的编号
       <?php if($isGravatar == 'y'): ?><p class="avatar"><img src="<?php echo getGravatar($comment['mail']); ?>" /></p><?php endif; ?>
判断Gravatar头像是否开启,开启就显示Gravatar头像
       <p class="comment-info">
           <b>
<?php echo $comment['poster']; ?>
评论人名称
 </b><br /><span class="comment-time">
<?php echo $comment['date']; ?>
评论时间
</span>
           <p class="comment-content">
<?php echo $comment['content']; ?>
评论内容
</p>
           <?php if($comment['level'] < 4): ?>
镶套级数,这里为4级镶套
<p class="comment-reply">
<a href="#comment-<?php echo $comment['cid'];?>" onclick="commentReply(<?php echo $comment['cid']; ?>,this)">回复</a>
回复该评论的链接
</p><?php endif; ?>
镶套级数判断结束
       </p>
       <?php blog_comments_children($comments, $comment['children']);?>
子评论列表函数
   </p>
   <?php endforeach; ?>
子评论列表循环结束
<?php }?>
<?php
//blog:发表评论表单
function blog_comments_post($logid,$ckname,$ckmail,$ckurl,$verifyCode,$allow_remark){
   if($allow_remark == 'y'): ?>
   <p id="comment-place">
   <p class="comment-post" id="comment-post">
       <p class="cancel-reply" id="cancel-reply" style="display:none"><a href="javascript:void(0);" onclick="cancelReply()">取消回复</a></p>
       <p class="comment-header"><b>发表评论:</b><a name="respond"></a></p>
       <form method="post" name="commentform" action="<?php echo BLOG_URL; ?>index.php?action=addcom" id="commentform">
           <input type="hidden" name="gid" value="<?php echo $logid; ?>" />
           <?php if(ROLE == 'visitor'): ?>
           <p>
               <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>
           <?php endif; ?>
           <p><textarea name="comment" id="comment" rows="10" tabindex="4"></textarea></p>
           <p><?php echo $verifyCode; ?> <input type="submit" id="comment_submit" value="发表评论" tabindex="6" /></p>
           <input type="hidden" name="pid" id="comment-pid" value="0" size="22" tabindex="1"/>
       </form>
   </p>
   </p>
   <?php endif; ?>
<?php }?> 
评论表单里面其实没什么好介绍,主要是红色标出的name id之类的别弄错,基本上是没问题的还有就是镶套评论所使用到的ID,要保留如果非要更改也要在common_tpl.js文件更改不懂就留言吧
本文由 @会飞的鱼 于 2017-10-1 发布在 会飞的鱼Blog,如无特别说明,本博文章均为原创,转载请保留出处。

网友评论当前共有1条评论

  • 2019-01-02 21:50

    Thanks for finally talking about >emlog模板结构说明 - 会飞的鱼 <Liked it!

会飞的鱼 在线咨询

在线时间:9:00-22:00
周六、周日:14:00-22:00