调用指定多个分类文章及后台控制id和数量的方法 emlog

对于SQL命令不是很熟悉,想用EMLOG做一个文章类表调用,需要用到SQL命令代码,调用指定多个分类EMLOG文章列表,研究了好些时间
整明白,求人也不是个事,只好自己继续边看教程边测试,功夫不负有心人,最终给我整明白了,用这个SQL命令可以正确调用指定多个分类的EMLOG文章列
表,分享给有需要的站长们,把以下代码复制到模板的脚本文件中,设置好需要调用的分类ID号,在前台模板里写入调用代码就可以实现你想要的效果了。

    在模板文件module.php中加入如下代码


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php //调用指定多个分类文章,1,2,3,4代表分类id
function sort_logs($log_num) {
$db = MySql::getInstance();
$sql = "SELECT gid,title,date,content,views FROM ".DB_PREFIX."blog WHERE type='blog' and hide='n' and sortid IN (1,2,3,4) ORDER BY date DESC LIMIT 0,$log_num";
$list = $db->query($sql);
while($row = $db->fetch_array($list)){ ?>
<li><a href="<?php echo Url::log($row['gid']);?>"><?php echo $row['title'];?></a></li>
<?php } ?>
<?php } ?>
说明:IN后面括号中的就是要调用的分类ID号,请自行更改你需要调用的分类ID号,中间用英文状态下的逗号隔开,前台模板调用在需要输出地方放入代码<?php sort_logs(10);?>其中10为显示条数


  以上方法每次都需要手动修改模板文件中的分类id和数量,下面跟大家说说后台控制id和数量的方法(ps:必须安装 模板设置 插件,否则无法使用以下方法)
     1、在模板文件module.php中加入如下代码


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php //调用指定多个分类文章 function sort_logs($log_num) {require('sheli.php');
$db = MySql::getInstance();
$sql = "SELECT gid,title,date,content,views FROM ".DB_PREFIX."blog WHERE type='blog' and hide='n' and sortid IN ($sortlog_id) ORDER BY date DESC LIMIT 0,$log_num";
$list = $db->query($sql);
while($row = $db->fetch_array($list)){ ?>
<li><a href="<?php echo Url::log($row['gid']); ?>"><?php echo $row['title']; ?></a><?php echo gmdate('m-d', $row['date']); ?></li>
<?php } ?>
<?php } ?>
2、在模板文件夹中建立一个名为sheli.php的文件,代码如下



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
// @shuyong.net
if(!defined('EMLOG_ROOT')) {exit('error!');}
$sortlog_id = _g('sortlog_id');
?>
3、在模板文件options.php加入如下代码(ps:如没有此文件,请参考最后说明)



<pre style="overflow:auto" ;class="prettyprint lang-php linenums">'sortlog_mun' => array(
'type' =>'text',
'name' =>'调用指定多个分类文章数量',
'description' =>'(选择blog模式就不必理会)',
'default' =>'10',
),

'sortlog_id' => array(
'type' =>'twxt',
'name' =>'调用指定多个分类文章id',
'description' =>'直接写分类id,多个用半角,隔开',
'default' =>'1,2,3,4',
),
   最后在需要显示的地方调用代码<?php sort_logs(_g('sortlog_mun'));?>,如你的模板中没有options.php文件,请自行创建一下,代码如下



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
/@support tpl_options/
!defined('EMLOG_ROOT') && exit('access deined!');
$options = array(
//此处放3中代码
);
本代码在emlog5.3.1上测试正常,其他版本为做测试,如有疑问,请在下面留言给我。



标签: emlog

admin 发布于  2015-8-2 15:18 

如何屏蔽侧边栏最新评论中博主的回复 emlog

博主需要经常和访客互动,博主的回复也作为一条评论在最新评论处显示,这样一来,如果博主如果一次回复好几条评论留言,那么在最新评论的地方显示的都是自己的评论,这样不太好。于是博主想把博主自己的最新评论显示屏蔽掉。

    那么怎么在最新评论那里屏蔽掉博主自己的回复评论呢,其实很简单,就是通过检测邮箱或者用户名,如果是博主的邮箱或者用户名,则不显示在最新评论处即可,方法如下:

    找到根目录“include/lib”目录下的cache.php缓存函数文件,大概在211行左右,找到:


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "comment WHERE hide='n' ORDER BY date DESC LIMIT 0, $index_comnum");
更换为如下代码:



<pre style="overflow:auto" ;class="prettyprint lang-php linenums">$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "comment WHERE hide='n' AND mail!='[email protected]' ORDER BY date DESC LIMIT 0, $index_comnum");
 其中[email protected]是博主自己的邮箱,你换成你的即可。如果你还有更多的小号,中间重复 AND mail!='你的邮箱' 即可。如果修改后无任何变化的话,请到后台数据中更新缓存即可。

    注:以上方法只在emlog5.3.1中测试正常,其他版本为做测试,修改之前请先做好备份,以免造成损失!


标签: emlog

admin 发布于  2015-8-2 15:18 

Emlog隐藏指定分类文章的几个不同表达方式 emlog

第一种方式:隐藏指定分类文章(ps:代码正常显示),以下代码均用默认模板测试,模板文件log_list.php中找到


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
if (!empty($logs)):
foreach($logs as $value):
?>
在此段代码后加入
<div <?php if($value['sortid']==1){echo 'style="display:none"';}?>>
<pre style="overflow:auto" ;class="prettyprint lang-php linenums">在下面代码前加入
</div>
<?php
endforeach;
else:
?>
代码==1中的1为分类id,本代码来源于em论坛hackhp之手,不足之处就是查看源代码时是显示的。


第二种方式:隐藏指定分类文章同时代码也隐藏
在模板文件log_list.php中找到下面代码


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
if (!empty($logs)):
foreach($logs as $value):
?>
替换为



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
if (!empty($logs)):
foreach($logs as $value): if ($value['sortid']==1) continue;
?>

代码==1中的1为分类id,如需实现多个分类隐藏,请使用下面代码



<pre style="overflow:auto" ;class="prettyprint lang-php linenums">if(in_array($value['sortid'],array(1,2,3,4))){continue;}
把其中的分类id更改一下就可以了,本代码在5.3.1版本下测试正常,如果你的log_list.php未分离出首页模板,请勿使用此方法,否则对应分类里的文章也将被隐藏。


以上方法修改以后确实可以屏蔽指定的栏目文章在首页显示,但是首页文章数量会减少,被屏蔽的栏目的文章条目数在首页还是会被记录导致首页总少几篇文章而且和发布的被屏蔽的栏目文章数是对应的。下面介绍修改内核且不会减少数量的方法
具体修改的文件如下(此处以 EMLOG 5.3.1 为例 要屏蔽的文章分类 ID 为 8)
查找 Emlog 根目录include/controller/log_controller.php


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">找到第 1 处 $sqlSegment ='ORDER BY top DESC ,date DESC';
添加and sortid != 8 将其修改为$sqlSegment ='and sortid != 8 ORDER BY top DESC ,date DESC';
如需屏蔽多个分类 继续添加and sortid != *即可

另外附带提一下禁止访问某个分类文章代码,代码来源于em论坛hackhp之手,以下代码放入模板header.php最顶端即可



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php if($sortid==1){exit("禁止访问");}?>
题外话:其实很多的教程em论坛都可以找到了,只要你肯折腾。本站的emlog教程中也总结了一部分,有兴趣的话可以参考一下。


标签: emlog

admin 发布于  2015-8-2 15:17 

指定分类id使用指定的文章模版的方法 emlog

折腾生命在于折腾,越是折腾学得越是多,于是在看论坛的时候,发现了论坛有人建议这个,emlog 指定的分类文章使用指定的文章详情模版 的方法。

    其实2个步骤就可搞定,第一步,在模板文件echo_log.php中写入如下代码(ps:最好先把原echo_log.php重名[如log.php],在把原echo_log.php文件清空后加入如下代码)


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
$id = "1";//指定分类id
if($sortid == $id){
require_once View::getView('log1');//调用文章模板log1.php(此文件必须存在,否则为空白页)
}else if($sort == "$log"){
require_once View::getView('log');//除上面指定的分类id外,其他文章模板调用log.php
}
?>
第二步,创建刚刚在第一步中调用的那个文件即可(ps:必须创建log.ph,log1.php)


如果要实现多个分类调用的不同文章模板的话,把上面第一步中的代码用else分开调用,示例代码


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
if($sortid == "1"){
require_once View::getView('log1');//分类id为1的调用文章模板log1.php(此文件必须存在,否则为空白页)
}else if($sortid == "2"){
require_once View::getView('log2');//分类id为2的调用文章模板log2.php(此文件必须存在,否则为空白页)
}else if($sort == "$log"){
require_once View::getView('log');//除上面指定的分类id外,其他文章模板调用log.php
}
?>
另一个更简单的方法:

在模板文件echo_log.php的顶部 ?>的前面,加入以下代码

if($sortid==1){include View::getView('log_id');exit;}

其中$sortid==1, 是要设以下那个模板文件的分类ID,多个分类使用||,例:$sortid==1 || $sortid==2

getView('log_id')中的log_id就是以上该类要使用的模板文件名,注意模板文件名不要加.php


不同作者也可以使用此方法,只需要把其中的sortid改为author即可。

    本代码在5.3.1版本上测试正常,如发现有问题请在本页留言反馈。

标签: emlog

admin 发布于  2015-8-2 15:17 

Emlog调用某个页面内容的方法分享 emlog

Emlog调用某个页面内容的方法,分2个步骤:

1、在模板module.php中加入如下代码(PS:请把此段代码放入最后,以免出错)


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php //调用页面内容
function html_page($id,$echo){$homez = mysql_fetch_array(mysql_query("SELECT * FROM ".DB_PREFIX."blog WHERE gid ='$id'"));return $homez[$echo];}
?>
2、在需要调用的地方加入<?php echo html_page("2","content"); ?>即可,其中的2为页面id。


标签: emlog

admin 发布于  2015-8-2 15:17 

非插件实现Emlog时间轴归档代码分享 emlog

文件缓存型时间轴归档,后台更新缓存或者发布新文章的时候会自动更新;本站这个代码是使用缓存系统的,是需要修改内核文件的。慎用!

1、修改include/lib/cache.php文件,添加归档缓存函数


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">private $logalias_cache;
之后添加
private $loglists_cache;

添加在其他缓存函数位置添加归档缓存


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"> /** 文章归档列表缓存 /
private function mc_loglists() {
$query = $this->db->query('select gid,title,date from ' . DB_PREFIX . "blog WHERE hide='n' and checked='y' and type='blog' ORDER BY date DESC");
$loglists_cache = array();
while ($row = $this->db->fetch_array($query)) {
$loglists_cache[]= $row;
}
$cacheData = serialize($loglists_cache);
$this->cacheWrite($cacheData, 'loglists');
}
不懂的朋友只请直接下载本文件覆盖include/lib/cache.php(请做好备份)cache.zip

2、此方法因不同的模板修改的有所差异,本站讲述以默认模板为例,首先复制模板目录下的page.php并重新命名为guidang.php(ps:这个自己可自行修改),把其中的<?php echo $log_content; ?>更改为如下代码即可



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><div class="guidang">
<?php
global $CACHE;
$loglists_cache = $CACHE->readCache('loglists');
$year_month = 0;
foreach($loglists_cache as $value):
if($year_month != 0&&$year_month != date("Y-m",$value['date'])){
echo '</ul>';}
if($year_month != date("Y-m",$value['date'])){
$year_month = date("Y-m",$value['date']);
echo '<h2 class="guidang-tt">'.$year_month.'</h3><ul>';}
?>
<li><a href="<?php echo Url::log($value['gid']);?>" target="_blank" title="<?php echo $value['title']; ?>"><span><?php echo date("Y-m-d",$value['date']);?></span><div class="atitle"><?php echo $value['title'];?></div></a></li>
<?php endforeach;?></div>
css文件如下



<pre style="overflow:auto" ;class="prettyprint lang-css linenums">.guidang h2{font-size:150%;}
.guidang li a{padding:8px 0;display:block}
.guidang li a:hover .atitle:after{background:#ff5c43}
.guidang li a span{display: inline-block;width:100px;font-size:12px;text-indent:20px}
.guidang li a .atitle{display: inline-block;padding:0 15px;position:relative;width:550px;white-space:nowrap;text-overflow:ellipsis;}
.guidang li a .atitle:after{position:absolute;left:-2px;background:#ccc;height:8px;width:8px;border-radius:6px;top:8px;content:""}
.guidang li a .atitle:before{position:absolute;left:-4px;background:#fff;height:12px;width:12px;border-radius:6px;top:6px;content:""}
.guidang{margin:10px;position:relative;padding:10px 0}
.guidang:before{height:100%;width:4px;background:#eee;position:absolute;left:100px;content:"";top:0}
.guidang-tt{position:relative;margin:10px 0;cursor:pointer}
.guidang-tt:hover:after{background:#ff5c43}
.guidang-tt:before{position:absolute;left:93px;background:#fff;height:18px;width:18px;border-radius:6px;top:3px;content:""}
.guidang-tt:after{position:absolute;left:96px;background:#ccc;height:12px;width:12px;border-radius:6px;top:6px;content:""}


然后建立一个页面,在页面模板处填写 guidang 即可,演示地址:https://mrxn.net/guidang.html



标签: emlog

admin 发布于  2015-8-2 15:17 

Emlog判断首页与列表页的方法分享 emlog

判断首页函数的方法下(ps:测试5.3.1版本正常使用)

1、在模版文件module.php最低部加入如下代码


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php //判断是否是首页
function blog_tool_ishome(){if (BLOG_URL . trim(Dispatcher::setPath(), '/') == BLOG_URL){ return true; } else { return FALSE;}}?>
2、判断方法示例



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php if (blog_tool_ishome()) :?>加载的文件代码<?php endif; ?>
如果在首页不需要加载日志列表部分。则应用如下:



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php if (blog_tool_ishome()) :?>
<?php include View::getView('index');?>
<?php else:?>
加载日志列表部分
<?php endif;?>


标签: emlog

admin 发布于  2015-8-2 15:17 

实现分类、tag、作者标题像文章标题一样可在后台SEO设置里面控制 emlog

找到根目录文件include/controller/sort_controller.php,将其中的


$site_title = $sortName . ' - ' . $site_title;


替换成


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">switch ($log_title_style) {
case '0':$site_title = $sortName;break;
case '1':$site_title = $sortName . ' - ' . $blogname;break;
case '2':$site_title = $sortName . ' - ' . $site_title;break;
}
这样即可实现分类标题像文章标题一样可在后台 SEO设置里面控制。(PS更改之前请先备份,以免造成不必要的损失)


标签标题实现的方法,找到根目录文件include/controller/tag_controller.php,将其中的

$site_title = stripslashes($tag) . ' - ' . $site_title;

替换成



<pre style="overflow:auto" ;class="prettyprint lang-php linenums">switch ($log_title_style) {
case '0':$site_title = stripslashes($tag); break;
case '1':$site_title = stripslashes($tag) . ' - ' . $blogname;break;
case '2':$site_title = stripslashes($tag) . ' - ' . $site_title;break;
}
作者标题实现的方法,找到根目录文件include/controller/author_controller.php,将其中的

$site_title = $author_name . ' - ' . $site_title;

替换成



<pre style="overflow:auto" ;class="prettyprint lang-php linenums">switch ($log_title_style) {
case '0':$site_title = $author_name; break;
case '1':$site_title = $author_name . ' - ' . $blogname;break;
case '2':$site_title = $author_name . ' - ' . $site_title;break;
}
emlog 5.3.1版本测试无bug,其他版本未做测试。



标签: emlog

admin 发布于  2015-8-2 15:17 

不修改内核实现Emlog分页的上页、下页效果 emlog

本文章总结了很多种不同的关于emlog修改分页样式(分页函数)方法,下面我来给各位整理一下,有需要自行修改emlog分页样式的同学可参考参考。

    不修改内核实现emlog分页的上页、下页效果

1、先在你使用的模板的module.php文件中增加自定义的分页函数,代码如下:


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
//blog:自定义分页函数
function my_page($count, $perlogs, $page, $url, $anchor = '') {
$pnums = @ceil($count / $perlogs);
$re = '';
$urlHome = preg_replace("|[?&/][^./?&=]*page[=/-]|", "", $url);
if($page > 1) {
$i = $page - 1;
$re = ' <a href="'.$url.$i.'">上页</a> ' . $re;
}
if($page < $pnums) {
$i = $page + 1;
$re .= ' <a href="'.$url.$i.'">下页</a> ';
}
return $re;
}
?>
2、在调用分页的地方(一般是log_list.php)文件加入下列代码:



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php $page_loglist = my_page($lognum, $index_lognum, $page, $pageurl); echo $page_loglist; ?>
3、若碎语页面也要调用修改过的分页样式,则在t.php文件中加入下列代码:



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php $page_t = my_page($twnum, Option::get('index_twnum'), $page, BLOG_URL.'t/?page='); echo $page_t; ?>
4、module.php评论列表函数调用时用以下代码替换掉原来的分页函数:



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php $page_comment = my_page($comnum, Option::get('comment_pnum'), $page, BLOG_URL.'guestbook/comment-page-'); echo $page_comment;?>


标签: emlog

admin 发布于  2015-8-2 15:16 

给emlog5.3.1版本验证码添加点击刷新功能的方法 emlog

Emlog默认模板下验证码是没有点击刷新功能的,要刷新验证码的话还是得按F5刷新整个页面重新获得验证码,虽然emlog验证码看得比较清楚,但要通过重新刷新网页来获得新的验证码的方法对于网站负荷和用户体验来讲都并不合适,所以有必要给验证码添加点击刷新功能了。

    若要给emlog验证码添加点击刷新功能,还是很简单的,因为emlog的验证码也是img形式存在的,所以和其它类似的验证码一样,为img标签添加onclick属性就行了。

    Emlog有用到验证码的源代码有如下文件:

Emlog碎语:/t/index.php

Emlog评论:/include/controller/log_controller.php

Emlog管理后台登录:include\lib\loginauth.php


将以上文件的验证码位置的img标签添加以下语句即可实现点击刷新验证码功能:


<pre style="overflow:auto" ;class="prettyprint lang-php linenums">style=\"cursor:pointer;\" alt=\"未显示?请点击刷新\" title=\"看不清楚?请点击刷新\" onclick=\"this.src=this.src+'?'\"
如Emlog评论:/include/controller/log_controller.php, 有以下验证码源码:



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><img src=\"".BLOG_URL."include/lib/checkcode.php\" align=\"absmiddle\" /><input name=\"imgcode\" type=\"text\" class=\"input\" size=\"5\" tabindex=\"5\" />
改成如下代码即可添加上点击刷新验证码功能:



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><img src=\"".BLOG_URL."include/lib/checkcode.php\" align=\"absmiddle\" style=\"cursor:pointer;\" alt=\"未显示?请点击刷新\" title=\"看不清楚?请点击刷新\" onclick=\"this.src=this.src+'?'\" /><input name=\"imgcode\" type=\"text\" class=\"input\" size=\"5\" tabindex=\"5\" />
其它几个页面中添加验证码刷新功能方法类似,此略,注:此方法在em5.3.1正常使用,其他版本未测试。



另一种方法,来源于论坛,简爱发布:前提是当前模板要加载过 jQuery,没有的可以自己添加一下,直接在后台 添加统计代码的位置添加即可 (下面的代码 也在此位置添加,适用于全部正规模板)



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><font size="4" face="黑体">$('img[src="checkcode.php"]') // jQuery 筛选器
.attr('title', '单击刷新验证码') // 添加 title
.click(function(){ // 单击事件
this.src = this.src.replace(/\?.
$/, "") +'?'+ new Date().getTime(); // 重新设置 验证码 图片地址 checkcode.php?r=当前毫秒数
});</font>



admin 发布于  2015-8-2 15:16