🎨 模板开发指南
emlog可以方便的更换模板,模板文件位于 content\templates 目录下,每个模板都是一个单独的文件夹,文件夹以模板的英文别名命名。通过应用商店以及后台上传安装的模板都保存在这个目录下。
模板文件及目录说明
| 文件名 | 说明 |
|---|---|
| css | 存放模板所需的所有CSS样式文件 |
| js | 存放模板所需的所有JS文件 |
| images | 存放模板所需 LOGO 等图片资源 |
| preview.jpg | 在后台模板选择界面显示的模板预览图,推荐:500x300 jpg格式 |
| header.php | 站点头部信息,一般包含页面head信息和顶部标题、导航栏 |
| echo_log.php | 文章详情页,展示单篇文章内容 |
| log_list.php | 首页,展示文章列表 |
| footer.php | 站点底部信息,展示版权信息等 |
| page.php | 页面,展示自定义的页面 |
| side.php | 侧边栏,如制作单栏模板则该文件不是必须的 |
| module.php | 功能模块:最新文章、评论、分类、标签等 |
| 404.php | 自定义404页面未找到时的报错页面 |
| pw.php | 自定义加密文章输入密码页面,没该文件使用系统默认样式 【非必须】 |
| user.php | 路由 /user 加载的模板,可用于用户中心等页面【非必须】 |
| plugins.php | 模板的系统调用文件,模板启用后,该文件会被系统自动加载。可用于实现类似插件的功能。【非必须】 |
| options.php | 模板设置的配置文件,可以构建更丰富的设置项。【非必须】 |
| callback.php | 模板的事件回调函数定义,详见事件回调部分文档【非必须】 |
| custom_fields.php | 预设模板自己需要的文章自定义字段【非必须】 |
模板引擎
emlog未采用任何其他第三方的模板引擎,直接使用PHP原生的语法标记来内嵌HTML生成动态页面。这样不但降低了开发者的学习负担,也大大提高了页面加载和渲染效率。
// 嵌入变量
<div><?= $value ?></div>
// 循环
<?php foreach ($abc as $v) :?>
<div><?= $v ?></div>
<?php endforeach;?>
// 判断
<?php if($a == 'abc') :?>
<div>hello</div>
<?php endif;?>
公共代码
禁止直接访问
下面这行代码存在于模板目录下的每个php文件开头,其作用是防止代码所在的php脚本被直接访问执行,务必保留。
if(!defined('EMLOG_ROOT')) {exit('error!');}
或者
defined('EMLOG_ROOT') || exit('access denied!');
引用模板文件
下面这两行代码作用是调用模板文件夹下的 side.php 和 footer.php 的代码到当前文件的当前位置。
require_once View::getView('side');
require_once View::getView('footer');
// View是模板视图控制器,View::getView('文件名','文件后缀')将返回当前模板安装路径下对应的文件。
// getView 函数的第二个参数为缺省参数,在不传入值的情况下,将默认作为.php文件后缀返回文件路径。
文件说明
header.php
站点头部信息,一般包页面head信息和顶部标题、导航栏。
页头信息
开头注释内容是模板的必要信 息,该信息会显示在后台模板管理界面,务必完整填写。
/*
Template Name:默认模板
Version:1.0
Template Url:https://www.emlog.net/template/
Description:emlog的默认模板
Author:emlog
Author Url:https://www.emlog.net/author/index/577
*/
其中 Template URL 和 Author URL 请使用官网 emlog.net 的应用链接和作者页,其他非官网链接不会在后台展示超链接。
加载模板文件
require_once View::getView('module'); // 加载模板通用模块.
变量&常量
| 变量&常量 | 类型 | 说明 |
|---|---|---|
| $site_title | 变量 | 站点标题(受后台seo优化设置影响) |
| $site_key | 变量 | 站点关键字 |
| $site_description | 变量 | 输出站点浏览器描述 (受后台seo优化设置影响) |
| $blogname | 变量 | 站点标题 |
| $bloginfo | 变量 | 站点副标题 |
| BLOG_URL | 常量 | 站点首页的URL,输出形如https://emlog.net/ |
| TEMPLATE_URL | 常量 | 模板文件夹的URL,用于加载模板内的css、js及其他内容,输出形如http://emlog.net/blog/content/templates/default/ |
上面的变量、常量都可以通过下面的方式在模板中输出
<?= $page_url ?>
<?= BLOG_URL ?>
footer.php
站点底部信息,展示版权、备案等信息等。
变量&常量
| 变量、常量 | 类型 | 说明 |
|---|---|---|
| $icp | 变量 | 后台设置的ICP备案号 |
| $footer_info | 变量 | 后台设置的页面底部信息 |
| Option::EMLOG_VERSION | 常量 | 当前emlog版本号 |
log_list.php
首页模板,展示文章列表。
变量&方法
| 变量、常量、方法 | 类型 | 说明 |
|---|---|---|
| $value['log_cover'] | 变量 | 文章封面图URL |
| $value['logid'] | 变量 | 当前文章的id |
| $value['log_url'] | 变量 | 文章地址URL |
| $value['log_title'] | 变量 | 文章标题 |
| date('Y-n-j', $value['date']) | 变量 | 文章发布时间,参数'Y-n-j G:i l'用于定义日期格式 |
| $value['log_description'] | 变量 | 文章摘要 (没有摘要则输出全文) |
| $value['comnum'] | 变量 | 当前文章的评论数 |
| $value['views'] | 变量 | 当前文章的浏览量 |
| $value['fields'] | 变量 | 自定义字段,数组类型,读取方式见下方示例 |
| editflg($value['logid'],$value['author']) | 变量 | 当管理员或作者登陆时显示“编辑”链接 |
| topflg($value['top']) | 变量 | 显示置顶标记,该函数位于模板module.php内 |
| $page_url | 变量 | 显示当前列表页的翻页功能 |
| blog_sort($value['logid']) | 方法 | 展示文章所属的分类 |
| blog_author($value['author']) | 方法 | 展示文章的作者 |
| blog_tag($value['logid']) | 方法 | 展示文章的标签 |
上面的变量、方法都可以通过下面的方式在模板中输出
<?= $value['logid'] ?>
<?= blog_author($value['author']) ?>
// 读取自定义字段,其中索引 abcd 即为自定义字段名称
if (isset($value['fields']['abcd'])) {
echo $value['fields']['abcd']; // 输出自定义字段名为 abcd 的值
}
echo_log.php
文章详情页模板,展示单篇文章内容。
变量&方法
| 变量、常量、方法 | 类型 | 说明 |
|---|---|---|
| $logid | 变量 | 当前文章的id |
| $log_title | 变量 | 文章标题 |
| $log_cover | 变量 | 封面图URL |
| date('Y-n-j', $date) | 变量 | 发布时间,参数'Y-n-j G:i l'用于定义日期格式 |
| $log_content | 变量 | 文章正文 |
| $excerpt | 变量 | 文章摘要 |
| $comnum | 变量 | 当前文章的评论数 |
| $views | 变量 | 当前文章的浏览量 |
| $fields | 变量 | 自定义字段,数组类型,读取方式见下方示例 |
| $page_url | 变量 | 显示当前列表页的翻页功能 |
| topflg($top) | 方法 | 显示置顶标记 |
| blog_tag($logid) | 方法 | 标签 |
| blog_author($author) | 方法 | 作者 |
| blog_sort($logid) | 方法 | 所属的分类 |
| editflg($logid,$author) | 方法 | 当管理员或作者登录时显示“编辑”链接。 |
| neighbor_log($neighborLog) | 方法 | 邻近文章,就是上一篇、下一篇。 |
| blog_comments($comments) | 方法 | 评论列表 |
| blog_comments_post($logid,$ckname,$ckmail,$ckurl,$verifyCode,$allow_remark) | 方法 | 发表评论框 |
// 在模板中输出标题
<?= $log_title ?>
// 读取自定义字段,其中索引 abcd 即为自定义字段名称
if (isset($fields['abcd'])) {
echo $fields['abcd']; // 输出自定义字段名为 abcd 的值
}
page.php
页面,展示自定义的页面。变量定义等和echo_log.php相同。
side.php
侧边栏,主要负责根据后台widgets设置信息输出侧边栏内容。建议该文件内代码保持不变。
module.php
模板公共代码,包含侧边widgets、评论、引用、编辑等。
该文件由若干函数组成,被模板文件调用,可在内自定义函数实现更多功能。
如在自定义函数内调用emlog缓存时,假设读取user缓存信息,则形如: global $CACHE; $user_cache = $CACHE→readCache('user');
如需要操作数据库,则形如: $DB = MySql::getInstance(); $res = $DB→query($sql);
404.php
用于自定义404页面的模板。
pw.php
用于自定义加密文章输入密码页面,如果没有该模板文件,将使用系统默认样式,不影响输入密码功能正常使用,模板内容请参考默认模板。