OELOVE:婚戀系統的二次開發之模版內執行PHP代碼

OELOVE是一個核心代碼加密了的PHP婚戀交友系統,一站長朋友老早以前就喊我幫他看看一些細小之處未改善好的地方,今天抽出時間幫他看了看。php

本覺得和往常同樣比較簡單就能解決問題,結果由於MVCmodulecontroller都加密了,空有一個view(即模版)實在展現不出PHP的功能。對系統代碼七看八看、而且研究OELOVE的模版標籤文檔,終於能找出一條路子讓模版能調用二次開發的PHP代碼——利用系統的hookhtml

參照已有插件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>

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

相關文章
相關標籤/搜索