emlog完美增加热门日志功能

晚上比较闲,就想来对博客emlog3.4.0 进行热门日志功能的开发。

废话不说,看我的做法。

 

1. 首先就后台博客管理模块下的 Widgets 功能页面添加一个类似已有的随机日志或最新日志的热门日志选择。

方法:在/admin/views/default/widgets.php页面的大概136行添加如下代码


<form action="widgets.php?action=setwg&wg=hot_log" method="post">
    <div class="widget-line" id="hot_log">
        <div class="widget-top">
            <li class="widget-title">热门日志</li>
            <li class="widget-act-add"></li>
            <li class="widget-act-del"></li>
        </div>
        <div class="widget-control">
            <li>标题</li>
            <li><input type="text" name="title" value="<?php echo $customWgTitle['hot_log']; ?>"  /></li>
            <li>首页显示热门日志数</li>
            <li><input maxlength="5" size="10" value="<?php echo $index_hotlognum; ?>" name="index_hotlognum" /> <input type="submit" name="" value="更改" class="submit" /></li>
        </div>
    </div>
    </form>

这样子即在后台管理的widgets设置中有了热门日志的设置功能,当然,这只是空壳。接下来


2.使第一步界面中的设置能生效。

方法:在/admin/widgets.php大概104行添加如下代码


case 'hot_log':
            $index_hotlognum = isset($_POST['index_hotlognum']) ? intval($_POST['index_hotlognum']) : 20;
            $DB->query("update ".DB_PREFIX."options set option_value='$index_hotlognum' where option_name='index_hotlognum'");
            break;

另外还需在数据库中的options表里添加一条记录:index_hotlognum  5    ,初始数字可以先随便设之后后台可再设置。然后再 Widgets管理添加热门日志块到右侧(即设置前台可显示)。


3.如此下来后台设置功能已结束!剩下步骤是使前台可显示,且继续看贱··

方法:在/model/class.blog.php里添加如下函数


    /**
     * 获取指定数统计热门日志
     *
     * @param int $num
     * @return array
     */
    function getHotLog($num)
    {
        $sql = "SELECT gid,title,views FROM ".DB_PREFIX."blog WHERE hide='n' and type='blog' ORDER BY views desc LIMIT 0, $num";
        $res = $this->db->query($sql);
        $logs = array();
        while($row = $this->db->fetch_array($res))
        {
            $row['gid'] = intval($row['gid']);
            $row['title'] = htmlspecialchars($row['title']);
            $row['views'] = intval($row['views']);
            $logs[] = $row;
        }
        return $logs;
    }
 

接着在/content/templates/当前主题/module.php 文件里添加一方法


<?php
//widget:随机日志
function widget_hot_log($title){
    global $index_hotlognum, $emBlog;
    if (!isset($emBlog))
    {
        global $DB;
        require_once(EMLOG_ROOT.'/model/class.blog.php');
        $emBlog = new emBlog($DB);
    }
    $randLogs = $emBlog->getHotLog($index_hotlognum);?>
    <li>
    <h3><?php echo $title; ?></h3>
    <ul id="randlog">
    <?php foreach($randLogs as $value): ?>
    <li><a href="<?php echo BLOG_URL; ?>?post=<?php echo $value['gid']; ?>"><?php echo $value['title']; ?></a><?php echo $value['views']; ?></li>
    <?php endforeach; ?>
    </ul>
    </li>
<?php }?>
 

 

如此下来便可实现emlog显示热门日志的功能!

 

如果你有更好的方法欢迎留言一起沟通哦~~ ^_^

 

我要天天享有这25件奢侈品

1 能背着包包走天下的健康

2 舒心的工作

3 起风的天总有人提醒你加衣

4 睡着的时候总有妈妈或老公为你盖被

5 穿上便宜T恤也很PP的健康身材

6 写得一手好字

7 想旅行时,总有谈得来的朋友愿意请假陪伴

8 每天都能踏实地睡个好觉

9 会欣赏美丽的心和能欣赏美丽的心情

10 每时每刻都过得有意义和幸福

11 一个教会你爱和被爱的男人

12 你为之甘心付出的宝宝

13 心中永远的自由

14 带给他人向上的精神特质

15 学会放弃

16 学会承受

17 接受并珍惜生活赐予你的一切

18 亲自播种,收获

19 珍藏一件凝聚情感的物品

20 寻找失落的童心

21 心境开阔

22 信守一个诺言

23 尝尽美食

24 偶尔使个小小坏

25 把你所能想到的一件浪漫的事变为现实

php函数 - 单位时间内字符串加密解密

此函数可在指定时间内,加密还原字符串,超时无法还原。

用途如:单点登录的token加密传输,临时密码等等

 

 

<?php

/**

 * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE

 * @param string $key 密钥

 * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效

 * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文

 *

 * @example

 *

 * $a = authcode('abc', 'ENCODE', 'key');

 * $b = authcode($a, 'DECODE', 'key'); // $b(abc)

 *

 * $a = authcode('abc', 'ENCODE', 'key', 3600);

 * $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空

*/

 

function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600) {

 

$ckey_length = 4;

// 随机密钥长度 取值 0-32;

// 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。

// 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方

// 当此值为 0 时,则不产生随机密钥

 

$key = md5($key ? $key : EABAX::getAppInf('KEY'));

$keya = md5(substr($key, 0, 16));

$keyb = md5(substr($key, 16, 16));

$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

 

$cryptkey = $keya.md5($keya.$keyc);

$key_length = strlen($cryptkey);

 

$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;

$string_length = strlen($string);

 

$result = '';

$box = range(0, 255);

 

$rndkey = array();

for($i = 0; $i <= 255; $i++) {

$rndkey[$i] = ord($cryptkey[$i % $key_length]);

}

 

for($j = $i = 0; $i < 256; $i++) {

$j = ($j + $box[$i] + $rndkey[$i]) % 256;

$tmp = $box[$i];

$box[$i] = $box[$j];

$box[$j] = $tmp;

}

 

for($a = $j = $i = 0; $i < $string_length; $i++) {

$a = ($a + 1) % 256;

$j = ($j + $box[$a]) % 256;

$tmp = $box[$a];

$box[$a] = $box[$j];

$box[$j] = $tmp;

$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));

}

 

if($operation == 'DECODE') {

if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {

return substr($result, 26);

} else {

return '';

}

} else {

return $keyc.str_replace('=', '', base64_encode($result));

}

 

}

 

?>