一宇博客致力创造一个高质量网络资源教程的综合分享平台
广告位 后台主题配置管理

网站首页 Typecho 教程 正文

typecho按分类搜索文章

一宇A1xt 2021-01-16 教程 97 ℃ 0 评论百度已收录

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

那么问题来了,模板搜索表单怎么传递cat参数
typecho默认的搜索结构直接加个input进行传递,如下:

<form method="post" action="<?php $this->options->siteUrl(); ?>" role="search">
<input type="hidden" name="cat"  value="2620">
<input type="text" name="s" placeholder="Search...">
<button type="submit">Search</button>
</form>

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

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

1,跳过默认搜索处理

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

<form method="post" action="<?php $this->options->siteUrl(); ?>" role="search">
<input type="hidden" name="cat"  value="2620">
<input type="text" name="ss" placeholder="Search...">
<button type="submit">Search</button>
</form>

2,自己写搜索处理函数

functions.php模板文件里加入

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);//设置跳转地址
            }
        }
}

3,启动soso插件

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

4,重写翻页按钮地址

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

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

<?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 '<a class="prev" href="' . str_replace($this->_pageHolder, $this->_currentPage - 1, $this->_pageTemplate) . $this->_anchor . $GLOBALS['can'] . '">'
            . $prevWord . '</a>';
        }
    }
    public function next($nextWord = 'NEXT')
    {
        //输出下一页
        if ($this->_total > 0 && $this->_currentPage < $this->_totalPage) {
            echo '<a class="next" title="" href="' . str_replace($this->_pageHolder, $this->_currentPage + 1, $this->_pageTemplate) . $this->_anchor . $GLOBALS['can'] . '">'
            . $nextWord . '</a>';
        }
    }
}
?>

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

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

<form method="post" action="<?php $this->options->siteUrl(); ?>" role="search">
<select name="cat">
<option value="0" selected>全部</option>
<option value="2619">Typecho全部</option>
<option value="2620">Typecho主题</option>
<option value="2621">Typecho插件</option>
<option value="2626">Typecho教程</option>
<option value="2618">博客文章</option>
</select>
<input type="text" name="ss" placeholder="Search...">
<button type="submit">Search</button>
</form>

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

Tags:分类搜索文章

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
  • 特大暴雪预报已经出现,南方是否会雪灾?两省或有极端化趋势
  • 男童扔鞭炮炸飞5个井盖,母亲受伤送医
  • 打工人返乡过年破防瞬间:孩子夜幕中打着手电筒狂奔迎接
  • 什么是盲盒交友,日入十万是真的吗?
  • Win11怎样强制开启毛玻璃横向排列
  • H5漂流瓶交友源码 社交漂流瓶H5源码 附安装教程
  • 2021美国奇幻冒险《超能敢死队》HD1080P.中英双字
  • 关于goto在线解密源码问题
  • 全新防黑运营版在线客服系统源码 自助注册客服系统/im即时通讯聊天/多商户机器人
  • 学法减分小程序2021最新可用可运营源码附带安装教程
  • 标签列表
  • hide (50)
  • 微信 (8)
  • 模板 (21)
  • 代码 (36)
  • typecho (131)
  • 样式 (11)
  • 页面 (24)
  • 图片 (25)
  • wordpress (10)
  • 文章 (36)
  • 目录 (12)
  • 后台 (12)
  • 浏览器 (9)
  • 链接 (10)
  • 分类 (12)
  • 归档 (14)
  • pjax (11)
  • 设置 (10)
  • 支持 (9)
  • 缩略图 (9)
  • 特性 (10)
  • 主题 (32)
  • 全站 (7)
  • 评论 (11)
  • typecho插件 (21)
  • 最新留言
    站点信息
    • 文章总数:933
    • 页面总数:11
    • 分类总数:28
    • 标签总数:927
    • 评论总数:182
    • 浏览总数:102473
    请先 登录 再评论,若不是会员请先 注册