OELOVE
是一個核心代碼加密了的PHP
婚戀交友系統,一站長朋友老早以前就喊我幫他看看一些細小之處未改善好的地方,今天抽出時間幫他看了看。php
本覺得和往常同樣比較簡單就能解決問題,結果由於MVC
的module
和controller
都加密了,空有一個view
(即模版)實在展現不出PHP
的功能。對系統代碼七看八看、而且研究OELOVE
的模版標籤文檔,終於能找出一條路子讓模版能調用二次開發的PHP
代碼——利用系統的hook
。html
參照已有插件runtime
(系統運行時間)的寫法,複製開發了一份插件,見下圖和後續代碼,僅提供此開發思路。mysql
插件代碼:sql
<?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'); ?>
模版頁調用方法:segmentfault
<!--{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>