09
2025
05
15:46:36

php根据id查找条件怎么写_zblogphp指定分类搜索并支持分页

常见于DZ论坛,但是zblog也可以实现的,以下内容仅做备忘。


主题include.php里面引入文件“search_config.php”:


require dirname(__FILE__) . DIRECTORY_SEPARATOR . 'plugin


arch_config.php';并且挂载接口:Add_Filter_Plugin('Filter_Plugin_Search_Begin','主题ID_SearchMain');


search_config.php文件代码:


global $zbp;


foreach ($GLOBALS['Filter_Plugin_ViewSearch_Begin'] as $fpname => &$fpsignal) {


$fpreturn = $fpname();


if ($fpsignal == PLUGIN_EXITSIGNAL_RETURN) {


$fpsignal=PLUGIN_EXITSIGNAL_NONE;


return $fpreturn;


}


}


if(!$zbp->CheckRights($GLOBALS['action'])){


Redirect('./');


}


$q = trim(htmlspecialchars(GetVars('q','GET')));


$qc = '' . $q . '';


$articles = array();


$category = new Metas;


$author = new Metas;


$tag = new Metas;


$zbp->title = '有关【'.$q.'】的内容:';


$template = $zbp->option['ZC_INDEX_DEFAULT_TEMPLATE'];


if($zbp->template->hasTemplate('search')){


$template = 'search';//搜索列表页模版名称


}


$w=array();


$w[]=array('=','log_Type','0');


$cid = trim(htmlspecialchars(GetVars('cid','GET')));//传入的分类ID


if($cid){


$w[]=array('search','log_CateID',$cid);


}


if($q){


$w[]=array('search','log_Content','log_Intro','log_Title',$q);


}else{


Redirect('./');


}


if(!($zbp->CheckRights('ArticleAll')&&$zbp->CheckRights('PageAll'))){


$w[]=array('=','log_Status',0);


}


if($cid){


$pagebar=new Pagebar('{%host%}search.php?{q='.$q.'}&cid='.$cid.'&{page=%page%}',false);


} else {


$pagebar=new Pagebar('{%host%}search.php?{q='.$q.'}&{page=%page%}',false);


}


$pagebar->PageCount=$zbp->displaycount;


$pagebar->PageNow=(int)GetVars('page','GET')==0?1:(int)GetVars('page','GET');


$pagebar->PageBarCount=$zbp->pagebarcount;


$articles = $zbp->GetArticleList(


'*',


$w,


array('log_PostTime' => 'DESC'), array(($pagebar->PageNow - 1) * $pagebar->PageCount, $pagebar->PageCount),


array('pagebar' => $pagebar),


null


);


if ($articles){


foreach($articles as $article){


$intro = preg_replace('/[\r\n\s]+/', '', trim(主题ID_SubStrStartUTF8(TransferHTML($article->Content,'[nohtml]'),$q,150)) . '...');


$article->Intro = str_ireplace($q,$qc,$intro);


$article->Title = str_ireplace($q,$qc,$article->Title);


}


$zbp->template->SetTags('主题IDSearchSubtitle','');


}else{


$zbp->title = '没有找到有关【'.$q.'】的内容!';


$zbp->template->SetTags('主题IDSearchSubtitle','');


$pagebar='';


foreach($articles as $article){


$article->Intro = preg_replace('/[\r\n\s]+/', '', trim(SubStrUTF8(TransferHTML($article->Intro,'[nohtml]'),150)).'...');


}


}


$zbp->header .= '' . "\r\n";


$zbp->template->SetTags('title', $zbp->title);


$zbp->template->SetTags('articles',$articles);


$zbp->template->SetTags('page',1);


$zbp->template->SetTags('pagebar',$pagebar);


if ($zbp->template->hasTemplate('search')) {


$zbp->template->SetTemplate($template);


} else {


$zbp->template->SetTemplate('index');


}


foreach ($GLOBALS['Filter_Plugin_ViewList_Template'] as $fpname => &$fpsignal) {


$fpreturn=$fpname($zbp->template);


}


$zbp->template->Display();


RunTime();


die();}?>


此文件中引入的文件searchstr.php代码如下:


*  获取UTF8格式的字符串的子串


* @param string $sourcestr 源字符串


* @param int $startstr 开始字串子串


* @param int $cutlength 子串长度


* @return string


*/function 主题ID_SubStrStartUTF8($sourcestr,$startstr,$cutlength) {


global $zbp;


if( function_exists('mb_substr') && function_exists('mb_internal_encoding') && function_exists('mb_stripos') ){


mb_internal_encoding('UTF-8');


return mb_substr($sourcestr, mb_stripos($sourcestr, $startstr), $cutlength);


}


if( function_exists('iconv_substr') && function_exists('iconv_set_encoding') && function_exists('iconv_strpos') ){


iconv_set_encoding ( "internal_encoding" ,  "UTF-8" );


iconv_set_encoding ( "output_encoding" ,  "UTF-8" );


return iconv_substr($sourcestr, iconv_strpos($sourcestr, $startstr), $cutlength);


}


$returnstr = '';


$i = stripos($sourcestr, $startstr);


$n = 0;


$str_length = strlen($sourcestr); //字符串的字节数


while (($n 


$temp_str = substr($sourcestr, $i, 1);


$ascnum = Ord($temp_str); //得到字符串中第$i位字符的ascii码


if ($ascnum >= 224) //如果ASCII位高与224,


{


$returnstr = $returnstr . substr($sourcestr, $i, 3); //根据UTF-8编码规范,将3个连续的字符计为单个字符


$i = $i + 3; //实际Byte计为3


$n++; //字串长度计1


} elseif ($ascnum >= 192) //如果ASCII位高与192,


{


$returnstr = $returnstr . substr($sourcestr, $i, 2); //根据UTF-8编码规范,将2个连续的字符计为单个字符


$i = $i + 2; //实际Byte计为2


$n++; //字串长度计1


} elseif ($ascnum >= 65 && $ascnum <= 90) //如果是大写字母,


{


$returnstr = $returnstr . substr($sourcestr, $i, 1);


$i = $i + 1; //实际的Byte数仍计1个


$n++; //但考虑整体美观,大写字母计成一个高位字符


} else //其他情况下,包括小写字母和半角标点符号,


{


$returnstr = $returnstr . substr($sourcestr, $i, 1);


$i = $i + 1; //实际的Byte数计1个


$n = $n + 0.5; //小写字母和半角标点等与半个高位字符宽...


}


}


if ($str_length > $cutlength) {


$returnstr = $returnstr;


}


return $returnstr;}


模板中需要改写一下:


{php}


$cid ='';


echo 主题ID_Cate($cid);


{/php}    <


lect>


其中主题ID_Cate函数是调用所有分类,如需调用部分分类,可另外设置:


function 主题ID_Cate($zdycate){


global $zbp;


$Catenews=$zbp->GetCategoryList(array('*'),null);


$s = '';


foreach ($Catenews as $Catenew) {


if($zdycate==$Catenew->ID){


$s .='ID.'" selected="selected" >'.$Catenew->Name.'';


} else {


$s .='ID.'">'.$Catenew->Name.'';


}


}


if($zdycate==""){


$s .='所有分类';


} else {


$s .='所有分类';


}


return $s;}




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/11223.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: