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显示热门日志的功能!

 

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

 

使用Windows Live Writer发布文章

emlog博客的发布日志页面感觉不大好用,

功能栏不够,

尝试了一下windows live write,

装好后使用

用户密码连接网站

测试了下

觉得还不错。。

这是使用WLW发布的第一篇文章。。

然后又扩充了插件

代码插件和库表情插件

点击查看测试代码块的效果

 

呵呵,还不错,代码颜色区别出来,函数还能链接到网站手册查看

就是网页的源码量复杂了,

个人还是喜欢简单点的网页代码。。

 这是哭表情插件表情。。聊胜于无啊。。

功能就比较一般了。。

PHP开发WAP游戏的一些注意事项

:WAP游戏是没有客服端的,仅仅是通过网页页面上的链接,输入框,等等进行游戏,实际上,所有的逻辑运行都是在服务器端。举个简单的例子说:比如在地图上移动这一动作,首先地图的所有数据都是保存在服务器上的,无论是数组还是DB,而要表示当前玩家所在的位置在哪,也仅仅是把地名,本地的描述信息图片,及NPC等有关信息生成一个页面发送给客户端,就这么简单。而玩家要从本地移动到其它地点,也仅仅需要点击一个用POST或GET传递地点ID的链接便可完成,在程序方面,当前程序能够接收到一个合法的地点ID时,便将本ID更新到玩家的记录中去,并生成对应本地的信息生成页面输出即可。


从三方面介绍一些做WAP游戏所需要注意的:安全效率,延展。


安全


用户输入:这是最基本的,也是最可能被忽视的一点。‘1+(-10000)’,这是什么?这就是‘黑客’最常用的一种方法,它出现在当你的程序需要用户输入一个数字时,比如,玩家可以把自己钱送给其他玩家,逻辑很简单,看看自己有没有这么钱(if($my_money>$give_money)()),有的话,给自己扣钱,并给其他玩家加钱。完成。但你试试下面这段程序:

[php]<?php
$a="1+(-111111)";
$b=2;
if($b>$a)
{echo "xx";}
?>[/php]

结果如何?你很吃惊嘛?就这样,你的程序有BUG了,还没完,你再试下下面这条SQL:

"update user_money set money=money-".$a." WHERE user_id=155"

结果又如何,你给两个人都加了钱,谁都不亏,你的游戏和你亏了。这样下去,你的游戏货币越来越不值钱,游戏也变得不受欢迎。
怎么解决?过滤!用适当的方法过滤,让他的输入,是一个真实安全数字,是你真正你需要的。
似的问题还有,用户在发言时输入了一个<,结果是你在输入这条发言时,就会有相当一部分显示不了这个页面,你的游戏也受到了怀疑。
数字:过滤数字,你首先想到的是什么方法函数?intval?嗯,对于“1+(-10000)”这样的输入,这个没有问题函数返回值" title="返回值" >返回值是1,这个数字安全的。注意!这个数字安全的并不代表就都安全了,你再试试下面这个

[php]<?php
echo intval(2200000000);
?>[/php]

看到了嘛,又吓一跳吧,这都是血的教训啊。因为2200000000这个数已经超过了INT的取值范围(强行转化)。相似的问题还有,在MYSQL5中(目前我不知道能不能设置),如果把字段设成UNSIGNED,那么0-1=42XXXXXXXX。
这里提供两种解决办法:
1,用abs换掉intval,经初步测试,abs这个函数是可信的,它不会对数字造成什么不良影响。
2,使用高精度函数及相关,如:
bcadd()bccomp()ctype_digi()/*注意,这些函数参数一定得是字符串" title="字符串" >字符串型!*/

微观操作:同样用送钱的这个例子,你过滤了用户输入,用bccomp比较了用户要送的和他所有的,成功,可以送钱了。别忙,还有一个你可能不太相信但又确实存在的问题。有一句古话:我们不可能两次跨过同一条河。它说的是时间是变化的,所以事物也是变化的。你有没有想如,如果在你验证过了他是不是有这么钱可送到你用UPDATE句" title="句" >句为他改钱的这一瞬间,另一个人把他的钱取走了?不可能吧?可能,非常可能。一切都可能发生。所以在PHP程序验证之后,还会在UPDATE句" title="句" >句之中,再做一次验证,即在WHERE句" title="句" >句中加一句 AND MONEY>$a,这样的一个条件,基本不会对SQL执行效率产生什么影响,还能保证安全性,加上是很有意义的而句" title="句" >句是否执行成功,才是能否给对方加钱的真正条件。相关的还有一点要说明,在做这样操作时,一定要把对玩家有损失的操作放在前面执行,似给他加钱这样的能让他HAPPY的操作放在后面,因为在没有引入事务数据库" title="数据库" >数据库处理机制之前,程序中止也是可能且可怕的。对于可能出现人抢同一资源问题,也应该有很好的先后判断,这点不细说了,但同样重要。

日志:这个东西很重要,要知道,如果程序出了问题,找到是哪里出的问题问题影响了少人的数据,如何恢复,就全靠它了。日志一般分两种,一种是游戏中需要用户的,比如救济品每人只能领一次,就是通过它来控制(其实是不应该算是程序日志范畴,只提一下)。另一种就是真正的日志,比如谁在什么时候给了谁少钱他输入的是什么数字,操作前送出方有少钱,操作后又有少。如果有了这样的日志记录,我想对钱这重要数据流向,就很清晰了。在程序没有正常的运行很长时间,经过时间的考验之前,这日志数据是相当必要的。
总得来说,游戏产品和其他型产品相比,对精确性的要求更高,所以程序每一步执行都要求是精确且在出错时是可恢复的。另外记住:用户,是绝不能相信的!!!


效率


这点我觉得不用说什么,作为一个程序开发人员,程序的执行效率是我们的本职工作之一。
个人认为,一个程序的执行效率,很大程度取决于程序的设计(针对某一问题提出想法,并用最合理、高效、低成本的方式解决和实现它,这是我对设计的理解。)所以在进行系统的开发之前,一定要先把遇到或可能遇到的问题分析清楚,想明白解决方案,并准备好备用的或是在出现问题时的应急方案。(这也是我们头对我们的要求:)具体说基本就是对数据结构和程序逻辑的分析,可能的话,写出一份策划案或是重点问题清单,在实际开发时,只要敲键盘就好了。这样做也能很好的提高程序开发效率。而在程序执行效率上,我不说了,前人有很很好的例子,说明我们可以学到,我也就不显丑了(没这个自信)。举一个例子吧,我个人最早是看到DZ论坛数据结构上这么用的:统计一个论坛下面有少个主题,可以在本论坛记录里增加一个用于统计的字段比如stat_threadnum,每次有人发贴删贴时更新这个字段,这样虽然有了一定冗余,但就不用每次都COUNT去了,这是个好办法。


延展


其实这个问题,就已经不完全是一个程序开发人员的工作能力上的问题,而是所谓‘职业操守’的问题了。除了不能相信用户,还有一人是不能相信的:策划。(这并没有褒贬之意)为什么?因为作为一个策划,他的职责就是求变。所以他们总会想出新的东西来,这也就意味着,你的程序产品,要不断进行修改,再修改,这是必然的。所以把程序写‘活’,也是你必须学会的。(我个人认为,面向对象,其实就是为了解决这一问题。)举一个例子,见过一段这样的程序,它的作用是用玩家的几种道具在一定条件下换取另一种道具。程序的实现方式是用SWITCH。结果是,当每次要添加新的兑换方法(比如加入用两个梨换一个苹果),那就要不断添加新CASE句" title="句" >句。使得这一功能足足用了好几百行来实现。虽然可能换一个数组来写,可能(只是可能)效率上不如SWITCH,但延展性就要好得文件也小)。所以能够预测到策划下一步可能会怎么做也算是一个好的开发人员的能力之一。(在下一次改动之时,让自己更轻松一些不也是件好事嘛?)
关于注释文档游戏程序逻辑,相对要更复杂一些,所以,足够且清楚的注释,是当其他同事接手你的工作时,你给它最好的礼物:)当然,如果你能把程序写的清楚些,命名得更准确些,程序本身就是很好的注释。而文档,作为注释扩展,更是必要东西。我把它们也算作在程序的延展性之中了。
后记:写完之后,觉得没写出什么东西,还是太浅薄,回头想起什么再补充吧。
那啥一下:感谢朱SIR的培养,他的思维逻辑真清楚,且从不放弃一点小的细节,这是很有帮助的。感谢NESTA的帮助,且为我们的应用产品提供了坚实的系统后盾。感谢NATHAN不留余力的帮助,我跟他学到了很

 

转自:phpchina