OELOVE
是一个核心代码加密了的PHP
婚恋交友系统,一站长朋友老早之前就喊我帮他看看一些细小之处未改善好的地方,今天抽出时间帮他看了看。
本以为和往常一样比较简单就能解决问题,结果因为MVC
的module
和controller
都加密了,空有一个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://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。