国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > CMS > PhpCMS > 正文

PHPCMS實現多重篩選實現程序

2024-09-10 07:16:22
字體:
來源:轉載
供稿:網友

多重篩選其實對于php程序員開發者來講是非常的簡單了,下面來介紹在PHPCMS實現多重篩選實現例子,有需要了解的朋友一起來看看吧.

在我們使用PHPCMS開發一些產品展示類網站的時候,由于分類的多樣化,我們需要客戶在簡短的時間內尋找到自己需要的產品,這樣我們就會用到分類的多重篩選,也就是類似京東,淘寶等這么電商網站里面的產品篩選的功能,PHPCMS本身并沒有這樣的功能,需要我們進行二次開發,當然網上也出現了很多這樣的功能,但不知道為什么,按照上面的步驟能實現的時候并不多,在經過一系列的查找和自己測試之后,我自己總結了以下的方法,希望后來者看到之后可以省去很多不必要的麻煩,我會盡可能的詳細寫出是怎么實現的,實現的效果在這里就不貼圖片了,淘寶,京東上比我做的還好。

首先,要實現這個功能,在建立字段的時候字段的類型必須選擇box類型,在是否作為篩選字段的項目里勾選“是”,是否作為搜索條件勾選“是”。

這建立好字段之后,剩下的就是怎么實現這個功能了。咱們需要在PHPCMS的自定義函數庫這個文件里編寫相應的分類篩選函數,代碼如下:

  1. /** 
  2.  * 通過指定keyid形式顯示所有聯動菜單 
  3.  * @param  $keyid 菜單主id 
  4.  * @param  $linkageid  聯動菜單id,0調用頂級 
  5.  * @param  $modelid 模型id 
  6.  * @param  $fieldname  字段名稱 
  7.  */ 
  8. function show_linkage($keyid$linkageid = 0, $modelid = ''$fieldname='zone') { 
  9.     $datas = $infos = $array = array(); 
  10.     $keyid = intval($keyid); 
  11.     $linkageid = intval($linkageid); 
  12.     //當前菜單id 
  13.     $field_value = intval($_GET[$fieldname]); 
  14.     $urlrule = structure_filters_url($fieldname,$array,1,$modelid); 
  15.     if($keyid == 0) return false; 
  16.     $datas = getcache($keyid,'linkage'); 
  17.     $infos = $datas['data']; 
  18.     foreach($infos as $k=>$v){ 
  19.         if($v['parentid']==$field_value){ 
  20.             $array[$k]['name'] = $v['name']; 
  21.             $array[$k]['value'] = $k
  22.             $array[$k]['url'] = str_replace('{$'.$fieldname.'}',$k,$urlrule); 
  23.             $array[$k]['menu'] = $field_value == $k ? '<a class="click" style="color:#fff;">'.$v['name'].'</a>' : '<a href='.$array[$k]['url'].'>'.$v['name'].'</a>' ; 
  24.         } 
  25.     } 
  26.     return $array
  27.  function structure_filters_url($fieldname,$array=array(),$type = 1,$modelid) { 
  28.     if(emptyempty($array)) { 
  29.         $array = $_GET
  30.     } else { 
  31.         $array = array_merge($_GET,$array); 
  32.     } 
  33.     //TODO 
  34.     $fields = getcache('model_field_'.$modelid,'model'); 
  35.     if(is_array($fields) && !emptyempty($fields)) { 
  36.         ksort($fields); 
  37.         foreach ($fields as $_v=>$_k) { 
  38.             if($_k['filtertype'] || $_k['rangetype']) { 
  39.                 if(strpos(URLRULE,'.html') === FALSE) $urlpars .= '&'.$_v.'={$'.$_v.'}'
  40.                 else $urlpars .= '-{$'.$_v.'}'
  41.             } 
  42.         } 
  43.     } 
  44.     //后期增加偽靜態等其他url規則管理,apache偽靜態支持9個參數 
  45.     if(strpos(URLRULE,'.html') === FALSE) $urlrule =APP_PATH.'index.php?m=content&c=index&a=lists&catid={$catid}'.$urlpars.'&page={$page}' ; 
  46.     else $urlrule =APP_PATH.'list-{$catid}'.$urlpars.'-{$page}.html#wrap'
  47.     //根據get傳值構造URL 
  48.     if (is_array($array)) foreach ($array as $_k=>$_v) { 
  49.         if($_k=='page'$_v=1; 
  50.         if($type == 1) if($_k==$fieldnamecontinue
  51.         $_findme[] = '/{\$'.$_k.'}/'
  52.         $_replaceme[] = $_v
  53.     } 
  54.      //type 模式的時候,構造排除該字段名稱的正則 
  55.     if($type==1) $filter = '(?!'.$fieldname.'.)'
  56.     $_findme[] = '/{\$'.$filter.'([a-z0-9_]+)}/'
  57.     $_replaceme[] = '0';         
  58.     $urlrule = preg_replace($_findme$_replaceme$urlrule);    
  59.     return  $urlrule
  60. /** 
  61.  * 生成分類信息中的篩選菜單 
  62.  * @param $field   字段名稱 
  63.  * @param $modelid  模型ID 
  64.  */ 
  65. function filters($field,$modelid,$diyarr = array()) { 
  66.     $fields = getcache('model_field_'.$modelid,'model'); 
  67.     $options = emptyempty($diyarr) ?  explode("\n",$fields[$field]['options']) : $diyarr
  68.     $field_value = intval($_GET[$field]); 
  69.     foreach($options as $_k) { 
  70.         $v = explode("|",$_k); 
  71.         $k = trim($v[1]); 
  72.         $option[$k]['name'] = $v[0]; 
  73.         $option[$k]['value'] = $k
  74.         $option[$k]['url'] = structure_filters_url($field,array($field=>$k),2,$modelid); 
  75.         $option[$k]['menu'] = $field_value == $k ? '<a class="click" style="color:#fff;">'.$v[0].'</a>' : '<a href='.$option[$k]['url'].'>'.$v[0].'</a>' ; //這個地方的a標簽的class可以改成符合你自己網站的樣式, 
  76.     }  //開源軟件:Vevb.com 
  77.     $all['name'] = '全部';//'全部'; 
  78.     $all['url'] = structure_filters_url($field,array($field=>'0'),2,$modelid); 
  79.     $all['menu'] = $field_value == '' ? '<a class="click" style="color:#fff;">'.$all['name'].'</a>' : '<a href='.$all['url'].'>'.$all['name'].'</a>'
  80.     array_push($option,$all);    
  81.     return $option

把上面的這段代碼復制到:extention.func.php這個文件里,在前臺調用的時候需要一點點的改動,調用代碼如下:

  1. {php $sql = structure_filters_sql($modelid);} 
  2. {pc:content action="lists" where="$sql" catid="$catid" modelid="$modelid" num="12" page="$page"

再調用的時候一定不要忽略了catid和modelid,二者缺其一無法調用。產品分類怎么調用呢?相信大家也看到了,在剛剛添加的函數里面有一個fliters函數,我們使用這個函數來調用已添加的box類型的字段,讀取出我們需要進行篩選的分類。代碼如下:

  1. {loop filters('fengge',$modelid$r//filters('需要調用的字段','字段所在的模型ID') 
  2. <li>{$r[menu]}</li> 
  3. {/loop} 

好了,在進行了如上幾個步驟之后,你就會發現前臺的分類篩選功能已經可以使用了,這時你是否是發現URL太長太不美觀?沒關系,假如你的空間支持偽靜態的話,就可以把網站的URL調的簡單美觀。PHPCMS安裝包里自帶了一個.htaccess文件,直接復制到根目錄里就好了。如果是IIS服務器的話,需要httpd.ini文件,轉化一下就可以了,現在的IIS7有一個導入規則的功能,可以直接把.htaccess文件轉化成web.config文件,這樣就實現了偽靜態。

一定要注意,把你自己添加的box篩選字段也加入到偽靜態的規則里,否則是出現一些不必要的錯誤。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永新县| 宜昌市| 慈利县| 龙游县| 永寿县| 万山特区| 香格里拉县| 垣曲县| 莱芜市| 甘谷县| 洪洞县| 牡丹江市| 香港| 陵水| 通道| 蓬溪县| 濮阳市| 东辽县| 阿鲁科尔沁旗| 佛山市| 本溪市| 阜阳市| 买车| 扎兰屯市| 宁远县| 洪雅县| 全州县| 沽源县| 额尔古纳市| 临沂市| 青浦区| 东阳市| 河池市| 芦山县| 昌图县| 红安县| 淮安市| 马关县| 满城县| 高淳县| 连云港市|