情况描述:
1、前台列表页使用了 phpcms 自带的标签获取数据 {pc:content action="lists" catid="$catid" where="$where" num="15" order="id DESC" page="$page"}
2、前台列表页,页面顶部有一些快速搜索按钮,点击后就可以实现快速搜索功能。
3、但是,当点击快速搜索按钮后,如果我们点击下一页,会发现搜索参数丢失(如:价格、区域等参数),需要重新搜索。
两种方案,两种的区别是,一个简便,一个复杂。好直白的区别啊,哈哈。。。
方案一(简便)
修改 phpcms/libs/functions/global.func.php 文件
找到 function pageurl($urlrule, $page, $array = array()) 方法
在 $url = str_replace($findme, $replaceme, $urlrule); 这个代码上边加上:if(!empty($_GET['quyu'])){
$urlrule.='&quyu='.$_GET['quyu'];
}
if(!empty($_GET['jiage'])){
$urlrule.='&jiage='.$_GET['jiage'];
}
方案二:
观察代码:
phpcms/modules/content/index.php 文件的list 方法中有以下代码
//URL规则
$urlrules = getcache('urlrules','commons');
$urlrules = str_replace('|', '~',$urlrules[$category_ruleid]);
$tmp_urls = explode('~',$urlrules);
$tmp_urls = isset($tmp_urls[1]) ? $tmp_urls[1] : $tmp_urls[0];
preg_match_all('/{$([a-z0-9_]+)}/i',$tmp_urls,$_urls);
if(!empty($_urls[1])) {
foreach($_urls[1] as $_v) {
$GLOBALS['URL_ARRAY'][$_v] = $_GET[$_v];
}
}
/***请仔细看下面几行代码**/
define('URLRULE', $urlrules);
$GLOBALS['URL_ARRAY']['categorydir'] = $categorydir;
$GLOBALS['URL_ARRAY']['catdir'] = $catdir;
$GLOBALS['URL_ARRAY']['catid'] = $catid;
phpcms/libs/functions/global.func.php文件中的 pages() 方法中,前几行有如下代码:
if(defined('URLRULE') && $urlrule == '') {
$urlrule = URLRULE;
$array = $GLOBALS['URL_ARRAY'];//请仔细看这行代码
} elseif($urlrule == '') {
$urlrule = url_par('page={$page}');
}
一、修改phpcms/modules/content/index.php 文件
通过仔细观察后,可以发现,我们可以将 index.php 文件的 lists() 方法中的 $GLOBALS['URL_ARRAY'] 动态添加几个值,例如
//添加 jiage 参数
$GLOBALS['URL_ARRAY']['jiage'] = $jiage;//添加jiage参数
$urlrules .="&jiage={$jiage}";//在url规则中,添加jiage参数
//同时添加 quyu 参数
$GLOBALS['URL_ARRAY']['quyu'] = $quyu;
$urlrules .="&quyu={$quyu}";
二、修改 phpcms/libs/functions/global.func.php 文件
找到 pageurl 函数:
//先将传入的 url 规则进行保留,原因是下面几行代码,经过输出后,发现 url 规则会发生变化,因为我们之前对 index.php 文件的原始 url 规则进行了改造
$old_urlrule = $urlrule;
if(strpos($urlrule, '~')) {
$urlrules = explode('~', $urlrule);
$urlrule = $page < 2 ? $urlrules[0] : $urlrules[1];
}
/**下面几行,是对url链接进行重新合并**/
$new_rule = '';
if(strpos($old_urlrule,'quyu')){//echo $old_urlrule.'
';
$new_rule .= '&quyu={$quyu}';
}
if(strpos($old_urlrule,'jiage')){
$new_rule .= '&jiage={$jiage}';
}
$urlrule .= $new_rule;
至此,完成了所有的改动,这时候,重新刷新列表页面,当点击了某个搜索功能后,鼠标放在分页的数字上,会发现链接上已经存在新的参数了。
由于这是我的原创文章,未经本人许可,请勿转载,谢谢合作。