PHP建站技术分享-从入门到精通PHP建站技术分享-从入门到精通PHP建站技术分享-从入门到精通

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > 易优CMS

eyoucms筛选加多条件搜索

管理员 2024-11-21
易优CMS
378

前端页面构建搜索表单

在 EyouCms 中,首先需要在模板文件(通常是.html文件)中构建搜索表单。可以使用 HTML 的<form>标签来实现。

示例代码如下:

html

复制

<form action="{eyou:arcurl function='list'}" method="get">

    <input type="text" name="keywords" placeholder="关键词搜索">

    <select name="category_id">

        <option value="">所有分类</option>

        {eyou:channel type='son' addfields='litpic' row='10'}

            <option value="{eyou:$field.id}">{eyou:$field.typename}</option>

        {/eyou:channel}

    </select>

    <input type="submit" value="搜索">

</form>

在这个表单中,action属性指向了 EyouCms 的列表页生成函数list。method="get"表示使用 GET 方法提交表单。表单中有一个文本输入框用于输入关键词(keywords),一个下拉菜单用于选择分类(category_id),最后是一个提交按钮。通过{eyou:channel}标签来动态生成分类选项,type='son'表示获取子分类,addfields='litpic'可以添加额外的字段(这里是缩略图字段),row='10'表示获取 10 个分类。

后端处理多条件搜索逻辑(在控制器或模型中)

在 EyouCms 的控制器或者模型文件中,需要处理前端提交的搜索条件。

对于关键词搜索和分类搜索,在list方法(假设是在文章列表控制器中)中可以这样处理:

php

复制

public function list()

{

    $keywords = input('keywords');

    $category_id = input('category_id');

    $where = [];

    if ($keywords) {

        $where['a.title'] = ['like', '%'.$keywords.'%'];

    }

    if ($category_id) {

        $where['a.category_id'] = $category_id;

    }

    $articleList = Db::name('archives')->alias('a')->where($where)->select();

    $this->assign('articleList', $articleList);

    return $this->fetch();

}

在上述代码中,首先通过input函数获取前端提交的keywords(关键词)和category_id(分类 ID)。然后构建一个$where数组来存储查询条件。如果keywords不为空,就添加一个标题模糊查询的条件到$where数组中。如果category_id不为空,就添加一个分类 ID 匹配的条件。最后,使用Db::name('archives')->alias('a')->where($where)->select()来根据条件查询文章列表,并将结果赋值给模板变量articleList,最后返回模板渲染结果。

优化搜索体验(如添加更多筛选条件、分页等)

添加更多筛选条件

除了关键词和分类,还可以添加其他筛选条件,比如时间范围、文章标签等。】

eyoucms筛选加多条件搜索

例如,添加一个时间范围筛选:

html

复制

<form action="{eyou:arcurl function='list'}" method="get">

    <input type="text" name="keywords" placeholder="关键词搜索">

    <select name="category_id">

        <option value="">所有分类</option>

        {eyou:channel type='son' addfields='litpic' row='10'}

            <option value="{eyou:$field.id}">{eyou:$field.typename}</option>

        {/eyou:channel}

    </select>

    <label for="start_date">开始日期:</label>

    <input type="date" name="start_date">

    <label for="end_date">结束日期:</label>

    <input type="date" name="end_date">

    <input type="submit" value="搜索">

</form>

在后端的list方法中更新条件处理部分:

php

复制

public function list()

{

    $keywords = input('keywords');

    $category_id = input('category_id');

    $start_date = input('start_date');

    $end_date = input('end_date');

    $where = [];

    if ($keywords) {

        $where['a.title'] = ['like', '%'.$keywords.'%'];

    }

    if ($category_id) {

        $where['a.category_id'] = $category_id;

    }

    if ($start_date && $end_date) {

        $where['a.pubdate'] = ['between', [$start_date, $end_date]];

    } elseif ($start_date) {

        $where['a.pubdate'] = ['>=', $start_date];

    } elseif ($end_date) {

        $where['a.pubdate'] = ['<=', $end_date];

    }

    $articleList = Db::name('archives')->alias('a')->where($where)->select();

    $this->assign('articleList', $articleList);

    return $this->fetch();

}

添加分页功能

在 EyouCms 中,可以使用内置的分页类来实现分页。在list方法中,在查询文章列表之后添加分页逻辑。

php

复制

public function list()

{

    // 前面的条件查询部分省略...

    $articleList = Db::name('archives')->alias('a')->where($where)->select();

    $count = Db::name('archives')->alias('a')->where($where)->count();

    $page = input('page', 1);

    $limit = 10;

    $pages = ceil($count / $limit);

    $articleList = Db::name('archives')->alias('a')->where($where)->page($page, $limit)->select();

    $this->assign('articleList', $articleList);

    $this->assign('page', $page);

    $this->assign('pages', $pages);

    return $this->fetch();

}

在模板文件中,添加分页链接的显示:

html

复制

<div class="pagination">

    {eyou:page current="{eyou:$page}" pages="{eyou:$pages}" url="{eyou:arcurl function='list'}?keywords={eyou:$keywords}&category_id={eyou:$category_id}&start_date={eyou:$start_date}&end_date={eyou:$end_date}"}

    {/eyou:page}

</div>

这样就可以根据搜索条件实现带有分页的多条件搜索功能。


后端代码如下:

public function product_search(){

//接收参数

//类别

$category = input('ProType');

//NetSelect1

$netselect1 = input('NetSelect1');

//NetSelect2

$netselect2 = input('NetSelect2');

//NetSelect3

$netselect3 = input('NetSelect3');

//Proname

$proname = input('Proname');

//组装条件

//获取所有符合条件产品

$map = [];

       

if($category){

$map['b.category'] = ['like',"%".$category.'%'];

}

if($netselect1){

$map['b.netselect1'] = ['like',"%".$netselect1.'%'];

}

if($netselect2){

$map['b.netselect2'] = ['like',"%".$netselect2.'%'];

}

if($netselect3){

$map['b.netselect3'] = ['like',"%".$netselect3.'%'];

}

$where = [

'a.status'=>1,

'a.is_del'=>0,

'a.channel'=>2

];

if($proname){

$where['a.title'] = ['like',"%".$proname.'%'];

}

$list = array();

        //分页查询

$count = Db::name('archives')->alias('a')->join('__PRODUCT_CONTENT__ b', 'b.aid = a.aid', 'LEFT')->where($where)->where($map)->count();

        $Page = new Page($count, config('paginate.list_rows'));

$field = !empty($field) ? $field : 'b.*, a.*, a.aid as aid';

$list = Db::name('archives')->field($field)

->alias('a')

->join('__PRODUCT_CONTENT__ b', 'b.aid = a.aid', 'LEFT')

->where($map)

->where($where)

->limit($Page->firstRow.','.$Page->listRows)

->select();

$show = $Page->show();

        $this->assign('page', $show);

        $this->assign('list', $list);

        $this->assign('pager', $Page);

        

$viewfile = 'product_search';

return $this->fetch(":{$viewfile}");

}



希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部