前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >typecho按分类搜索文章

typecho按分类搜索文章

作者头像
泽泽社长
发布于 2023-04-17 07:43:37
发布于 2023-04-17 07:43:37
78500
代码可运行
举报
文章被收录于专栏:泽泽社泽泽社
运行总次数:0
代码可运行

typecho根据分类搜索文章.jpg

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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默认的搜索处理函数。代码如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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,自己写搜索处理函数

typecho1.1版本functions.php模板文件里加入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);//设置跳转地址
            }
        }
}

typecho1.2版本functions.php模板文件里加入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function themeInit($archive)
{
if($archive->request->isPost() && isset($archive->request->get('ss'))){
so($archive,$archive->request->get('ss'));//判断为post请求,并且有参数ss,启用so函数
}}
function so($obj,$word){
/** 处理搜索结果跳转 */
$filterKeywords = $word;
$type='';
if($obj->request->get('cat')){$type="?cat=".$obj->request->get('cat');}
/** 跳转到搜索页*/
if (NULL != $filterKeywords) {
                $obj->response->redirect(
                    \Typecho\Router::url('search', ['keywords' => urlencode($filterKeywords)], $obj->options->index).$type
                );
            }
}

3,启动soso插件

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

4,重写翻页按钮地址

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 < $this->_totalPage) {
            echo ''
            . $nextWord . '';
        }
    }
}
?>

上述代码就是在上一页/下一页的翻页按钮后面追加cat参数,追加好了,就完美了。 【仅适用于typecho1.1,1.2版本可以在调用分页插件接口进行开发,这里就不进行赘述了】 5,完善

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
全部
Typecho全部
Typecho主题
Typecho插件
Typecho教程
博客文章


Search

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

linkCard('.post-content','0');

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Typecho 给评论增加点赞/喜欢功能
之前换了主题以后,重新给文章增加了点赞功能。 那么又如何给每一条评论都增加点赞功能呢?参考了以下两篇文章后,重新做了调整。增加cookie,防止重复点赞。
目的地-Destination
2023/03/06
1K0
关于typecho的一些样式代码
循环页面、分类、标签 <!--循环显示页面--> <?php $this->widget('Widget_Contents_Page_List')->to($pages); ?>
用户7146828
2021/08/09
1.3K0
typecho点赞实现代码分享
likeup是指定文章id的,do_action是点赞动作,动作为do为点赞,undo为取消点赞!请求地址就是你自己的域名!
泽泽社长
2023/04/17
6800
Typecho主题模板制作快速入门简易教程
Typecho主题的制作并不难,(以下称模板)只要写好了HTML和CSS,嵌套模板就非常简单了,无需了解标签的内部结构,只要会使用,就能迅速完成模板。
梦溪
2021/08/09
6K0
Typecho不修改源码不关闭反垃圾保护兼容pjax
方法一呢,明显不适合小白用户,而且程序更新后可能会出现问题,或者需要再次修改。 方法二,虽然简单直接了很多,但是呢作为一个写主题的博主,总会被小白重复问道为啥评论不好使【明明主题安装说明里都强调说明了要关闭反垃圾保护,可是小白就是看不到!所以对于主题作者来说这样也不太好】
泽泽社长
2023/04/17
3100
Typecho首页置顶文章的显示问题的解决
1. 同一篇文章会在首页的所有分类里面均置顶显示; 2. 如果是相同分类下的最近的文章,则会重复显示;
目的地-Destination
2023/03/06
1.4K0
Typecho首页置顶文章的显示问题的解决
Typecho最新热门热评文章调用api
因为群友花花弄了个高仿掘金主题,没有实现热门与热评文章加载功能,特此为其分享点代码,先是简单弄了个json版本,后来根据需求又弄了个html的版本
泽泽社长
2023/04/17
5670
PHP 老网站改造:typecho 动静分离
通过实施动静分离架构,将静态资源(如图片、脚本、样式表等)部署至独立二级域名,并整合第三方CDN全球加速服务及云对象存储方案,可显著优化网站性能指标。
启说
2025/04/27
840
Typecho随机文章与同分类下随机文章的实现
在制作Typecho主题时,有的时候会想弄个随机推荐文章的功能,所以我就简单弄了个函数,可以随机输出n篇文章,同时追加一些参数还可以输出当前文章分类下的随机文章,具体如下: 函数部分
泽泽社长
2023/04/17
4690
typecho重写数字分页(盒状分页)函数
之前写过《Typecho 自定义分页样式》主要是介绍typecho默认的分页文档使用方法,但是用了一段时间后发下局限性不少!
泽泽社长
2023/04/17
6240
Typecho 文章内链接在新窗口打开实现方式
  默认情况文章中如果有添加链接,那么是从当前窗口跳转的,并且外链没有添加标签,不利于SEO,文章内链接新窗口并添加标签如下。
宜轩
2022/12/29
1.6K0
Typecho 文章内链接在新窗口打开实现方式
Typecho主题开发/二次开发常用代码功能整理备用
目前我们在使用的博客CMS程序中,可能较多的网友会使用WordPress,毕竟提供的免费主题、插件以及文档是比较多的,主要是用户量确实比较多。其次国内的免费博客CMS中,ZBLOG和Typecho是小众用户群,不能说不行,只能说用户量相对比较小。但是老蒋个人认为有用作个人博客日志的还是可以用的。
老蒋
2021/12/24
4930
Typecho不使用插件实现Ajax评论功能
完善好的函数 function ajaxComment($archive){ $options = Helper::options(); $user = Typecho_Widget::widget('Widget_User'); $db = Typecho_Db::get(); // Security 验证不通过时会直接跳转,所以需要自己进行判断 // 需要开启反垃圾保护,此时将不验证来源 if($archive->request->get('_') != Helper::security()->getT
团团生活志
2022/08/16
5490
Typecho调用分类列表并隐藏多个分类方法
本想Typecho调用分类列表后,隐藏两个不需要的分类。网上找了一大堆教程,基本都是官方的方法。
目的地-Destination
2023/03/06
2.6K0
Typecho调用分类列表并隐藏多个分类方法
使用分词增强Typecho的搜索功能
本博客是使用Typecho搭建的,侧边提供了搜索功能,然而Typecho内置的搜索功能仅仅只是基于字符串的全匹配查找,功能非常鸡肋,很多合理的查询都没法得到结果,比如“Transformer的文章”、“BERT的相关内容”都没有查询结果,因为文章中都不包含这些字符串
mathor
2021/08/03
1.6K0
Typecho前台登录/注册
前台登录是个很方便的功能,无论是作为个人博客还是多人博客,前台登录都会节省用户时间。
泽泽社长
2023/04/17
4.7K0
typecho常用函数及调用方法
24.获取最新评论列表第二个版本,只显示访客评论不显示博主也就是作者或者说自己发的评论
kenvie
2022/01/20
1.8K0
表情包(附上cutten emoji.json)代码
直接下载这个参考乔治博客里面的文件位置替换对应文件就可以了 注意:仅适用于cutten4 最新版本 emoji.json下载地址: https://cdn.jsdelivr.net/gh/LR787/image/usr/uploads/2021/02/3630647554.json ctx.php下载地址 https://cdn.jsdelivr.net/gh/LR787/cdn/php/ctx.php
meowrain
2021/04/22
3.9K0
表情包(附上cutten emoji.json)代码
Akina For Typecho主题修改记录分享
大多数博主,基本都换过各种类型的博客程序,WordPress、Typecho、hexo、Z-Blog等等太多了,最后选择Typecho,就是因为小巧不臃肿。本人一共使用过两款:Cactus来自仙岛驿站和Akina来自子虚之人。
目的地-Destination
2023/10/12
3750
Akina For Typecho主题修改记录分享
Typecho通用评论组件包含Css样式
一直以来我都不太喜欢写Typecho评论列表样式,那时候多说还没有死,就想着有没有大佬直接写好一套Typecho评论列表简单样式,然后别人就可以改改css和html结构就能diy自己的样式,不用考虑php啥的,于是乎昨天简单弄了下。
泽泽社长
2023/10/01
4800
相关推荐
Typecho 给评论增加点赞/喜欢功能
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验