OELOVE是一个核心代码加密了的PHP婚恋交友系统,一站长朋友老早之前就喊我帮他看看一些细小之处未改善好的地方,今天抽出时间帮他看了看。

本以为和往常一样比较简单就能解决问题,结果因为MVCmodulecontroller都加密了,空有一个view(即模版)实在展示不出PHP的功能。对系统代码七看八看、并且研究OELOVE的模版标签文档,终于能找出一条路子让模版能调用二次开发的PHP代码——利用系统的hook

参照已有插件runtime(系统运行时间)的写法,复制开发了一份插件,见下图和后续代码,仅提供此开发思路。

请输入图片描述

插件代码:

<?php
/*
Plugin Name: 用户信息里输出地区spreadname
Version: v1.0
Plugin URL:
Description: 用户信息里输出地区spreadname
For Version: OElove v3.x所有版本
Author: DCC
Author URL: http://www.thinkful.cn/
Last Update: 2014-01-26 15:00:17
*/
if(!defined('IN_OESOFT')) {
    exit('Access Denied');
}
?>
<?php

function getSpreadnameById() {
    $uid = (int)$_GET['uid']+0;
    $con = mysql_connect(DB_HOST, DB_USER, DB_PASS);
    if( $con ){
        $sql_prefix = "select spreadname from ".DB_PREFIX."area a left join ".DB_PREFIX."user_profile u";
        mysql_query("use database ".DB_NAME);
        $sql = $sql_prefix." on a.areaid=u.cityid where u.userid=$uid limit 1";
        $res = mysql_query($sql);
        // 如果没有cityid,则调用provinceid @ 2014-01-26 15:51:27
        if( mysql_result($res, 0)=='' ){
            $sql = $sql_prefix." on a.areaid=u.provinceid where u.userid=$uid limit 1";
            $res = mysql_query($sql);
        }
        echo mysql_result($res, 0);
    }
}

XHook::addAction('dv_area_spreadname', 'getSpreadnameById');
?>

模版页调用方法:

<!--{XHook::doAction('dv_area_spreadname')}-->

IO测试:

<!-- *******以下是模版内调用******* -->
<li>
    <em>所在地区:</em><!--{area type='text' value=$home.provinceid}-->
    <a href="/<!--{XHook::doAction('dv_area_spreadname')}-->/" target="_blank">
        <!--{area type='text' value=$home.cityid}-->
    </a>
</li>

<!-- *******以下是实际输出结果******* -->
<li>
    <em>所在地区:</em>广东
    <a href="/guangzhou/" target="_blank">
        广州
    </a>
</li>

原文地址:http://www.thinkful.cn/archives/399.html


大超超
496 声望17 粉丝