Emlog显示评论者IP地理信息的三种方法-三种方法-重要的说两遍 emlog
emlog系统存储了评论人的IP地址,有的时候,需要显示该IP的真实地理地址,可以通过以下两种方法获得。
一、本地获得IP地理地址。通过本地查找本地IP数据库(纯真版)来获得,IP数据库可以到http://www.cz88.net/下载安装后,在安装目录里把qqwry.dat文件提取出来,放到emlog根目录即可。 (保证与index.php同在一个目录中)
在module.php中添加以下代码:
<?php //获取IP地理地址 $data = '254.254.254.254'; class IpLocation { var $fp; var $firstip; var $lastip; var $totalip; function getlong() { $result = unpack('Vlong', fread($this->fp, 4)); return $result['long']; } function getlong3() { $result = unpack('Vlong', fread($this->fp, 3).chr(0)); return $result['long']; } function packip($ip) { return pack('N', intval(ip2long($ip))); } function getstring($data = "") { $char = fread($this->fp, 1); while (ord($char) > 0) { $data .= $char; $char = fread($this->fp, 1); } return $data; } function getarea() { $byte = fread($this->fp, 1); switch (ord($byte)) { case 0: $area = ""; break; case 1: case 2: fseek($this->fp, $this->getlong3()); $area = $this->getstring(); break; default: $area = $this->getstring($byte); break; } return $area; } function getlocation($ip) { if (!$this->fp) return null; $location['ip'] = gethostbyname($ip); $ip = $this->packip($location['ip']); $l = 0; $u = $this->totalip; $findip = $this->lastip; while ($l <= $u) { $i = floor(($l + $u) / 2); fseek($this->fp, $this->firstip + $i * 7); $beginip = strrev(fread($this->fp, 4)); if ($ip < $beginip) { $u = $i - 1; } else { fseek($this->fp, $this->getlong3()); $endip = strrev(fread($this->fp, 4)); if ($ip > $endip) { $l = $i + 1; } else { $findip = $this->firstip + $i * 7; break; } } } fseek($this->fp, $findip); $location['beginip'] = long2ip($this->getlong()); $offset = $this->getlong3(); fseek($this->fp, $offset); $location['endip'] = long2ip($this->getlong()); $byte = fread($this->fp, 1); switch (ord($byte)) { case 1: $countryOffset = $this->getlong3(); fseek($this->fp, $countryOffset); $byte = fread($this->fp, 1); switch (ord($byte)) { case 2: fseek($this->fp, $this->getlong3()); $location['country'] = $this->getstring(); fseek($this->fp, $countryOffset + 4); $location['area'] = $this->getarea(); break; default: $location['country'] = $this->getstring($byte); $location['area'] = $this->getarea(); break; } break; case 2: fseek($this->fp, $this->getlong3()); $location['country'] = $this->getstring(); fseek($this->fp, $offset + 8); $location['area'] = $this->getarea(); break; default: $location['country'] = $this->getstring($byte); $location['area'] = $this->getarea(); break; } if ($location['country'] == " CZNET") { $location['country'] = "未知"; } if ($location['area'] == " CZNET") { $location['area'] = ""; } return $location; } function IpLocation($filename = "qqwry.dat") { $this->fp = 0; if (($this->fp = @fopen($filename, 'rb')) !== false) { $this->firstip = $this->getlong(); $this->lastip = $this->getlong(); $this->totalip = ($this->lastip - $this->firstip) / 7; register_shutdown_function(array(&$this, '_IpLocation')); } } function _IpLocation() { if ($this->fp) { fclose($this->fp); } $this->fp = 0; } } function getaddress($myip){ $ipOrDomain=$myip; $iplocation = new IpLocation(); $location = $iplocation->getlocation($ipOrDomain); $address=mb_convert_encoding($location['country'].$location['area'], "utf-8", "gbk"); return $address; } ?>
然后在需要显示的地方插入:
<?php echo getaddress($comment['ip']);?>
即可。
二、通过远程网站相关接口实现。
在module.php中添加以下代码:
<?php //blog:获取IP地址所在地,提取新浪IP接口 function getaddress($ip) { //调用sina查询接口 $str = file_get_contents("http://counter.sina.com.cn/ip?ip=".$ip); //转换字符集 $str = mb_convert_encoding($str,"UTF-8","GBK"); //匹配结果 preg_match_all('/[\x{4e00}-\x{9fa5}]+/u',$str,$get); //将数组转换成字符串 $add = implode('-',$get[0]); //返回结果 return $add; } ?>
然后在需要显示的地方插入:
<?php echo getaddress($comment['ip']);?>
即可。
图片显示方式:
<a title= <?php echo getaddress($comment['ip']);?>> <img src="./content/templates/default/images/ip.png"></a>
其中ip.png这个图标会显示在评论人的后面,图片自找,鼠标放上去会显示地理地址。
另一种方法显示IP:
1.首先在当前模板的module.php最后添加如下代码:
<?php function convertip($ip) { $dat_path = EMLOG_ROOT.'/content/templates/你的模板文件/QQWry.Dat'; //*数据库路径*// if(!$fd = @fopen($dat_path, 'rb')){ return 'IP数据库文件不存在或者禁止访问或者已经被删除!'; } $ip = explode('.', $ip); $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3]; $DataBegin = fread($fd, 4); $DataEnd = fread($fd, 4); $ipbegin = implode('', unpack('L', $DataBegin)); if($ipbegin < 0) $ipbegin += pow(2, 32); $ipend = implode('', unpack('L', $DataEnd)); if($ipend < 0) $ipend += pow(2, 32); $ipAllNum = ($ipend - $ipbegin) / 7 + 1; $BeginNum = 0; $EndNum = $ipAllNum; while($ip1num>$ipNum || $ip2num<$ipNum) { $Middle= intval(($EndNum + $BeginNum) / 2); fseek($fd, $ipbegin + 7 * $Middle); $ipData1 = fread($fd, 4); if(strlen($ipData1) < 4) { fclose($fd); return '系统出错!'; } $ip1num = implode('', unpack('L', $ipData1)); if($ip1num < 0) $ip1num += pow(2, 32); if($ip1num > $ipNum) { $EndNum = $Middle; continue; } $DataSeek = fread($fd, 3); if(strlen($DataSeek) < 3) { fclose($fd); return '系统出错!'; } $DataSeek = implode('', unpack('L', $DataSeek.chr(0))); fseek($fd, $DataSeek); $ipData2 = fread($fd, 4); if(strlen($ipData2) < 4) { fclose($fd); return '系统出错!'; } $ip2num = implode('', unpack('L', $ipData2)); if($ip2num < 0) $ip2num += pow(2, 32); if($ip2num < $ipNum) { if($Middle == $BeginNum) { fclose($fd); return '未知'; } $BeginNum = $Middle; } } $ipFlag = fread($fd, 1); if($ipFlag == chr(1)) { $ipSeek = fread($fd, 3); if(strlen($ipSeek) < 3) { fclose($fd); return '系统出错!'; } $ipSeek = implode('', unpack('L', $ipSeek.chr(0))); fseek($fd, $ipSeek); $ipFlag = fread($fd, 1); } if($ipFlag == chr(2)) { $AddrSeek = fread($fd, 3); if(strlen($AddrSeek) < 3) { fclose($fd); return '系统出错!'; } $ipFlag = fread($fd, 1); if($ipFlag == chr(2)) { $AddrSeek2 = fread($fd, 3); if(strlen($AddrSeek2) < 3) { fclose($fd); return '系统出错!'; } $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0))); fseek($fd, $AddrSeek2); } else { fseek($fd, -1, SEEK_CUR); } while(($char = fread($fd, 1)) != chr(0)) $ipAddr2 .= $char; $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0))); fseek($fd, $AddrSeek); while(($char = fread($fd, 1)) != chr(0)) $ipAddr1 .= $char; } else { fseek($fd, -1, SEEK_CUR); while(($char = fread($fd, 1)) != chr(0)) $ipAddr1 .= $char; $ipFlag = fread($fd, 1); if($ipFlag == chr(2)) { $AddrSeek2 = fread($fd, 3); if(strlen($AddrSeek2) < 3) { fclose($fd); return '系统出错!'; } $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0))); fseek($fd, $AddrSeek2); } else { fseek($fd, -1, SEEK_CUR); } while(($char = fread($fd, 1)) != chr(0)){ $ipAddr2 .= $char; } } fclose($fd); if(preg_match('/http/i', $ipAddr2)) { $ipAddr2 = ''; } $ipaddr = "$ipAddr1 $ipAddr2"; $ipaddr = preg_replace('/CZ88.Net/is', '', $ipaddr); $ipaddr = preg_replace('/^s*/is', '', $ipaddr); $ipaddr = preg_replace('/s*$/is', '', $ipaddr); if(preg_match('/http/i', $ipaddr) || $ipaddr == '') { $ipaddr = '未知'; } $ipaddr = iconv('gbk', 'utf-8//IGNORE', $ipaddr); if( $ipaddr != ' ' ) return $ipaddr; else $ipaddr = '评论者来自火星,无法或者其所在地!'; return $ipaddr; } ?>
然后再在评论中添加要你要显示位置。原作者未给出图片提示的代码。
纯文字显示代码:
<?php echo convertip($comment['ip']); ?>
图片title显示代码:
<img src="<?php echo BLOG_URL; ?>XXX/ip.png" alt="<?php echo convertip($comment['ip']); ?>" title="<?php echo convertip($comment['ip']); ?>" width="16" height="16" class="useragent" data-bd-imgshare-binded="1">
上面代码中的XXX/ip.png是图片路径
其中使用到的纯真数据库以及图片自己下载,本博主暂不提供。
Mrxn教你让emlog自动实时提交至百度收录-SEO利器,站长们必看 emlog
Mrxn教你让emlog自动实时提交至百度收录-SEO利器,站长们必看
本文为Mrxn's Blog https://mrxn.net原创 转载请著名出处和链接,谢谢合作,互相尊重.
判断内容页是否百度收录,并且以博主和或者理员身份访问博客文章时自动向百度提交未收录的文章,后期会加如其他搜索引擎的自动提交功能.请关注Mrxn's Blog https://mrxn.net Email:admin#mrxn.net
下面我来教大家如何实现上述操作:
我们在modul.php底部加上如下代码
<?php //判断内容页是否百度收录,并且以博主和或者理员身份访问博客文章时自动向百度提交未收录的文章,后期会加如其他搜索引擎的自动提交功能.请关注Mrxn's Blog https://mrxn.net Email:admin#mrxn.net function baidu($url){ $url='http://www.baidu.com/s?wd='.$url; $curl=curl_init(); curl_setopt($curl,CURLOPT_URL,$url); curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $rs=curl_exec($curl); curl_close($curl); if(!strpos($rs,'没有找到')){ return 1; } else{ return 0; } } function checkbaidu($id){ $url=Url::log($id); if(baidu($url)==1){ echo "百度已收录"; } else { if (ROLE == 'admin' || ROLE == 'writer') { $urls = array( $url, ); $api = 'http://data.zz.baidu.com/urls?site=mrxn.net&token=你自己的token值'; $ch = curl_init(); $options = array( CURLOPT_URL => $api, CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => implode("\n", $urls), CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),); curl_setopt_array($ch, $options); $result = curl_exec($ch); echo 'success'; } echo "<a style=\"color:red;\" rel=\"external nofollow\" title=\"点击提交收录!\" target=\"_blank\" href=\"http://zhanzhang.baidu.com/sitesubmit/index?sitename=$url\">已自动提交度娘等待收录</a>"; } } ?>
(文章结尾有代码下载)然后在文章内容页引用即可,具体方法,不会的朋友请前往这里查看:传送门-点我
需要注意的其一:
$api = 'http://data.zz.baidu.com/urls?site=mrxn.net&token=你自己的token值';
$api 中的token值请换成你自己的token,获取方法:前往百度站长平台获取:http://zhanzhang.baidu.com/linksubmit/index
需要注意的其二,我把百度官方的函数做了一个小小的修改,将
$result = curl_exec($ch); echo $result;修改成了:$result = curl_exec($ch);echo 'success';
因为不修改的话就会出现这种情况:
返回值...很碍眼和排版,当然觉得没啥的可以改回去.修改后的效果:
至于是不是真的成功了.请往下看:
上图显示的是我博客每天的提交量(配额)上限:50 ,PS: 这个配额其实就是百度分配给每个网站的提交上限,超过这个数量,即使你提交了,度娘也是不要你的....555
她这个配额是根据你网站的每天访问量,活跃度,PR值.等等综合因数决定的,具体的请自行去度娘那里慢慢查看.我就不细说了.
我打开两个我最近刚刚写的文章(估计度娘未收录的):
在查看我的工具显示剩余配额还有多少.即验证是否成功提交了一次:
从图中我们可以看到剩余配额已近减少了两次.OK 至此,我们的方法成功了.以后我们写完一篇文章在查看一下,是不是就自动完成了SEO任务之一了呢?
当然,百度已近收录的就会显示如下效果:
各位看官,看完了还不赶紧去试试.让你的收录飞速提升!!! 看完了是不是应该评论评论吐槽吐槽呢?
注意:刷流量的孩子,在操作的时候就别登录后台了.不然可能优化过度,出现不良反应哦.
本文为Mrxn's Blog https://mrxn.net原创 转载请著名出处和链接,谢谢合作,互相尊重.
判断内容页是否百度收录,并且以博主和或者理员身份访问博客文章时自动向百度提交未收录的文章,后期会加如其他搜索引擎的自动提交功能.请关注Mrxn's Blog https://mrxn.net Email:admin#mrxn.net
源代码下载:
Mrxn分享emlog技巧之---让emlog文章中显示中文星期几的方法 emlog
Mrxn分享emlog技巧之---让emlog文章中显示中文星期几的方法,先上效果图,就像本博客微语公告一样的效果:
先介绍几种将php中星期几以中文方式显示的方法:
<?php function get_chinese_weekday($datetime) { $weekday = date('w', strtotime($datetime)); return '星期' . ['日', '一', '二', '三', '四', '五', '六'][$weekday]; } ?>
以上是PHP>=5.4版本的.
<?php function get_chinese_weekday($datetime) { $weekday = date('w', strtotime($datetime)); $weeklist = array('日', '一', '二', '三', '四', '五', '六'); return '星期' . $weeklist[$weekday]; } ?>
以上是PHP<5.4版本的.
Debain / Ubuntu 若有安裝 php5-intl 的套件, 可以使用 IntlDateFormatter 来写 (PHP 5 >= 5.3.0, PECL intl >= 1.0.0)
下面介绍在emlog中具体实现方法:
以默认模版为例在log_list.php找到:
<?php echo gmdate('Y-n-j', $value['date']); ?>
替换为:
<?php $weekarray=array("日","一","二","三","四","五","六");echo gmdate('Y年n月j日 G:i', $value['date']);echo" 星期".$weekarray[gmdate('w', $value['date'])];?>
如果是内容页请使用下面代码,以默认模版为例在echo_log.php找到
<?php echo gmdate('Y-n-j', $date); ?>
替换为:
<?php $weekarray=array("日","一","二","三","四","五","六");echo gmdate('Y年n月j日 G:i', $date);echo " 星期".$weekarray[gmdate('w',$date)];?>
Mrxn分享本博客的幻灯片样式小计--气死 -_- | emlog
Mrxn分享本博客的幻灯片样式小计--气死 -_- |
喜欢的就按照以下步骤折腾:
代码是借助封装js代码msclass进行修改,需要修改三个文件:module.php,head.php,index.php或者log_list.php。具体代码修改如下:
一、在
module .php
文件底部加入如下代码
<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
//slide数据源
//定义函数,只有一个参数$num,即为调用的数据条数
function get_flash_data_img($num){
//面向对象中静态方法实例化数据库对象(我是这么理解的)
$db = MySql::getInstance();
//下面是数据库语句,即获取gid,title,data,content等内容,非隐藏,时间正序,总共$num条数据,按照时间排序(包括首页置顶和分类置顶)
$sql = "SELECT gid,title,date,content FROM ".DB_PREFIX."blog inner join ".DB_PREFIX."sort WHERE hide='n' AND type='blog' AND top='y' | sortop='y' AND sortid=sid order by date DESC LIMIT 0,$num";
// $sql = "SELECT gid,title,date,content FROM ".DB_PREFIX."blog WHERE hide='n' ORDER BY date
DESC LIMIT 0,$num";
$go = $db->query($sql);
//开始循环进行显示
while($row = $db->fetch_array($go)){
$img_url = '';
//picthumb()函数为获取文章附件图片的函数,后面会补上
//如果附件中含有图片,那么$img_url就等于附件图片的地址
if(picthumb($row['gid'])){
$img_url = picthumb($row['gid']);
//pin_thumb()函数为获取文章中图片链接的函数,后面会补上
//如果附件中不含图片,但是文章中有外链图片,则$img_url等于外链图片的地址
}elseif(pic_thumb($row['content'])){
$img_url = pic_thumb($row['content']);
//如果以上两种情况都没有图片,那么$img_url就等于默认图片
//如下默认图片的路径是模板路径下images文件夹下的default_flash.jpg文件
}else{
$img_url = TEMPLATE_URL.'images/default_flash.jpg';
}
//下面这一句是非常关键的,$data即为我们上面步骤所说的数据
//第二步骤中我们知道格式为“<b><span style="color:#e53333;"><div><img src="图片地址1" stitle="标题名1" slink="链接地址1" /></div></span></b>”
//如下格式必须和上面步骤中提取出来的数据格式一致。如果是不同的幻灯片插件,只需此处的格式不同而已。
$data1 = '<li><img src="'.$img_url.'" stitle="'.$row['title'].'" slink="'.Url::log($row['gid']).'" /></li>';
$data2 = '<li><a href="'.Url::log($row['gid']).'">'.$row['title'].'</a></li>';
//最后打印出数据,由于当前代码的位置是在while的循环体,因此会循环$num条数据
?>
<li><a href="<?php echo Url::log($row['gid']); ?>"><img src="<?php echo $img_url; ?>" alt="<?php echo $row['title']; ?>" width="510" height="280" /></a></li>
<?php } ?>
<?php } ?>
<?php
//slide数据源
//定义函数,只有一个参数$num,即为调用的数据条数
function get_flash_data_art($num){
//面向对象中静态方法实例化数据库对象
$db = MySql::getInstance();
//下面是数据库语句,即获取gid,title,data,content等内容,非隐藏,时间正序,总共$num条数据,按照时间排序(包括首页置顶和分类置顶)
$sql = "SELECT gid,title,date,content FROM ".DB_PREFIX."blog WHERE hide='n' AND type='blog' AND top='y' | sortop='y' AND sortid=sid order by date DESC LIMIT 0,$num";
// $sql = "SELECT gid,title,date,content FROM ".DB_PREFIX."blog WHERE hide='n' ORDER BY date
DESC LIMIT 0,$num";
$go = $db->query($sql);
//开始循环进行显示
while($row = $db->fetch_array($go)){
$img_url = '';
//picthumb()函数为获取文章附件图片的函数,后面会补上
//如果附件中含有图片,那么$img_url就等于附件图片的地址
if(picthumb($row['gid'])){
$img_url = picthumb($row['gid']);
//pin_thumb()函数为获取文章中图片链接的函数,后面会补上
//如果附件中不含图片,但是文章中有外链图片,则$img_url等于外链图片的地址
}elseif(pic_thumb($row['content'])){
$img_url = pic_thumb($row['content']);
//如果以上两种情况都没有图片,那么$img_url就等于默认图片
//如下默认图片的路径是模板路径下images文件夹下的default_flash.jpg文件
}else{
$img_url = TEMPLATE_URL.'images/default_flash.jpg';
}
//下面这一句是非常关键的,$data即为我们上面步骤所说的数据
//第二步骤中我们知道格式为“<b><span style="color:#e53333;"><div><img src="图片地址1" stitle="标题名1" slink="链接地址1" /></div></span></b>”
//如下格式必须和上面步骤中提取出来的数据格式一致。如果是不同的幻灯片插件,只需此处的格式不同而已。
$data1 = '<li><img src="'.$img_url.'" stitle="'.$row['title'].'" slink="'.Url::log($row['gid']).'"></li>';
$data2 = '<li><a href="'.Url::log($row['gid']).'">'.$row['title'].'</a></li>';
//最后打印出数据,由于当前代码的位置是在while的循环体,因此会循环$num条数据
?>
<li class=""><a href="<?php echo Url::log($row['gid']); ?>"><?php echo $row['title']; ?></a></li>
<?php } ?>
<?php } ?>
<?php
//get thumbs(获取附件图片)
function picthumb($blogid) {
$db = MySql::getInstance();
$sql = "SELECT FROM ".DB_PREFIX."attachment WHERE blogid=".$blogid." AND (filepath
LIKE '%jpg' OR filepath
LIKE '%gif' OR filepath
LIKE '%png') ORDER BY aid
ASC LIMIT 0,1";
// die($sql);
$imgs = $db->query($sql);
while($row = $db->fetch_array($imgs)){
$pict.= ''.BLOG_URL.substr($row['filepath'],3,strlen($row['filepath'])).'';
}
return $pict;
}
?>
<?php
//get thumbs(获取图片链接)
function pic_thumb($content){
//preg_match_all全局匹配content中的图片地址,并存入$img变量
preg_match_all("|<img[^>]+src=\"([^>\"]+)\"?[^>]>|is", $content, $img);
//当图片存在时,获取第一张图片,地址保存在$imgsrc中
$imgsrc = !empty($img[1]) ? $img[1][0] : '';
if($imgsrc):
return $imgsrc;
endif;
}
?>
二、在
head.php
引入封装js特效代码:
<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><script type="text/javascript" src="<?php echo TEMPLATE_URL; ?>js/MSClass.js" language="javascript"></scrip
三、在
index.php
或者
log_list.php
添加调用参数:
<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><script type="text/javascript">
function $(id){return document.getElementById(id)};
</script>
<div id="focusPic">
<div id="focusLeft"><ul id="focuscontent"><?php echo get_flash_data_img(10); ?></ul></div>
<div id="focusTitle"><ul id="focusMenu"><?php echo get_flash_data_art(10); ?></ul></div>
<div class="clear"></div>
</div>
<script type="text/javascript">
new Marquee(
{
MSClassID : "focusLeft",
ContentID : "focuscontent",
TabID : "focusMenu",
Direction : 0,
Step : 0.3,
Width : 515,
Height : 280,
Timer : 20,
DelayTime : 3000,
WaitTime : 0,
ScrollStep: 280,
SwitchType: 0,
AutoStart : 1,
})
</script>
最后,附加css样式表,在首页css样式表文件中加入如下样式表代码:
<pre style="overflow:auto" ;class="prettyprint lang-css linenums">#focusPic{width:100%; height:300px; margin:0 auto; clear:both; text-align:center; padding:0px;background-color:#ffffff;}
focusPic ul{margin:0;padding:0;border:0}
#focusPic #focusTitle{width:300px; float:right; font-size:12px; text-align:left;}
#focusPic #focusTitle li{height:28px; line-height:28px; background:url(images/focusTitleBg.gif) left 0 no-repeat; cursor:pointer; font-size:12px; padding-left:20px;overflow:hidden;}
#focusPic #focusMenu li.active{background-position:0 -29px; font-weight:bold;}
#focusPic #focusMenu li.active a{color:#f2f2f2;}
#focusPic #focusLeft{width:515px; height:280px; overflow:hidden; float:left;margin-top: 5px;}
#focusPic #focusLeft #focuscontent li{width:515px;height:280px; overflow:hidden;}</pre>
附件可以在这里下载,或者是自己 Ctrl+U 下载 :
最后感谢 简爱 和 Finally 提供的友情帮助 思密达! -_- ||
关于Emlog输出微语标题的相关教程 emlog
最近几天鼓捣个人自
用的模板,加了一个面包屑,过程中出现了一些小问题,比如使用原来的代码<?php echo Option::get('twnavi');
?>,碎语标题没有显示出来。于是到论坛上准备问一下,刚好有其它 emer
在问这个问题。在该帖的一些回复提示下,自己试验了一下,终于解决了。原来是换成新的代码了,而且就在 t/index.php
文件里面,只是自己不够细心,一直没有注意。
在微语页面,直接输出就可以了(因为在 t/index.php 里面已经读取了相关数据):
<?php echo $Navi_Model->getNaviNameByUrl('t');?>
是但是在非微语页面,要先读取一下数据:
<?php $Nav&i_Model = new Navi_Model();echo $Navi_Model->getNaviNameByUrl('t');?>
现在再进入微语页面,那个久违的标题终于又出来了:
转自舍力博客
Emlog教程 - 添加评论人等级输出 emlog
首先在module.php中添加以下函数
<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
//comment:输出评论人等级
function echo_levels($comment_author_email,$comment_author_url){
$DB = MySql::getInstance();
$adminEmail = '"[email protected]"';
if($comment_author_email==$adminEmail)
{
echo '<sy id="ys">(管理员)</sy>';
}
$sql = "SELECT cid as author_count,mail FROM emlog_comment WHERE mail != '' and mail = $comment_author_email and hide ='n'";
$res = $DB->query($sql);
$author_count = mysql_num_rows($res);
if($author_count>=0 && $author_count<5 && $comment_author_email!=$adminEmail)
echo '<sy id="ya">(打酱油的)</sy>';
else if($author_count>=5 && $author_count<10 && $comment_author_email!=$adminEmail)
echo '<sy id="yb">(匆匆过客)</sy>';
else if($author_count>=10 && $author_count<20 && $comment_author_email!=$adminEmail)
echo '<sy id="yc">(新生入住)</sy>';
else if($author_count>=20 && $author_count<30 && $comment_author_email!=$adminEmail)
echo '<sy id="yd">(常住住户)</sy>';
else if($author_count>=30 &&$author_count<40 && $comment_author_email!=$adminEmail)
echo '活跃住户';
else if($author_count>=40 && $author_coun<50 && $comment_author_email!=$adminEmail)
echo '积极住户';
else if($author_count>=50 && $author_coun<60 && $comment_author_email!=$adminEmail)
echo '五好住户';
else if($author_count>=60 && $author_coun<70 && $comment_author_email!=$adminEmail)
echo '十佳住户';
else if($author_count>=70 && $author_coun<80 && $comment_author_email!=$adminEmail)
echo '住户委员';
else if($author_count>=100 && $comment_author_email!=$adminEmail)
echo '住户代表';
}
?>
以上代码用于判断评论人所填写的e-mail统计次数,达到相应次数后输出不同的等级,所以在评论中只人e-mail不认名称。
其中上面的<sy id="y*">是给输出等级添加相应的css,一般是文字颜色,可直接写在CSS文件中。
调用代码:
<?php $mail_str="\"".strip_tags($comment['mail']).\"";echo_levels($mail_str,"\"".$comment['url']."\""); ?>
在需要调用的地方插入以上代码即可
emlog 控制导航显示条数的方法 emlog
方法其实很简单的,只要在模版文件module.php中找到
readCache('navi');
后面加
$i=0;
然后在
foreach($navi_cache as $value):
后面加
$i++;if($i>=7)break;
其中的7表示显示前7个导航。本教程以默认模板为例。
emlog修默认改导航栏地址 emlog
如果EMLOG使用的是Windows的服务器,点击前台的登录,经常会出现404问题。
因为服务器无法判定admin的路径是文件还是目录,如果访问mrxn.net/admin/,后面加上斜杠,指明是目录,则不会出现404的问题。
进入EMLOG后台,导航,选择登录的导航,修改,会提示默认导航无法修改,出现这种问题,需要修改程序文件。
使用编辑工具(不能使用记事本),打开admin/navbar.php文件后
查找并删除
if ($type != Navi_Model::navitype_custom) { $url = '该导航地址由系统生成,无法修改'; }
此段代码是为了判定,导航是否是默认导航,如果是的话,就不显示导航地址,只显示这段文字。
删除了上面一段代码之后,发现文本框虽然显示了导航地址,但还是不可修改状态,
继续查找并删除
$conf_isdefault = $type != Navi_Model::navitype_custom ? 'disabled="disabled"' : '';
此段代码设定了,如果是默认导航的话,那文本框就不可修改。
以上步骤搞定了以后,虽然文本框可以修改,可以提交,但发现修改后还是不能生效
最后,查找以下代码:
if ($isdefault == 'n') { $navi_data['url'] = $url; }
留下中间一行,修改为:
$navi_data['url'] = $url;
此段代码是在提交的时候判断导航是否为默认导航,如果不是默认导航才修改,去掉修改条件就OK。
这下,把登录的地址,加个“/”改为“admin/”就搞定了~
Emlog gid自动补全断号id的方法 emlog
Emlog文章连接使用gid自增号作为文章的ID,但是由于后台有删除文章的功能,一旦删除文章那么gid自增就会出现断号。
其实断号问题解决很方便,只要在添加文章的时候判断gid之前的有没有断号问题,有的话直接插入,没有的话自增。
我这里的解决方法是这样的,我把gid自增段顺序读取作为值写入数组,自增段是从1开始的,但是数组键值是0开始的,那么先把数组($gidarr[0]='0')赋值掉,然后把$gidarr[]=gid,然后只要发现$gidarr键和键值不等就是断号了。
找到我们的addlog添加文章和页面函数。路径在include/model/log_model.php中的
<pre style="overflow:auto" ;class="prettyprint lang-php linenums"> /**
- 添加文章、页面
- @param array $logData
- @return int
*/
function addlog($logData) {
$kItem = array();
$dItem = array();
foreach ($logData as $key => $data) {
$kItem[] = $key;
$dItem[] = $data;
}
$field = implode(',', $kItem);
$values = "'" . implode("','", $dItem) . "'";
$this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)");
$logid = $this->db->insert_id();
return $logid;
}修改为:
<pre style="overflow:auto" ;class="prettyprint lang-php linenums">function addlog($logData) {
$kItem = array();
$dItem = array();
foreach ($logData as $key => $data) {
$kItem[] = $key;
$dItem[] = $data;
}
$field = implode(',', $kItem);
$values = "'" . implode("','", $dItem) . "'";
$gidarr[0]='0';
$res = $this->db->query("SELECT gid From " . DB_PREFIX . "blog ORDER BY gid ASC");
while ($row = $this->db->fetch_array($res)) {
$gidarr[] = $row['gid'];
}
foreach($gidarr as $key=>$val){
if($key!=$val){
$field = 'gid,'.$field;
$values = "'".$key."',".$values;
break;
}
}
$this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)");
$logid = $this->db->insert_id();
return $logid;
}通过改变是否需要插入语句添加gid和gid值,来自增或者插入。 假如你有多篇文章删除,添加一篇的话,只有从开始的断号,慢慢补全断号。
友情提示,在更改文件时请先做好备份。
关于设置Emlog评论人邮件必填的操作方法 emlog
使用Emlog博客的朋友应该都知道Emlog评论人邮件不是必填的,下面说下修把Emlog评论人邮件改为必填的方法,本方法来源于EM论坛,经测试(测试版本5.3.1)可以正常使用
第一步,找到根目录下include/controller/comment_controller.php这个文件中的
elseif ($mail != '' && !checkMail($mail)) { emMsg('评论失败:邮件地址不符合规范');
替换成
elseif (empty($mail)){ emMsg('评论失败:邮件地址不规范或未填写邮件地址', 'javascript:history.back(-1);');
这个就可以实现Emlog评论人邮件必填,需要的朋友动手试试吧,如有疑问,可在下面留言。