Emlog程序网页源码有空白的解决办法分享 emlog

Emlog程序如果发现网页源码有很多空白,可能是以下原因造成的

1、安装的插件,解决办法,禁用所有插件在查看源代码看是否有空白;

2、请检查模板文件module.php,删除其中的空行即可,请使用代码工具(notepad++,Macromedia Dreamweaver 8等)编辑删除;



以上只是原因,还有一个终级解决办法,就是在模板文件header.php里面<?php 后面加上 ob_clean();即可。本方法来源于em论坛蓝叶

如果上述方法不行,请尝试将模板里的 header.php 的 ob_clean(); 代码放在这个位置:

<?php 
/*
Template Name:xx主题
Description:xxx
Version:1.0
Author:mrxn
Author Url:http://www.mrxn.net
Sidebar Amount:1
*/
if(!defined('EMLOG_ROOT')) {exit('error!');}
require_once View::getView('module');
ob_clean();
?>

简单介绍下有关 ob_clean(); 

1、这三个函数运用在PHP4和PHP5中。在一些PHP项目中,经常能看到这三个函数的使用。



有的输出,前面本来要显示在页面里的东西全都被清除了,不显示了。



第二个函数:ob_start();



告诉php从这里开始要记录输出的内容了,并且所有输出放到连续的内存块里。



第三个函数:ob_get_contents();



这个应该比较容易懂,就是取出从ob_start()函数开始的地方到这个函数之间所有输出的内容,如:$a = ob_get_contents();

$a就是前面所有输出的字符串连接在一起。



ob_start(); ob_clear(); ob_get_contents();这三个函数通常配合来使用,不管你前面输出什么内容,最后从ob_start之后输出的内容都能控制到一个变量里。

标签: emlog

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

如何增加文章内容(日志)分页功能的方法分享 emlog

Emlog的5.3.1新版仍然没有文章分页功能,而刚好我的文章都比较长,用户阅读起来体验可能不太好,自己动手,丰衣足食,我这里把增加分页的方法分享出来,给有需要的朋友参考。

    第一步、在模版文件module.php最后一段加入代码:


<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
//内容页分页
function log_fy($aid,$aP,$aCount) {
$log_fy .= '<div id="log_fy">';
for ($p=0;$p<$aCount;$p++) {
if ($p == 0 && $aP == 0) $log_fy .= '<span title="当前第1页">1</span>';
else if ($p == 0) $log_fy .= '<a href="'.BLOG_URL.'?post='.$aid.'" title="转到第1页">1</a>';
else if ($p == $aP) $log_fy .= '<span title="当前第'.($p+1).'页">'.($p+1).'</span>';
else $log_fy .= '<a href="'.BLOG_URL.'?post='.$aid.'&p='.$p.'" title="转到第'.($p+1).'页">'.($p+1).'</a>';
}
$log_fy .= '</div>';
return $log_fy;}
?>
 
第二步、然后把echo_log.php中的<?php echo $log_content; ?>替换如下代码:



<pre style="overflow:auto" ;class="prettyprint lang-php linenums"><?php
$p = $_GET["p"];
$aArr = split('-|-',stripslashes($log_content));
$aCount = count($aArr);
if ($aCount>1){
if ($p>0){echo $aArr[$p].log_fy($logid,$p,$aCount);
}else{echo $aArr[0].log_fy($logid,0,$aCount);}
}else{echo $log_content;}
?>
使用方法很简单,后台编辑文章的时候,在需要分页的地方插入 -|- 即可;不足之处就是,分页文章标题都一样



标签: emlog

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

调用指定多个分类文章及后台控制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