OElove 3.X版本的城市化列表优化。

由于这个程序是PHP程序加密过,而模板中不能运行PHP程序,所以,想要二次程序,是比较困难的,但前面有一个哥们提供了一个3.X版的优化思路。

在昨天的开发基础上,阅读了OELOVE的官方宣传介绍文档后,开发出了能够传递参数并实现绝大部分PHP功能的OE插件:大超超OE伪静态助手。

开发思路:主要运用了系统预留的XHook钩子类,由于OE源代码加密无从得之其具体实现方法。

安装方法:

将源代码保存为dv_rewrite.php,在/source/plugin/下建立dv_rewrite文件夹,将dv_rewrite.php复制到新建立的文件夹下,然后在后台插件和应用里找到插件列表,启用大超超OE伪静态助手即可。

调用方法:

在模版相应输出位置调用XHook::doAction并传入参数,分别是插件内添加的识别名和传入的参数(多参数传递尚未尝试),将分页动态链接替换为静态链接的示例调用方法如下。
 

调用:

<!--{if !empty($showpage)}-->
<div class="ft result-y">
    <div class="pagenum">
        <!--{XHook::doAction('dv_rewrite_page', $showpage)}-->
    </div>
</div>

插件代码:

<?php

if(!defined('IN_OESOFT')) {
    exit('Access Denied');
}

// 返回城市id对应的拼音
function dv_rewrite_getSpreadnameById($arr) {
    $provinceid = $arr['provinceid'];
    $cityid     = $arr['cityid'];

    $sql = "select spreadname from ".DB_PREFIX."area where areaid=$cityid";
    $res = mysql_query($sql);
    // 如果没有cityid,则调用provinceid @ 2014-01-26 15:51:27
    if( mysql_result($res, 0)=='' ){
        $sql = "select spreadname from ".DB_PREFIX."area where areaid=$provinceid";
        $res = mysql_query($sql);
    }
    return mysql_result($res, 0);
}

// 替换列表页分页href内容,生成伪静态链接
function dv_rewrite_replacePagination($p, $rw_type='-init') {
    if( $rw_type==='-init' ){
        // 用户列表替换
        $rw_type = $_GET['s_marry']==1 ? 'yk' : 'by';
        // 微播列表替换
        if( $_GET['c']=='weibo' ) $rw_type = 'weibo';
        // 招聘、日记(共用模版)列表替换
        if( $_GET['c']=='diary' ){
            $rw_type = $_GET['cid']==1 ? 'zp' : 'rj';
        }

    }
    $pattern = '/href="(.*?)index.php(.*?)page=(\d+)"/';
    $rewrite_res = 'href="${1}'.$rw_type.'/page-$3/"';
    echo preg_replace($pattern, $rewrite_res, $p);
}

// 详细信息页地区静态链接函数
function dv_rewrite_spread($arr){
    echo dv_rewrite_getSpreadnameById($arr);
}

// 地区模版列表替换静态链接
function dv_rewrite_locationPagination($p){
    $arr = array(
        'provinceid' => $_GET['s_dist1']+0,
        'cityid'     => $_GET['s_dist2']+0
    );
    // 生成list-type,共用替换函数
    $rw_type = dv_rewrite_getSpreadnameById($arr);
    dv_rewrite_replacePagination($p, $rw_type);

}

// 向文本后添加第几页(如果有)
function dv_rewrite_fixTitle($s){
    if( $_GET['page'] ){
        $page = '第'.$_GET['page'].'页';
        // 是标题
        if( strpos($s, '-') ){
            $tmparr = explode('-', $s);
            $end = end($tmparr);
            $tmparr[count($tmparr)-1] = $page.'-'.$end;
            $s = join('-', $tmparr);
        }
        // 是关键词和描述
        else{
            $s = $s.','.$page;
        }
    }
    echo $s;
}

// 根据地区id生成附近地区链接 @ 2014-01-27 15:52:13
function dv_rewrite_generateAreaLinks($provinceid){
    $sql = "select areaname,spreadname from ".DB_PREFIX."area where rootid=$provinceid";
    $res = mysql_query($sql);
    while( $r=mysql_fetch_array($res, MYSQL_ASSOC) ){
        extract($r);
        $s .= '<a href="'.PATH_URL.$spreadname.'/">'.$areaname.'*</a>';
    }
    echo $s;
}

// 添加绑定事件
// 列表页(用户、日记、招聘共用)替换静态链接
XHook::addAction('dv_rewrite_page', 'dv_rewrite_replacePagination');
// 详细信息页地区静态链接
XHook::addAction('dv_rewrite_spreadname', 'dv_rewrite_spread');
// 地区模版列表替换静态链接
XHook::addAction('dv_rewrite_morepage', 'dv_rewrite_locationPagination');
// 分页时便于SEO需要修改标题、关键词和描述
XHook::addAction('dv_rewrite_pageSEO', 'dv_rewrite_fixTitle');
// 生成附近地区链接
XHook::addAction('dv_rewrite_arealinks', 'dv_rewrite_generateAreaLinks');
?>

直接在source\plugin,新建一个dv_rewrite目录,再把以上代码拷进去,命名成 dv_rewrite.php,再登录进后台,启用插件即可。

但以上这个不适用6.0以及以后的版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值