王尘宇王尘宇

研究百度干SEO做推广变成一个被互联网搞的人

typecho按分类搜刮文章

之前我写的soso搜刮加强插件实在已能够依据分类举行搜刮内容了,不过须要模板上举行合营,比方我们搜刮分类id2620下关于typecho文章,须要通报分类id的参数给cat,让插件猎取,比方这个链接https://qqdie.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修正按钮链接的体式格局追加参数了。

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

<?phpglobal $can;//定义全局变量,轻易下面猎取$cat=intval($this->request->cat);//猎取catif($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内里的内容能够运用轮回输出一切分类。

相关文章

评论列表

发表评论:
验证码

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