讀者墻,是博客程序,比如zblogPHP這樣的模板需要用到的功能,讀者墻顧名思義就是來到網站的訪客,但細說起來是評論過文章的訪客,因為只有評論了才有記錄存在,才能獲取訪客的名字、頭像、評論數字等信息!
下面分享的是@鳥兒博客分享的讀者墻代碼:
在include.php里加入:
function 模板ID_Theme_Get_Readers(){ global $zbp; $b = mktime(0,0,0,date('m')-1,date('d'),date('Y')); $e = mktime(0,0,0,date('m'),date('d')+1,date('Y')); $i=20; $sql = $zbp->db->sql->Select( $zbp->table['Comment'], array('COUNT(comm_ID) AS cnt, comm_Name, comm_HomePage , comm_Email'), array( array('<>', 'comm_Name', '訪客'), array('=', 'comm_AuthorID', 0), array('BETWEEN', 'comm_PostTime', $b, $e), array('CUSTOM', '1=1 GROUP BY comm_HomePage') ), array('comm_PostTime' => 'DESC'), $i, null ); $array=$zbp->db->Query($sql); $s ="\r\n"; foreach ($array as $comment) { $s .= '<li><a title="" target="_blank" data-original-title="[' . $comment['comm_Name'] . '] 近期點評' . $comment['cnt'] . '次"><img width="36" height="36" class="avatar avatar-36 photo" src=" http://www.gravatar.com/avatar/' .md5(strtolower($comment['comm_Email'])).'&r=X&s=36" alt=""></a></li>'; $s .="\r\n"; } $s .="\r\n"; return $s; }
此時,可以直接調用,而調用代碼為:{模板ID_Theme_Get_Readers()},但這樣調用每次都要獲取數據,對于優化和速度以及訪問量大的博客來說就很有壓力了,所以最好緩存一個文件比較靠譜!
比如在上方代碼中倒數第二行之前加入:
@file_put_contents($zbp->usersdir . 'theme/NBlue/include/duzheqiang.php', $str);
最終上方大段代碼為:
function 模板ID_Theme_Get_Readers(){ global $zbp; $b = mktime(0,0,0,date('m')-1,date('d'),date('Y')); $e = mktime(0,0,0,date('m'),date('d')+1,date('Y')); $i=20; $sql = $zbp->db->sql->Select( $zbp->table['Comment'], array('COUNT(comm_ID) AS cnt, comm_Name, comm_HomePage , comm_Email'), array( array('<>', 'comm_Name', '訪客'), array('=', 'comm_AuthorID', 0), array('BETWEEN', 'comm_PostTime', $b, $e), array('CUSTOM', '1=1 GROUP BY comm_HomePage') ), array('comm_PostTime' => 'DESC'), $i, null ); $array=$zbp->db->Query($sql); $s ="\r\n"; foreach ($array as $comment) { $s .= '<li><a title="" target="_blank" data-original-title="[' . $comment['comm_Name'] . '] 近期點評' . $comment['cnt'] . '次"><img width="36" height="36" class="avatar avatar-36 photo" src="" alt=""></a></li>'; $s .="\r\n"; } $s .="\r\n"; @file_put_contents($zbp->usersdir . 'theme/NBlue/include/duzheqiang.php', $str); return $s; }
此時就會生成一個duzheqiang.php文件,這時候直接調取這個文件即可:
調取方式:
{module:duzheqiang}
OK! 此時在本站內的讀者墻調用就沒有問題了!
那么問題來了,如果是站外調用zblogPHP的讀者墻信息呢?
外部php程序,可以使用:
PHP
echo file_get_contents('http://www.domain.com/zb_users/theme/NBlue/include/abcdef.php');//也就是產生文件的實際路徑
進行調用。
外部靜態頁面,可以通過js引用以下文件進行動態js調用。
PHP
<?php require '../../../zb_system/function/c_system_base.php'; require '../../../zb_system/function/c_system_admin.php'; $zbp->Load(); if (!$zbp->CheckPlugin('Nobird_CMS_2')) {$zbp->ShowError(48);die();} //Nobird_CMS_2 是主題ID $name = GetVars('name','GET'); $file=$zbp->host . 'zb_users/theme/Nobird_CMS_2/include/'.$name.'.php'; $strcontent=GetHttpContent($file); echo 'document.write(\''.$strcontent.'\');'; ?>
以上內容存為html2js.php,存放在主題文件夾下,然后在靜態頁面使用:
Markup
<script charset="utf-8" type="text/javascript" src="http://127.0.0.1/zb_users/theme/Nobird_CMS_2/html2js.php?name=Nobird_CMS_2_rdtags"></script>
進行調用(此處假設生成的文件名為Nobird_CMS_2_rdtags.php)。