typecho按分类搜索文章

张开发
2026/4/13 0:58:31 15 分钟阅读

分享文章

typecho按分类搜索文章
typecho根据分类搜索文章.jpg之前我写的soso搜索增强插件其实已经能够根据分类进行搜索内容了不过需要模板上进行配合比如我们搜索分类id为2620下关于typecho的文章需要传递分类id的参数给cat让插件获取比如这个链接https://zezeshe.com/search/typecho/?cat2620插件会获取到2620然后根据它来按分类搜索文章内容。那么问题来了模板搜索表单怎么传递cat参数 typecho默认的搜索结构直接加个input进行传递如下form methodpost action?php $this-options-siteUrl(); ? rolesearch input typehidden namecat value2620 input typetext names placeholderSearch... button typesubmitSearch/button /form经过测试并没有用因为在处理搜索的过程中typecho的默认只接受names传递的内容。我的解决方案就是跳过typecho默认的搜索处理函数然后自己写。1跳过默认搜索处理把上述代码中的names改成namess跳过typecho默认的搜索处理函数。代码如form methodpost action?php $this-options-siteUrl(); ? rolesearch input typehidden namecat value2620 input typetext namess placeholderSearch... button typesubmitSearch/button /form2自己写搜索处理函数typecho1.1版本在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()-rewrite0){$urlHelper::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模板文件里加入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修改按钮链接的方式追加参数了。在搜索结果的模板文件中增加以下代码即可request-cat);//获取cat if($cat0){$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.11.2版本可以在调用分页插件接口进行开发这里就不进行赘述了】 5完善步骤1中的代码只是简单的传递了一个分类id并不适合实际中使用可以改为如下全部 Typecho全部 Typecho主题 Typecho插件 Typecho教程 博客文章 Search使用select能够比较方便的选择分类进行搜索根据需要select里面的内容可以使用循环输出所有分类。linkCard(.post-content,0);

更多文章