emlog模板开发基础2022最新指南

news2024/11/26 16:25:51

emlog模板的开发基础指南,如果想要开发emlog的模板,你必须知道那些开发内容呢?下面将介绍分析emlog5下的模板基本结构以及基本变量、函数的作用。
首先我们用该知道emlog的模板是位于根目录content\templates\文件夹下,每个模板都是一个单独的文件夹,文件夹以模板名字命名.通过后台上传安装的模板都保存在这个目录下.
模板内容主要部分:

  1. images文件夹:存放模板所需图片
  2. echo_log.php:显示日志内容
  3. footer.php:页面底部
  4. header.php:页面头部
  5. log_list.php:显示日志列表内容
  6. main.css:模板的css文件
  7. module.php:模板公共代码,包含侧边widgets、评论、引用、编辑等,该文件是模板最核心的模块
  8. page.php:自定义的页面内容的模板
  9. preview.jpg:在后台模板选择界面显示的模板预览图,300×225 jpg格式
  10. side.php:模板侧边栏文件,如制作单栏模板则该文件不是必须的
  11. t.php:显示emlog系统自带的微博(微语)内容
  12. 404.php 自定义404页面未找到时的报错页面

在一般的emlog模板开发中,以上提及的部分中echo_log.php、log_list.php、module.php、page.php、 t.php、header.php以及preview.jpg是不可或缺的,一旦缺省,模板将无法运行.此外的side.php、footer.php、 main.css、images文件夹等,只需要对模板代码做小部分更改,那么它们都是可以改名、移动、甚至删除的.
公共代码分析:
通过预览整个模板中的各个文件,你会发现以下代码同时存在于多个文件中,这些代码分别有以下用途:

  1. if(!defined('EMLOG_ROOT')) {exit('error!');}

此行代码存在于模板目录下的每个php文件起始部分(事实上为了安全起见,该行代码也在admin目录下的几乎所有php文件起始部分存在),其作用是防 止代码所在的php脚本被直接访问执行

  1. require_once View::getView('side'); require_once View::getView('footer');

这两行代码存在于log_list.php、echo_log.php、page.php、t.php里面,其作用是调用模板文件夹下的side.php 和footer.php的代码到当前文件的当前位置

  1. View::getView('文件名','文件后缀')

View是emlog的模板视图控制器,将 返回当前模板安装路径下对应的文件.getView函数的第二个参数为缺省参数,在不传入值的情况下,将默认作为.php文件后缀返回文件路径.
header.php文件
开头注释内容是模板信息,该信息显示在模板选择界面

  1. Template Name:模板名称
  2. Description:模板介绍描述
  3. Author:模板作者Author
  4. Url:作者或模板发布的URL
  5. Sidebar Amount:标记该模板有几个侧边栏,一般为1,有些模板有两个侧边栏则标记2.这样可以在后台widgets里识别管理

之后是具体代码部分

  1. if(!defined('EMLOG_ROOT')) {exit('error!');}

该行代码同样存在于其它模板文件中,为防止该文件被直接执行

  1. require_once View::getView('module');

加载模板公共代码

  1. $site_title 站点标题
  2. $site_key 关键字
  3. $site_description 输出博客设置的摘要
  4. BLOG_URL 博客首页的URL
  5. TEMPLATE_URL 模板文件夹的URL,用于加载模板内的css、js及其他内容
  6. BLOG_URL.Option::get('topimg') 这句可以无视,因为只默认模板可以自定义banner,其它模板没这功能

判断当前是否首页,是则给导航加current类,用于表现当前位置

  1. <?php echo $curpage == CURPAGE_HOME ? 'current' : 'common';?>

如后台设置在前台显示碎语,则输出…….中的内容

  1. <?php echo $curpage == CURPAGE_HOME ? 'current' : 'common';?>

判断当前URL是否为碎语并选择加类名

  1. <?php echo $curpage == CURPAGE_TW ? 'current' : 'common';?>

输出自定义页面的链接

  1. <?php foreach ($navibar as $key ⇒ $val):?>…….<?php endforeach;?>

footer.php文件

  1. Option::EMLOG_VERSION 获得版本号
  2. $icp 获得后台设置的ICP备案号
  3. <?php doAction('index_footer'); ?> 页脚底部挂载点加入

log_list.php文件

  1. <?php doAction('index_loglist_top'); ?>
  2. 页脚底部挂载点加入
  3. $value['logid'] 该变量为当前日志的id
  4. <?php topflg($value['top']); ?>
  5. 显示置顶标记,该函数位于模板module.php内
  6. <?php echo $value['log_url']; ?>
  7. 输出日志URL
  8. <?php echo $value['log_title']; ?>
  9. 输出日志标题
  10. <?php blog_author($value['author']); ?>
  11. 输出日志的作者,该函数位于模板module.php内
  12. <?php echo gmdate('Y-n-j G:i l', $value['date']); ?>
  13. 输出日志发布时间,参数'Y-n-j G:i l'用于定义日期格式
  14. <?php blog_sort($value['logid']); ?>
  15. 输出日志所属的分类,该函数位于模板module.php内
  16. <?php editflg($value['logid'],$value['author']); ?>
  17. 当管理员或作者登陆时显示“编辑”链接,该函数位于模板module.php内
  18. <?php echo $value['log_description']; ?>
  19. 输出日志摘要(没有摘要则输出全文).
  20. <?php blog_att($value['logid']); ?>
  21. 如日志有附件则输出附件,该函数位于模板module.php内
  22. <?php blog_tag($value['logid']); ?>
  23. 输出日志的标签,该函数位于模板module.php内.
  24. <?php echo $value['comnum']; ?>
  25. 输出当前日志的评论数
  26. <?php echo $value['tbcount']; ?>
  27. 输出当前日志的引用量
  28. <?php echo $value['views']; ?>
  29. 输出当前日志的浏览量
  30. <?php echo $page_url;?>
  31. 显示当前列表页的翻页功能
  32. <?php include View::getView('side'); include View::getView('footer'); ?>
  33. 加入侧边栏及加入页脚

echo_log.php文件
该文件功能函数与列表页一致,但参数有区别,注意区分. $logid 该变量为当前日志的id

  1. <?php topflg($top); ?> 显示置顶标记,该函数位于模板module.php内.
  2. <?php echo $log_title; ?> 输出日志标题.
  3. <?php blog_author($author); ?> 输出日志的作者,该函数位于模板module.php内.
  4. <?php echo gmdate('Y-n-j G:i l', $date); ?> 输出日志发布时间,参数'Y-n-j G:i l'用于定义日期格式.
  5. <?php blog_sort($logid); ?>
  6. 输出日志所属的分类,该函数位于模板module.php内
  7. <?php editflg($logid,$author); ?>
  8. 当管理员或作者登陆时显示“编辑”链接,该函数位于模板module.php内
  9. <?php echo $log_content; ?>
  10. 输出日志全文内容
  11. <?php blog_att($logid); ?>
  12. 如日志有附件则输出附件,该函数位于模板module.php内
  13. <?php blog_tag($logid); ?>
  14. 输出日志的标签,该函数位于模板module.php内
  15. <?php echo $comnum; ?>
  16. 日志页显示评论数
  17. <?php echo $tbcount; ?>
  18. 日志页显示引用数
  19. <?php echo $views; ?>
  20. 日志页显示浏览量
  21. <?php doAction('log_related', $logData); ?>
  22. 相关日志的挂载点,与3.x版本不同,4.0带第二参数
  23. <?php neighbor_log($neighborLog); ?>
  24. 输出邻近,就是上一篇及下一篇,该函数位于模板module.php内
  25. <?php blog_trackback($tb, $tb_url, $allow_tb); ?>
  26. 输出该日志被引用的信息列表,与3.x不同注意区分
  27. <?php blog_comments($comments); ?>
  28. 输出该日志评论列表,与3.x不同注意区分
  29. <?php blog_comments_post($logid,$ckname,$ckmail,$ckurl,$verifyCode,$allow_remark); ?>
  30. 输出发表评论框,与3.x不同注意区分

page.php文件
该文件写法与echo_log.php类似,请参照上方描述
t.php文件
与之前相同的内容不再重复

  1. <?php echo $avatar; ?> 输出头像
  2. <?php echo $author; ?> 输出作者名
  3. <?php echo $val['t'];?> 输出碎语内容
  4. <?php echo DYNAMIC_BLOGURL; ?> 根据当前url输出博客网址,主要用于js,解决跨域问题
  5. <?php echo $tid;?> 输出碎语所在数据库中的id号
  6. <?php echo $val['date'];?> 发布碎语的时间
  7. $reply_code :其值为‘n’或‘y’,后台设置是否启用碎语回复验证码
  8. <?php echo $rcode; ?> 输出验证码

side.php文件
侧边栏,主要负责根据后台widgets设置信息输出侧边栏内容.建议该文件内代码保持不变.
module.php文件
模板公共代码,包含侧边widgets、评论、引用、编辑等. 该文件由若干函数组成,被博客前台文件调用,可在内自定义函数实现更多功能. 如在自定义函数内调用emlog缓存时,假设读取user缓存信息,则形如: global $CACHE; $user_cache = $CACHE→readCache('user'); 如需要操作数据库,则形如: $DB = MySql::getInstance(); $res = $DB→query($sql); 以上两点与3.x不同,请注意区分
404.php文件
用于自定义404页面的模板.可以自行设置。
最后注意:
前台模板部分挂载点一览

  1. doAction('index_footer'); //页脚底部挂载点
  2. doAction('index_loglist_top'); //首页日志列表顶部挂载点
  3. doAction('log_related', $logData); //相关日志挂载点
  4. doAction('diff_side'); //侧边栏挂载点

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]JAVA毕业设计-英杰学堂网上教学平台-(系统+LW)

[附源码]JAVA毕业设计-英杰学堂网上教学平台-&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项…

一道关于Vue的数据绑定和依赖收集的面试题

概要 分享一道Vue的面试题&#xff0c;该题涉及Vue的响应式数据绑定和依赖收集&#xff0c;希望可以加深大家对Vue原理的理解。 题面 有如下html和JS&#xff0c;要求使用Vue的响应式数据原理和依赖收集原理&#xff0c;实现createApps和ref方法。只能使用原生JS&#xff0c…

教育的本质——采用不同学习方式,学习者在两周后还能记住的内容有多少

目录 一、学习金字塔模型 二、学习曲线 三、左右脑交替学习法 一、学习金字塔模型 “学习金字塔模型”&#xff0c;人们学习的效率一共分为七个层次&#xff1a; 第一层 ~ 第四层&#xff1a;这是我们最熟悉不过的形式&#xff0c;在学生时代&#xff0c;老师在上面讲课、…

【Leetcode】225. 用队列实现栈、232. 用栈实现队列

作者&#xff1a;一个喜欢猫咪的的程序员 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 目录 225. 用队列实现栈 232. 用栈实现队列 225. 用队列实现栈 225. 用队…

91-143-Scala-集合模式泛型等

91-Scala-集合模式泛型等&#xff1a; Scala 的集合有三大类&#xff1a;序列 Seq、集 Set、映射 Map&#xff0c;所有的集合都扩展自 Iterable特质。 2&#xff09;对于几乎所有的集合类&#xff0c;Scala 都同时提供了可变和不可变的版本&#xff0c;分别位于以下两个包 不…

人工智能(AI)背后人工的力量——数据标注

尽管随着AI的普及&#xff0c;我们在生活中越来越依赖于人工智能&#xff0c;但“人工智障”的相关调侃也从来没有消失过。 相信大家都知道&#xff0c;如果我们想要让AI准确识别出图中的鸟&#xff0c;我们需要在数据集中手动将这些照片标记为鸟&#xff0c;然后让算法和图像…

c3p0数据库连接池的使用

c3p0数据库连接池的使用 c3p0的官网&#xff1a;c3p0 - JDBC3 c3p0数据库连接池有两种方法 导入jar包 首先两种方法都需要导入jar包 图中打钩的&#xff0c;第一个是c3p0的包&#xff0c;第二个是连接数据库的 在WEB-INF下新建lib包&#xff0c;将所需要的jar导入 右键添加…

【Java技术专题】「OpenJDK专题」想不想编译属于你自己的JDK呢?(Windows环境)

Win10下编译OpenJDK8 编译环境 Windows10专业版64位&#xff1b; 编译前准备 Tip&#xff1a; 以下软件的安装和解压目录尽量不要包含中文或空格&#xff0c;不然可能会出现问题 安装 Visual Studio 2010 Professional 在windows下编译JDK需要使用Visual Studio 2010 Profes…

反抗与反噬:亚马逊被迫结束封号神秘主义,不再粗暴关店

“每一天醒来&#xff0c;都要看一眼自己的店铺是否还在。”、“账号被封之后&#xff0c;自己也曾第一时间向平台申诉&#xff0c;经历过一次、两次甚至是多次申诉无果后&#xff0c;才意识到账号是真的回不来了。”、“过去传言大卖有保护伞&#xff0c;这一回才发现做亚马逊…

B站有哪些值得Java初学者看的视频,Java学习路线

我的读者中有很大一部分学生读者&#xff0c;以前也分享过一些Java学习路线&#xff0c;但是我收到的反馈并不好&#xff0c;因为学习路线包含的内容太多了&#xff0c;对于初学者来说难度太大&#xff0c;时间也不够用&#xff0c;根本学不完。今天我将结合B站优秀视频整理一期…

英特尔着眼系统工艺协同优化理念,推进摩尔定律新浪潮

Ann Kelleher介绍了晶体管诞生75年之后的新进展 在IEDM 2022&#xff08;2022 IEEE国际电子器件会议&#xff09;全体会议上发表演讲之前&#xff0c;英特尔副总裁兼技术开发总经理Ann Kelleher接受了《IEEE Spectrum》的采访&#xff0c;她表示&#xff0c;摩尔定律的下一波浪…

Tcp/Udp(网络套接字,服务器) -- Linux/Windows

目录 网络传输本质 认识端口号 认识协议 认识TCP协议 认识UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 sockaddr 结构 sockaddr_in 结构 in_addr结构 编写代码前的小tip&#xff08;重点&#xff09; UDP套接字&#xff08;网络通信&#xf…

算法竞赛入门【码蹄集进阶塔335题】(MT2101-2125)

算法竞赛入门【码蹄集进阶塔335题】(MT2201-2225&#xff09; 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2201-2225&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f;目录1. MT2101 竹鼠发瓜子2. MT2102 竹鼠发瓜子&#xff08;二…

Raft协议

Raft协议先行了解 总体过程速览 假设我们只使用一个节点&#xff0c;可以很容易的达成协议或者共识。 但是现在我们思考&#xff0c;假如有多个节点呢&#xff1f; 多个节点之间达成协议或者共识就叫做分布式共识。 而Raft就是一个实现分布式共识的协议。 一个节点可以有3…

数字化转型的十大好处

前言&#xff1a; 在过去的几年中&#xff0c;“适者生存”对企业来说是至关重要的。不能适应环境变化的企业&#xff0c;也将会加速被淘汰的进程。只有从数字化转型中受益的企业才能更好的参与管理和快速调整&#xff0c;这样一来&#xff0c;员工便能够在更高效、更安全的状…

黑盒测试用例设计 - 判定表法

什么是判定表&#xff1f; 判定表法也叫判定驱动法&#xff0c;是分析和表达多逻辑条件下执行不同操作的情况的工作。 应用场合&#xff1a;只要适用于多条件的内容组合与结果分析 它由以下几个内容组成&#xff1a; 条件桩&#xff08;condition stub&#xff09;&#xff1…

LwIP带操作系统的移植

目录 LwIP移植前期准备 LwIP移植流程 修改lwipopts.h 修改lwip_comm.c文件 修改ethernetif.c/h文件 修改ethernetif_input函数 修改ethernet.c文件 添加应用程序 LwIP是支持操作系统的&#xff0c;在操作系统的支持下我们可以使用LwIP提供的另外两种API编程接口编程。没…

使用动态代理+Netty+Zookeeper+Protobuff手撸一个RPC框架

RPC是什么 RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用&#xff0c;一种计算机之间的远程调用技术&#xff0c;客户端能够在不知道服务器底层的通信架构的情况下调用服务器端的方法&#xff0c;就像调用自身的方法一样。 举个例子&#xff1a; 老婆自己去…

Uni-app 实现md5加密

写下这篇文章&#xff0c;记录自己走过的坑 第一次尝试&#xff1a;参照博客uniapp使用md5_清雨小竹的博客-CSDN博客_uniapp md5 引入md5.js后&#xff0c;在main.js中import后&#xff0c;无法使用md5.hex_md5("需要加密的字符串")&#xff0c;vue页面无法打开&…

【捕风捉影】Vue项目报错,点击浏览器报错信息定位不到报错代码,该如何优雅地调试代码?

【捕风捉影】Vue项目如何优雅地调试代码一、背景二、调试时开启productionSourceMap三、devtool几种模式一、背景 通过vue-cli服务运行项目&#xff0c;项目运行一切正常。但打包后&#xff0c;通过nginx部署运行&#xff0c;大屏展示模块报echarts typeError 错误。但是点击浏…