首页
留言板
统计
Search
1
阿里云国际OSS使用CloudFlare免流量
2,262 阅读
2
PP.UA免费域名注册
2,173 阅读
3
Adobe Photoshop CS2经典版 中文原版
2,158 阅读
4
7-Zip中文美化版
2,027 阅读
5
获取免费的 Microsoft 365 E5 开发人员订阅
1,941 阅读
软件分享
网络资源
网络代码
生活情感
免费主机
Search
标签搜索
代码
工具软件
Android
教程
Emlog
办公软件
图形图像
免费空间
Web
情感
PHP
视频
系统工具
上传下载
Windows
建站
PDF
网盘
学习
Typecho
ZJ
累计撰写
802
篇文章
累计收到
105
条评论
首页
栏目
软件分享
网络资源
网络代码
生活情感
免费主机
页面
留言板
统计
搜索到
71
篇与
的结果
2019-11-17
验证Gravatar头像是否存在并缓存至服务器
<?php function validate_gravatar($Verification_email) { $email = $Verification_email; // 要验证的Email地址 $hash = md5(strtolower(trim($email))); $uri = 'http://www.gravatar.com/avatar/' . $hash . '?d=404'; $headers = @get_headers($uri); if (!preg_match("|200|", $headers[0])) { return FALSE; } else { return true; } } //使用 if(validate_gravatar($value['mail'])=='true'){ $gface_url = "http://www.gravatar.com/avatar/".md5($value['mail'])."?size=32&d=".TEMPLATE_URL."images/ava_d.gif"; }else{ $gface_url = TEMPLATE_URL.'images/gravatar/'.rand(1,5).'.jpg'; }echo $gface_url; ;?> <?php //gravatar头像缓存 function ting_avatar( $email) { if(validate_gravatar($email)=='true'){ $gfile_path=EMLOG_ROOT."/content/uploadfile/ting/avatar/"; //缓存文件夹路径 if(!file_exists($gfile_path)){ mkdir($gfile_path,0755); } $gmd5 = md5( strtolower( $email ) );//根据email的值来生成一个md5变量值,作为本地.jpg头像的名字 $gimg = BLOG_URL."/content/uploadfile/ting/avatar/g_" . $gmd5. ".jpg";//avatar相对路径 $gfile = $gfile_path.'g_'. $gmd5. '.jpg';//缓存的头像的绝对路径 $gtime = 24*3600*15; //单位s,设置更新时间为15天 if (!file_exists($gfile) || (time()-filemtime($gfile)) > $gtime){ //不是第一次留言留言且留言时间超过15天就更新头像 $gimg_url = 'http://www.gravatar.com/avatar/'. $gmd5; // 旧服务器 (哪个快就开哪个) copy($gimg_url, $gfile); //将$gimg_url代表的网络图片复制到$gfile代表的本地服务器中 } }else{$gimg = TEMPLATE_URL .'images/ting.png';//自定义的头像 } echo $gimg; } ?>使用 在模板文件夹下面打开module文件,找到 <?php echo getGravatar($comment['mail']); ?> 替换成 <?php echo ting_avatar( $comment['mail']); ?>
2019年11月17日
274 阅读
0 评论
0 点赞
2019-11-17
EMLOG文章页标签作为关键词
第一步找到当前所用模版文件夹下的header.php使用编辑器打开,找到下面代码:<meta name="keywords" content="<?php echo $site_key; ?>" />替换为下面代码:<?php if(isset($logid)):?><meta name="keywords" content="<?php page_tag_key($logid);?>" /><?php else: ?><meta name="keywords" content="<?php echo $site_key; ?>" /><?php endif; ?>第二步把下方代码复制到当前所用模版文件夹下的module.php文件里去:<?phpfunction page_tag_key($blogid){global $CACHE;$log_cache_tags = $CACHE->readCache('logtags');if (!empty($log_cache_tags[$blogid])){foreach ($log_cache_tags[$blogid] as $value){$tag .= $value['tagname'].',';}echo substr($tag,0,-1);}}?>切记不要使用记事本编辑,编辑前要备份下,修改好上传覆盖即可;如果你使用了其它判断,例如设置分类关键词的方法,那就需要写上多个判断了。
2019年11月17日
270 阅读
0 评论
0 点赞
2019-11-17
给Emlog导航添加FontAwesome图标
前言图标是给文字的一种补充,许多图标往往可以让我们快速的识别内容。 在Wordpress上个导航菜单添加个性图标早已实现,emlog一直没有看到类似内容,折腾一下,发现其实现其实挺简单的。 再此发布下更改教程(注:本篇文章仅为作者个人观点,如您有更好的意见方法可在此回复,不到之处忘勿喷。)教程首先找到模板文件module.php打开搜索 1 <?php echo $value['naviname']; ?> 找到如下这行找到合适的FontAwesome图标如 1 <i class="fa fa-home"></i> 这在导航名称后面添加 fa fa-home 中间用 # 隔开。 至此教程结束。 Emlog许多地方可采上述方法,例如,侧边栏等等
2019年11月17日
430 阅读
0 评论
0 点赞
2019-11-17
emlog模板调用多侧边栏教程
想尝试一下三栏的,但是不知道如何调用多侧边栏。查了emlog官方文档(5.0 版以后的),可以调用多个多个侧边栏。下面emlog官方文档原文: Sidebar Amount:标记该模板有几个侧边栏,一般为1,有些模板有两个侧边栏则标记2。这样可以在后台widgets里识别管理(具体可下载体验官方收录的模板G7)。 但是如何调用,文档说参考 G7 模板,但是我在应用中心没找到那个那个板子。后来也在emlog官方论坛发帖询问,也没人回答。于是干脆自己想办法吧。学了这么久的php,这点还不会,那真是白学了。我突然发现我有一个缺点,就是不相信自己的实力,那可能就是自卑吧。总是再找别人的方法, 而自己没有真正去想。其实动脑想了之后,然后动手实践很容易解决。下面是我的解决方法:1、申明侧边栏目数在header.php文件的页头申明栏目数:【Sidebar Amount:3】表示此模板支持三个栏目。看了一下数据库,似乎最多也只能是4个。但是3个已经足够了。2、设置侧边栏 3、调用侧边栏①$widgets = !empty($options_cache['widgets1']) ? unserialize($options_cache['widgets1']) : array(); //原文②$widgets = unserialize($options_cache['widgets1']);//调用侧边栏1③$widgets = unserialize($options_cache['widgets2']);//调用侧边栏2④$widgets = unserialize($options_cache['widgets3']);//调用侧边栏3将side.php 复制三份并重命名如:side1.php、side2.php、side3.php,然后分别把第①句替换为第②、③、④句。最后include这三个文件中的任何一个,就可以出现不同的侧边栏。理想情况下,首页(列表页)、文章页、页面(微语)可以分别调用不同的侧边栏。结语emlog模板调用多侧边栏教程就是这样,是不是很简单。凡事多动脑,问题就解决了……
2019年11月17日
279 阅读
0 评论
0 点赞
2019-11-17
emlog彩色3D标签云 - 非插件
刚才在emlog模板中心有款新出的模板,进入了作者的主页,看上了它那个侧边上的3D标签云,看上去还是很不错的,就给扒了下来本人菜鸟一枚,各位大大请轻喷,下面是使用上的效果,也可以看我的侧边,已经启用的是不是看上去还不错,下面来讲下实现过程首先是css样式部分/*标签云*/ #tag_cloud_widget{position:relative;width:240px;height:240px;margin:10px auto 10px} #tag_cloud_widget a{position:absolute;color:#fff;text-align:center;text-overflow:ellipsis;white-space:nowrap;top:0;left:0;padding:3px 5px;border:0} #tag_cloud_widget a:hover{background:#d02f53;display:block} #tag_cloud_widget a:nth-child(n){background:#666;border-radius:3px;display:inline-block;line-height:18px;margin:0 10px 15px 0} #tag_cloud_widget a:nth-child(2n){background:#d1a601} #tag_cloud_widget a:nth-child(3n){background:#286c4a} #tag_cloud_widget a:nth-child(5n){background:#518ab2} #tag_cloud_widget a:nth-child(4n){background:#c91d13}然后是js部分var radius = 100; var d = 200; var dtr = Math.PI / 180; var mcList = []; var lasta = 1; var lastb = 1; var distr = true; var tspeed = 11; var size = 200; var mouseX = 0; var mouseY = 10; var howElliptical = 1; var aA = null; var oDiv = null; window.onload = function() { var i = 0; var oTag = null; oDiv = document.getElementById('tag_cloud_widget'); aA = oDiv.getElementsByTagName('a'); for (i = 0; i < aA.length; i++) { oTag = {}; aA[i].onmouseover = (function(obj) { return function() { obj.on = true; this.style.zIndex = 9999; this.style.color = '#fff'; this.style.background = '#0099ff'; this.style.padding = '5px 5px'; this.style.filter = "alpha(opacity=100)"; this.style.opacity = 1 } })(oTag) aA[i].onmouseout = (function(obj) { return function() { obj.on = false; this.style.zIndex = obj.zIndex; this.style.color = '#fff'; this.style.background = '#30899B'; this.style.padding = '5px'; this.style.filter = "alpha(opacity=" + 100 * obj.alpha + ")"; this.style.opacity = obj.alpha; this.style.zIndex = obj.zIndex } })(oTag) oTag.offsetWidth = aA[i].offsetWidth; oTag.offsetHeight = aA[i].offsetHeight; mcList.push(oTag) } sineCosine(0, 0, 0); positionAll(); (function() { update(); setTimeout(arguments.callee, 40) })() }; function update() { var a, b, c = 0; a = (Math.min(Math.max( - mouseY, -size), size) / radius) * tspeed; b = ( - Math.min(Math.max( - mouseX, -size), size) / radius) * tspeed; lasta = a; lastb = b; if (Math.abs(a) <= 0.01 && Math.abs(b) <= 0.01) { return } sineCosine(a, b, c); for (var i = 0; i < mcList.length; i++) { if (mcList[i].on) { continue } var rx1 = mcList[i].cx; var ry1 = mcList[i].cy * ca + mcList[i].cz * ( - sa); var rz1 = mcList[i].cy * sa + mcList[i].cz * ca; var rx2 = rx1 * cb + rz1 * sb; var ry2 = ry1; var rz2 = rx1 * ( - sb) + rz1 * cb; var rx3 = rx2 * cc + ry2 * ( - sc); var ry3 = rx2 * sc + ry2 * cc; var rz3 = rz2; mcList[i].cx = rx3; mcList[i].cy = ry3; mcList[i].cz = rz3; per = d / (d + rz3); mcList[i].x = (howElliptical * rx3 * per) - (howElliptical * 2); mcList[i].y = ry3 * per; mcList[i].scale = per; var alpha = per; alpha = (alpha - 0.6) * (10 / 6); mcList[i].alpha = alpha * alpha * alpha - 0.2; mcList[i].zIndex = Math.ceil(100 - Math.floor(mcList[i].cz)) } doPosition() } function depthSort() { var i = 0; var aTmp = []; for (i = 0; i < aA.length; i++) { aTmp.push(aA[i]) } aTmp.sort(function(vItem1, vItem2) { if (vItem1.cz > vItem2.cz) { return - 1 } else if (vItem1.cz < vItem2.cz) { return 1 } else { return 0 } }); for (i = 0; i < aTmp.length; i++) { aTmp[i].style.zIndex = i } } function positionAll() { var phi = 0; var theta = 0; var max = mcList.length; for (var i = 0; i < max; i++) { if (distr) { phi = Math.acos( - 1 + (2 * (i + 1) - 1) / max); theta = Math.sqrt(max * Math.PI) * phi } else { phi = Math.random() * (Math.PI); theta = Math.random() * (2 * Math.PI) } mcList[i].cx = radius * Math.cos(theta) * Math.sin(phi); mcList[i].cy = radius * Math.sin(theta) * Math.sin(phi); mcList[i].cz = radius * Math.cos(phi); aA[i].style.left = mcList[i].cx + oDiv.offsetWidth / 2 - mcList[i].offsetWidth / 2 + 'px'; aA[i].style.top = mcList[i].cy + oDiv.offsetHeight / 2 - mcList[i].offsetHeight / 2 + 'px' } } function doPosition() { var l = oDiv.offsetWidth / 2; var t = oDiv.offsetHeight / 2; for (var i = 0; i < mcList.length; i++) { if (mcList[i].on) { continue } var aAs = aA[i].style; if (mcList[i].alpha > 0.1) { if (aAs.display != '') aAs.display = '' } else { if (aAs.display != 'none') aAs.display = 'none'; continue } aAs.left = mcList[i].cx + l - mcList[i].offsetWidth / 2 + 'px'; aAs.top = mcList[i].cy + t - mcList[i].offsetHeight / 2 + 'px'; aAs.filter = "alpha(opacity=" + 100 * mcList[i].alpha + ")"; aAs.zIndex = mcList[i].zIndex; aAs.opacity = mcList[i].alpha } } function sineCosine(a, b, c) { sa = Math.sin(a * dtr); ca = Math.cos(a * dtr); sb = Math.sin(b * dtr); cb = Math.cos(b * dtr); sc = Math.sin(c * dtr); cc = Math.cos(c * dtr) }下面是php部分,修改module里的侧边标签方法<?php //3D标签云 function widget_tag($title){ global $CACHE; $tag_cache = $CACHE->readCache('tags');?> <div class="side"> <h3><i class="fa fa-tags mar-r-4"></i><?php echo $title;?></h3> <div id="tag_cloud_widget"> <div class="tagcloud"> <script type="text/javascript" src="<?php echo TEMPLATE_URL; ?>js/3dtag.js"></script> <?php foreach($tag_cache as $value): ?> <a href="<?php echo Url::tag($value['tagurl']); ?>" title="<?php echo $value['usenum']; ?> 篇文章"><?php echo $value['tagname']; ?></a> <?php endforeach; ?> <div class="clear"></div></div></div></div> <?php }?>
2019年11月17日
268 阅读
0 评论
0 点赞
2019-11-17
emlog模板结构介绍
模板文件目录说明一般来说,一个模板都会包含以下几个部分:images文件夹:存放模板所需图片。echo_log.php:显示日志内容。footer.php:页面底部。header.php:页面头部。log_list.php:显示日志列表内容。main.css:模板的css文件。module.php:模板公共代码,包含侧边widgets、评论、引用、编辑等,该文件是模板最核心的模块。page.php:自定义的页面内容的模板。preview.jpg:在后台模板选择界面显示的模板预览图,300×225 jpg格式。side.php:模板侧边栏文件,如制作单栏模板则该文件不是必须的。t.php:显示emlog系统自带的微博(碎语)内容。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文件夹等,只需要对模板代码做小部分更改,那么它们都是可以改名、移动、甚至删除的。下面我们将对以上各模块进行简要分析:公共代码分析通过预览整个模板中的各个文件,你会发现以下代码同时存在于多个文件中,这些代码分别有以下用途: if(!defined('EMLOG_ROOT')) {exit('error!');} 此行代码存在于模板目录下的每个php文件起始部分(事实上为了安全起见,该行代码也在admin目录下的几乎所有php文件起始部分存在),其作用是防止代码所在的php脚本被直接访问执行。 require_once View::getView('side'); require_once View::getView('footer'); 这两行代码存在于log_list.php、echo_log.php、page.php、t.php里面,其作用是调用模板文件夹下的side.php和footer.php的代码到当前文件的当前位置。View是emlog的模板视图控制器,View::getView('文件名','文件后缀')将返回当前模板安装路径下对应的文件。getView函数的第二个参数为缺省参数,在不传入值的情况下,将默认作为.php文件后缀返回文件路径。header.php开头注释内容是模板信息,该信息显示在模板选择界面Template Name:模板名称Description:模板介绍描述Author:模板作者Author Url:作者或模板发布的URLSidebar Amount:标记该模板有几个侧边栏,一般为1,有些模板有两个侧边栏则标记2。这样可以在后台widgets里识别管理(具体可下载体验官方收录的模板G7)。之后是具体代码部分:if(!defined('EMLOG_ROOT')) {exit('error!');}该行代码同样存在于其它模板文件中,为防止该文件被直接执行。require_once View::getView('module');加载模板公共代码.* $site_title:站点标题 * $site_key:关键字 * $site_description:输出博客设置的摘要 * BLOG_URL:博客首页的URL,输出形如http://simue.com/blog/ * TEMPLATE_URL:模板文件夹的URL,用于加载模板内的css、js及其他内容,输出形如http://simue.com/blog/content/templates/simue-tuso/ * BLOG_URL.Option::get('topimg'):这句可以无视,因为只默认模板可以自定义banner,其它模板没这功能(卡片语:很没营养的设定,嗯。)<?php echo $curpage == CURPAGE_HOME ? 'current' : 'common';?> 判断当前是否首页,是则给导航加current类,用于表现当前位置。<?php if($istwitter == 'y'):?>…….<?php endif;?> 如后台设置在前台显示碎语,则输出…….中的内容。<?php echo $curpage == CURPAGE_TW ? 'current' : 'common';?> 判断当前URL是否为碎语并选择加类名。<?php foreach ($navibar as $key ⇒ $val):?>…….<?php endforeach;?> 输出自定义页面的链接footer.phpOption::EMLOG_VERSION:获得版本号。$icp:获得后台设置的ICP备案号。<?php doAction('index_footer'); ?> 页脚底部挂载点加入。log_list.php<?php doAction('index_loglist_top'); ?> 页脚底部挂载点加入。$value['logid'] 该变量为当前日志的id<?php topflg($value['top']); ?> 显示置顶标记,该函数位于模板module.php内。<?php echo $value['log_url']; ?> 输出日志URL<?php echo $value['log_title']; ?> 输出日志标题<?php blog_author($value['author']); ?>输出日志的作者,该函数位于模板module.php内。<?php echo gmdate('Y-n-j G:i l', $value['date']); ?>输出日志发布时间,参数'Y-n-j G:i l'用于定义日期格式。<?php blog_sort($value['logid']); ?>输出日志所属的分类,该函数位于模板module.php内。<?php editflg($value['logid'],$value['author']); ?>当管理员或作者登陆时显示“编辑”链接,该函数位于模板module.php内。<?php echo $value['log_description']; ?>输出日志摘要(没有摘要则输出全文)。<?php blog_att($value['logid']); ?>如日志有附件则输出附件,该函数位于模板module.php内。<?php blog_tag($value['logid']); ?> 输出日志的标签,该函数位于模板module.php内。<?php echo $value['comnum']; ?> 输出当前日志的评论数<?php echo $value['tbcount']; ?> 输出当前日志的引用量<?php echo $value['views']; ?> 输出当前日志的浏览量<?php echo $page_url;?> 显示当前列表页的翻页功能。<?php include View::getView('side'); include View::getView('footer'); ?>加入侧边栏及加入页脚。echo_log.php该文件功能函数与列表页一致,但参数有区别,注意区分。 $logid 该变量为当前日志的id<?php topflg($top); ?> 显示置顶标记,该函数位于模板module.php内。<?php echo $log_title; ?> 输出日志标题。<?php blog_author($author); ?> 输出日志的作者,该函数位于模板module.php内。<?php echo gmdate('Y-n-j G:i l', $date); ?> 输出日志发布时间,参数'Y-n-j G:i l'用于定义日期格式。<?php blog_sort($logid); ?> 输出日志所属的分类,该函数位于模板module.php内。<?php editflg($logid,$author); ?> 当管理员或作者登陆时显示“编辑”链接,该函数位于模板module.php内。<?php echo $log_content; ?> 输出日志全文内容。<?php blog_att($logid); ?> 如日志有附件则输出附件,该函数位于模板module.php内。<?php blog_tag($logid); ?> 输出日志的标签,该函数位于模板module.php内。<?php echo $comnum; ?> 日志页显示评论数<?php echo $tbcount; ?> 日志页显示引用数<?php echo $views; ?> 日志页显示浏览量<?php doAction('log_related', $logData); ?> 相关日志的挂载点,与3.x版本不同,4.0带第二参数。<?php neighbor_log($neighborLog); ?> 输出邻近,就是上一篇及下一篇,该函数位于模板module.php内。<?php blog_trackback($tb, $tb_url, $allow_tb); ?> 输出该日志被引用的信息列表,与3.x不同注意区分。<?php blog_comments($comments); ?> 输出该日志评论列表,与3.x不同注意区分。<?php blog_comments_post($logid,$ckname,$ckmail,$ckurl,$verifyCode,$allow_remark); ?> 输出发表评论框,与3.x不同注意区分。page.php该文件写法与echo_log.php类似,不再重复。t.php与之前相同的内容不再重复。 <?php echo $avatar; ?> 输出头像。<?php echo $author; ?> 输出作者名。<?php echo $val['t'];?> 输出碎语内容。<?php echo DYNAMIC_BLOGURL; ?> 根据当前url输出博客地址,主要用于js,解决跨域问题。<?php echo $tid;?> 输出碎语所在数据库中的id号。<?php echo $val['date'];?> 发布碎语的时间。$reply_code :其值为‘n’或‘y’,后台设置是否启用碎语回复验证码。<?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页面的模板。最后附:前台模板部分挂载点一览doAction('index_footer'); 页脚底部挂载点doAction('index_loglist_top'); 首页日志列表顶部挂载点doAction('log_related', $logData); 相关日志挂载点doAction('diff_side'); 侧边栏挂载点
2019年11月17日
237 阅读
0 评论
0 点赞
2019-01-17
Emlog所有标签列表代码
EMLOG的标签是个特色,其实标签的功能是很强大的,如果你能充分利用好标签,你可以用EMLOG的标签功能做成各种效果;EMLOG默认没有所有标签列表,只有在侧边栏有全部标签显示的列表,我们可以动手来制作一个EMLOG所有标签列表的页面,今天就分享下自己动手制作EMLOG所有标签列表的步骤;首先使用编辑器新建个PHP文件命名为TAGS.PHP,编辑这个PHP文件把以下代码复制到PHP文件里面,做做相应的修改把名称改为你的,保存这个PHP文件上传到你的EMLOG站点的跟目录下,然后再浏览器地址栏输入路径网址打开你就会看到效果了。<?php require_once 'init.php'; define('TEMPLATE_PATH', TPLS_PATH.Option::get('nonce_templet').'/'); $CACHE = Cache::getInstance(); $options_cache = $CACHE->readCache('options'); extract($options_cache); $navibar = unserialize($navibar); $curpage = CURPAGE_HOME; $site_title = '所有标签列表 - '.Option::get('blogname'); $site_key = '标签列表,标签云集,文章标签索引'; $site_description = '所有标签列表页面'; include View::getView('header'); ?> <div style="background:#fff;padding:10px;display: table;height:100%"> <div style="font-size:16px;padding-bottom:5px;margin-bottom:10px;color:#0C3;border-bottom:1px solid #00aff0">现在位置:<a title="返回首页" href="<?php echo BLOG_URL; ?>">首页</a> » 所有标签列表</div> <ul> <?php global $CACHE; $tag_cache = $CACHE->readCache('tags');?> <?php foreach($tag_cache as $value): ?> <li style="white-space:nowrap;margin:0 10px 10px 0;float:left"><span style="font-size:<?php echo $value['fontsize']; ?>pt; line-height:30px;border: 1px dashed #CCC;padding: 5px;border-radius: 10px;display: block;"> <a style="color:#<?php echo dechex(rand(0,16777215));?>" href="<?php echo Url::tag($value['tagurl']); ?>" title="<?php echo $value['usenum']; ?> 篇日志"><?php echo $value['tagname']; ?>(<?php echo $value['usenum']; ?>)</a></span></li><?php endforeach; ?> </ul> </div><div style="clear:both"></div> <?php include View::getView('footer');?>
2019年01月17日
631 阅读
0 评论
0 点赞
1
...
8
9