typecho按分类搜索文章

typecho教程 2020-08-25

  之前我写的soso搜索增强插件其实已经能够根据分类进行搜索内容了,不过需要模板上进行配合,比如我们搜索分类为下关于的文章,需要传递分类的参数给,让插件获取,比如这个链接,插件会获取到,然后根据它来按分类搜索文章内容。

  那么问题来了,模板搜索表单怎么传递参数

  typecho默认的搜索结构直接加个进行传递,如下:

  

  经过测试并没有用,因为在处理搜索的过程中,的默认只接受传递的内容。

  我的解决方案就是跳过默认的搜索处理函数,然后自己写。

  把上述代码中的改成,跳过typecho默认的搜索处理函数。代码如:

  

  在模板文件里加入

  function themeInit($archive)

  {

  if($archive->request->isPost() && isset($archive->request->ss)){

  so($archive);//判断为post请求,并且有参数ss,启用so函数

  }}

  function so($obj){

  $url=$obj->options->index;

  if (Helper::options()->rewrite==0){$url=Helper::options()->rootUrl.’/index.php/’;}

  if (isset($obj->request->ss)) {

  $filterKeywords = $obj->request->filter(‘search’)->ss;//获取搜索词

  $cat = $obj->request->filter(‘search’)->cat;//获取分类id

  if (NULL != $filterKeywords) {

  $obj->response->redirect(Typecho_Router::url(‘search’,

  array(‘keywords’ => urlencode($filterKeywords)),$url).”?cat=”.$cat);//设置跳转地址

  }

  }

  }

  去https://github.com/jrotty/soso 下载插件并启用插件,测试效果,有效果就可以进行下一步骤了。

  上面的操作完成后,你会发现翻页按钮的链接并不携带参数,也就是说一旦翻页了,这个按分类搜索就失效了。所以我们需要给翻页按钮追加参数,我最初采用的是js追加参数,后来发现可以直接重写分页按钮的链接,所以就采用php修改按钮链接的方式追加参数了。

  在搜索结果的模板文件中增加以下代码即可:

  

  global $can;//定义全局变量,方便下面获取

  $cat=intval($this->request->cat);//获取cat

  if($cat>0){$can=’?cat=’.$cat;}else{$can=””;}

  class Typecho_Widget_Helper_PageNavigator_Classic extends Typecho_Widget_Helper_PageNavigator

  {

  public function prev($prevWord = ‘PREV’)

  {

  //输出上一页

  if ($this->_total > 0 && $this->_currentPage > 1) {

  echo ‘

  . $prevWord . ‘‘;

  }

  }

  public function next($nextWord = ‘NEXT’)

  {

  //输出下一页

  if ($this->_total > 0 && $this->_currentPage _totalPage) {

  echo ‘

  . $nextWord . ‘‘;

  }

  }

  }

  ?>

  上述代码就是在上一页/下一页的翻页按钮后面追加参数,追加好了,就完美了。

  步骤1中的代码只是简单的传递了一个分类id,并不适合实际中使用,可以改为如下:

  

  

  

  

  

  

  

  

  

  

  

  使用能够比较方便的选择分类进行搜索,根据需要里面的内容可以使用循环输出所有分类。

评论 (0)
    Top