关于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

admin 发布于  2015-6-25 10:46 

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

admin 发布于  2015-6-19 09:15 

修复emlog绕过验证码刷评论的bug 代码人生

 最近博客常常被人刷评论,最狠的一次被刷了10000多广告。

    先看看评论验证码是怎么检查的。

    emlog/include/controller/comment_controller.php,先获得$imgcode:

<pre style="overflow:auto" ;class="prettyprint lang-php linenums">$imgcode = isset($_POST['imgcode']) ? addslashes(trim(strtoupper($_POST['imgcode']))) : '';

  检查:


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">} elseif (ISLOGIN == false && Option::get('comment_code') == 'y' && session_start() && $imgcode != $_SESSION['code']) {
emMsg('评论失败:验证码错误');
}


上述代码,几个判断依次是:

  1. 没有登录(非管理员和作者)
  2. 后台开启了评论验证码
  3. 开启session
  4. 将session中的code与$imgcode比较,不相等则验证码错误


    第4步明显有问题。熟悉php验证码流程的同学应该清楚,验证码生成的时候将会设置一个session,这里就是code,再和POST过来的也就是用户输入的做比较。

    然而如果我们并没有访问验证码生成页面,那么也就没生成session。那么$_SESSION['code']就是NULL。

    php中==是弱类型比较,NULL和''(空字符串)比较的结果是TRUE的。

    所以这里,我们的$imgcode如果输入一个空值,并且不去访问生成验证码的页面,那么这个$imgcode != $_SESSION['code']就不成立,就不会提示验证码错误,从而绕过了验证码检查逻辑。

    所以,我这里做测试。

    先正常留言,填写验证码,中途抓包:

    QQ20150614-1@2x.png

    将PHPSESSID修改成随意一个值,目的是让其$_SESSION不存在。再将imgcode修改成空:

    QQ20150614-2@2x.png

    发送数据包,可见没有提示失败(302跳转了),说明评论成功:

    QQ20150614-3@2x.png

    载入一个字典,即可刷评论:

    QQ20150614-4@2x.png

    QQ20150614-5@2x.png


    修复方法是判断session是否为空:


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">empty($_SESSION['code']) || $_SESSION['code'] != $imgcode


  不满足这个条件即提示错误。

    另外的方法是和我博客一样,使用第三方验证码,简洁又方便:极验

还有就是像我博客这样,增加一个打勾的措施也可以在一定程度上防止机器人刷评论.

注:  这只是对开了验证码的有效,没有开验证码想我博客这样的可以不修改.

原文地址:https://www.leavesongs.com/PENETRATION/emlog-comment-captcha-bypass.html


admin 发布于  2015-6-18 14:22 

emlog 控制导航显示条数的方法 emlog

方法其实很简单的,只要在模版文件module.php中找到

readCache('navi');

后面加

$i=0;

然后在

foreach($navi_cache as $value):

后面加

$i++;if($i>=7)break;

其中的7表示显示前7个导航。本教程以默认模板为例。

标签: emlog

admin 发布于  2015-6-12 22:32 

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

admin 发布于  2015-6-10 23:34 

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值,来自增或者插入。 假如你有多篇文章删除,添加一篇的话,只有从开始的断号,慢慢补全断号。
          友情提示,在更改文件时请先做好备份。



admin 发布于  2015-6-8 23:49 

css控制不溢出,不换行,溢出部分省略号显示 PHP

css控制不溢出,不换行,溢出部分省略号显示:white-space:nowrap;text-overflow:ellipsis;overflow:hidden;

ext-overflow 取值:
clip : 默认值。不显示省略标记(...),而是简单的裁切
ellipsis : 当对象内文本溢出时显示省略标记(...)
 
white-space : normal | pre | nowrap 取值:
normal : 默认值。默认处理方式。文本自动处理换行。假如抵达容器边界内容会转到下一行
pre : 换行和其他空白字符都将受到保护。这个值需要IE6+或者 !DOCTYPE 声明为 standards-compliant mode 支持。如果 !DOCTYPE 声明没有指定为 standards-compliant mode ,此属性可以使用,但是不会发生作用。结果等同于 normal 。参阅 pre 对象
nowrap : 强制在同一行内显示所有文本,直到文本结束或者遭遇 br 对象。参阅 noWrap 属性

overflow : visible | auto | hidden | scroll 取值:
visible : 默认值。不剪切内容也不添加滚动条。假如显式声明此默认值,对象将以包含对象的 window 或 frame 的尺寸裁切。并且 clip 属性设置将失效
auto : 在必需时对象内容才会被裁切或显示滚动条
hidden : 不显示超过对象尺寸的内容
scroll : 总是显示滚动条

标签: 编程 代码 css

admin 发布于  2015-6-8 23:41 

关于设置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评论人邮件必填,需要的朋友动手试试吧,如有疑问,可在下面留言。


标签: emlog

admin 发布于  2015-6-8 10:28 

侧边栏最新评论按评论数最多输出文章标题 emlog

侧边栏最新评论按评论数最多输出文章标题,以下按默认板子为例:将模版module.php中的


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?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']);
?>
<li id="comment"><?php echo $value['name']; ?>
<br /><a href="<?php echo $url; ?>"><?php echo $value['content']; ?></a></li>
<?php endforeach; ?>
</ul>
</li>
<?php }?>

替换成



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php //widget:热评文章
function widget_newcomm($title){$index_comnum = Option::get('index_comnum');?>
<li>
<h3><span><?php echo $title;?></span></h3>
<ul id="newcomment">
<?php $db = MySql::getInstance();$db = MySql::getInstance();
$sql = $db->query ("SELECT * FROM ".DB_PREFIX."blog inner join ".DB_PREFIX."sort WHERE hide='n' AND type='blog' AND top='n' AND sortid=sid order by comnum DESC limit 0,$index_comnum");
while($row = $db->fetch_array($sql)){?>
<li id="comment"><a href="<?php echo Url::log($row['gid']);?>" title="<?php echo $row['title'];?>" /><?php echo $row['title'];?></a></li>
<?php }?></ul><?php }?>

这样就搞定收工了!本文转载自舍力


标签: emlog

admin 发布于  2015-6-7 13:58 

EMLOG给友链前面加上Favicon图标 emlog

在网站的友情链接页面,经常可以看到网站的图标增加美感。在以前,大部分采用的是谷歌来获取图标,但谷歌被墙,导致图标无法显示。如果你的博客的友情链接,需要展示友链图标的,也可以用到以下几种方式获取favicon图标:

第一种:采用我博客友链冰翼 的api ,我推荐使用这个,我亲测,速度杠杠的,而且图标还很准确!

新版Favicon接口的调用方式:

< img width = "16" height = "16" src = "http://api.byi.pw/favicon/?url=网址" />

具体的参数和使用方法请移步:http://api.byi.pw/favicon

第二种,采用dnspod,代码如下(ps:把其中的网址改为自己的网址即可):

http://statics.dnspod.cn/proxy_favicon/_/favicon?domain=mrxn.net<br />

第三种,直接上代码

调用方法:http://g.soz.im/http://www.shuyong.net<br /> 更详细的介绍:http://g.soz.im/<br />
如果你的博客是EMLOG的,可以参考下面的方法将你的博客友链加上favicon图标

以第二中方法为例,首页在网站的模板根目录找到module.php(默认板子为例),将其中的


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">< img width = "16" height = "16" src = "http://api.byi.pw/favicon/?url=网址" />


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><li><a href="<?php echo $value['url']; ?>" title="<?php echo $value['des']; ?>" target="_blank"><?php echo $value['link']; ?></a></li>

替换为



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><li><img src="http://g.soz.im/&lt;?php echo $value['url']; ?>/cdn.ico?defaulticon=lightpng" width="16" height="16" /><a href="<?php echo $value['url']; ?>" title="<?php echo $value['des']; ?>" target="_blank"><?php echo $value['link']; ?></a></li>

即可


博客现在使用的代码



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><li><img src="<?php echo $value['url']; ?>/favicon.ico" onerror="vascript:this.src='<?php echo TEMPLATE_URL; ?>images/demo.ico';" width="16" height="16" /><a href="http://www.shuyong.net/go/?url=&lt;?php echo $value['url']; ?>" title="<?php echo $value['des']; ?>" target="_blank"><?php echo $value['link']; ?></a></li>


博闻广记使用下面代码


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
//友情链接
function index_link(){
global $CACHE;
$link_cache = $CACHE->readCache('link');
if (!blog_tool_ishome()) return;
?>
<div id="link_bk">
<b>友情链接:</b><?php foreach($link_cache as $value): ?>
<?php
$urlinfo = parse_url($value['url']);
$urlHost = explode(".",$urlinfo['host']);
$urlHost = array_reverse($urlHost);
?>
<img class="linkimg" src="<?=$urlinfo['scheme']?>://www.<?=$urlHost[1]?>.<?=$urlHost[0]?>/favicon.ico" onerror="javascript:this.src='<?php echo TEMPLATE_URL; ?>images/favicon.ico';"><a href="<?php echo $value['url']; ?>" title="<?php echo $value['des']; ?>" target="_blank"><?php echo $value['link']; ?></a>&nbsp;&nbsp;&nbsp;
<?php endforeach; ?></div>
<?php }?>




标签: emlog

admin 发布于  2015-6-7 13:58