开启左侧

OELOVE:模版内传参+XHook+PHP开发SEO伪静态插件

[复制链接]
发表于 2015-2-26 01:27:04 | 显示全部楼层 |阅读模式
在昨天的开发基础上,阅读了OELOVE的官方宣传介绍文档后,开发出了能够传递参数并实现绝大部分PHP功能的OE插件:友浩OE伪静态助手
开发思路:主要运用了系统预留的XHook钩子类,由于OE源代码加密无从得之其具体实现方法。
安装方法:将源代码保存为dv_rewrite.php,在/source/plugin/下建立dv_rewrite文件夹,将dv_rewrite.php复制到新建立的文件夹下,然后在后台插件和应用里找到插件列表,启用友浩OE伪静态助手即可。
调用方法:在模版相应输出位置调用XHook::doAction并传入参数,分别是插件内添加的识别名和传入的参数(多参数传递尚未尝试),将分页动态链接替换为静态链接的示例调用方法如下。
  1. <!--{if !empty($showpage)}-->
  2. <div class="ft result-y">
  3.     <div class="pagenum">
  4.         <!--{XHook::doAction('dv_rewrite_page', $showpage)}-->
  5.     </div>
  6. </div>
复制代码

插件源代码:

  1. <?php
  2. /*
  3. Plugin Name: 友浩OE伪静态助手
  4. Version: v1.3
  5. Plugin URL: http://www.uchao.com/
  6. Description: 针对疑难伪静态,提供地区id转拼音、分页链接替换、分页标题SEO等优化功能。
  7. For Version: OElove v3.x所有版本
  8. Author: DCC
  9. Author URL: http://www.uchao.com/
  10. Last Update: 2014-01-27 16:32:55
  11. */
  12. if(!defined('IN_OESOFT')) {
  13.     exit('Access Denied');
  14. }
  15.            
  16. // 返回城市id对应的拼音
  17. function dv_rewrite_getSpreadnameById($arr) {
  18.     $provinceid = $arr['provinceid'];
  19.     $cityid     = $arr['cityid'];
  20.                
  21.     $sql = "select spreadname from ".DB_PREFIX."area where areaid=$cityid";
  22.     $res = mysql_query($sql);
  23.     // 如果没有cityid,则调用provinceid @ 2014-01-26 15:51:27
  24.     if( mysql_result($res, 0)=='' ){
  25.         $sql = "select spreadname from ".DB_PREFIX."area where areaid=$provinceid";
  26.         $res = mysql_query($sql);
  27.     }
  28.     return mysql_result($res, 0);
  29. }
  30.            
  31. // 替换列表页分页href内容,生成伪静态链接
  32. function dv_rewrite_replacePagination($p, $rw_type='-init') {
  33.     if( $rw_type==='-init' ){
  34.         // 用户列表替换
  35.         $rw_type = $_GET['s_marry']==1 ? 'yk' : 'by';
  36.         // 微播列表替换
  37.         if( $_GET['c']=='weibo' ) $rw_type = 'weibo';
  38.         // 招聘、日记(共用模版)列表替换
  39.         if( $_GET['c']=='diary' ){
  40.             $rw_type = $_GET['cid']==1 ? 'zp' : 'rj';
  41.         }
  42.                   
  43.     }
  44.     $pattern = '/href="(.*?)index.php(.*?)page=(\d+)"/';
  45.     $rewrite_res = 'href="${1}'.$rw_type.'/page-$3/"';
  46.     echo preg_replace($pattern, $rewrite_res, $p);
  47. }
  48.            
  49. // 详细信息页地区静态链接函数
  50. function dv_rewrite_spread($arr){
  51.     echo dv_rewrite_getSpreadnameById($arr);
  52. }
  53.            
  54. // 地区模版列表替换静态链接
  55. function dv_rewrite_locationPagination($p){
  56.     $arr = array(
  57.         'provinceid' => $_GET['s_dist1']+0,
  58.         'cityid'     => $_GET['s_dist2']+0
  59.     );
  60.     // 生成list-type,共用替换函数
  61.     $rw_type = dv_rewrite_getSpreadnameById($arr);
  62.     dv_rewrite_replacePagination($p, $rw_type);
  63.                
  64. }
  65.            
  66. // 向文本后添加第几页(如果有)
  67. function dv_rewrite_fixTitle($s){
  68.     if( $_GET['page'] ){
  69.         $page = '第'.$_GET['page'].'页';
  70.         // 是标题
  71.         if( strpos($s, '-') ){
  72.             $tmparr = explode('-', $s);
  73.             $end = end($tmparr);
  74.             $tmparr[count($tmparr)-1] = $page.'-'.$end;
  75.             $s = join('-', $tmparr);
  76.         }
  77.         // 是关键词和描述
  78.         else{
  79.             $s = $s.','.$page;
  80.         }
  81.     }
  82.     echo $s;
  83. }
  84.            
  85. // 根据地区id生成附近地区链接 @ 2014-01-27 15:52:13
  86. function dv_rewrite_generateAreaLinks($provinceid){
  87.     $sql = "select areaname,spreadname from ".DB_PREFIX."area where rootid=$provinceid";
  88.     $res = mysql_query($sql);
  89.     while( $r=mysql_fetch_array($res, MYSQL_ASSOC) ){
  90.         extract($r);
  91.         $s .= '<a href="'.PATH_URL.$spreadname.'/">'.$areaname.'*</a>';
  92.     }
  93.     echo $s;
  94. }
  95.            
  96. // 添加绑定事件
  97. // 列表页(用户、日记、招聘共用)替换静态链接
  98. XHook::addAction('dv_rewrite_page', 'dv_rewrite_replacePagination');
  99. // 详细信息页地区静态链接
  100. XHook::addAction('dv_rewrite_spreadname', 'dv_rewrite_spread');
  101. // 地区模版列表替换静态链接
  102. XHook::addAction('dv_rewrite_morepage', 'dv_rewrite_locationPagination');
  103. // 分页时便于SEO需要修改标题、关键词和描述
  104. XHook::addAction('dv_rewrite_pageSEO', 'dv_rewrite_fixTitle');
  105. // 生成附近地区链接
  106. XHook::addAction('dv_rewrite_arealinks', 'dv_rewrite_generateAreaLinks');
  107. ?>
复制代码


开发这个插件的同时在做一个WEB项目,时间相对较紧迫,难免有些疏忽和不高效之处,欢迎指正。

项目为大,插件为小,开发插件权当练手,一点一点积累基础才能出大成绩,加油。
平度网:www.pingdu.co 平度论坛:bbs.pingdu.co
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

 
QQ在线咨询
售前咨询热线
0532-88371356
售后服务微信
pingduwangzhan
快速回复 返回顶部 返回列表