Search.php 9.07 KB
<?php

use Action\AbstractAction;
use LibModels\Wap\Product\SearchData;
use Plugin\DataProcess\ListProcess;
use Plugin\Helpers;

/**
 * 搜索页
 */
class SearchController extends AbstractAction
{

    /**
     * 搜索首页
     */
    public function indexAction()
    {
        $this->setNavHeader('搜索', true, SITE_MAIN);
        //热门搜索和默认搜索
        $termsData = SearchData::getTerms();
        //默认搜索
        $defaultTerms = empty($termsData['defaultTerms'][0]['content']) ? '' : $termsData['defaultTerms'][0]['content'];
        //热门搜索
        $hotTerms = empty($termsData['hotTerms']) ? array() : $termsData['hotTerms'];
        
        $data = array(
            'search' => array('url' => Helpers::url('', null, 'search')),
            'showDownloadApp' => true,
            'defaultTerms' => $defaultTerms,
            'hotTerms' => $hotTerms,
            'searchPage' => true,
            'pageFooter' => true
        );

        $this->_view->display('index', $data);
    }

    /**
     * 搜索列表页
     *
     */
    public function listAction()
    {
        $uid = $this->getUid() ? $this->getUid() : $this->get('uid');
        $isApp = $this->isApp();

        // 标识用户搜的是不是一级品类
        $isQueryFirstClass = false;
        // 标识用户搜的是不是二级品类
        $isQuerySecondClass = false;

        /* 获取处理查询字符串 */
        $condition = \Product\SearchModel::conditionHandle();
        $query = empty($condition['query']) ? null : strtolower(trim($condition['query']));

        // 标识用户是否有输入搜索内容
        $haveQuery = !empty($query);

        /* 判断是不是品牌, 是品牌跳到品牌列表页(显示搜索框) */
        if ($haveQuery) {
            \Product\SearchModel::brandHandle($condition, $query);
        }

        /* 判断是不是品类, 是品类加导航标题(不显示搜索框) */
        if ($haveQuery) {
            $queryClassType = \Product\SearchModel::categoryHandle($query);
            $isQueryFirstClass = $queryClassType['isQueryFirstClass'];
            $isQuerySecondClass = $queryClassType['isQuerySecondClass'];
        } else {
            $condition['query'] = '';
        }

        $data = array();
        $data['goodListPage'] = true;
        $data['goodList'] = $condition;
        $data['query'] = $query;

        // 用户自定义商品类目
        if(isset($condition['filter_poolId'])){
            $data['filter_poolId'] = rawurldecode($condition['filter_poolId']);
        }
        
        do {
            if ($isApp) {
                break;
            }
            // 搜索是一级品类
            if ($isQueryFirstClass) {
                $this->setTitle('全部' . $query);
                $this->setNavHeader('全部' . $query, true, SITE_MAIN);
            } // 搜索是二级品类
            elseif ($isQuerySecondClass) {
                $this->setTitle($query);
                $this->setNavHeader($query, true, SITE_MAIN);
            } // 搜索其它内容
            else {
                $from = $this->get('from');
                if ($haveQuery || $from) {
                    $data['goodList']['search']['default'] = empty($query) ? false : $query;
                    $data['goodList']['search']['url'] = Helpers::url('', null, 'search');
                }
                $this->setTitle('搜索');
                $this->setNavHeader('搜索', true, SITE_MAIN);
            }
        }while(false);

        // 右下角的购物车链接
        $data['goodList']['cartUrl'] = Helpers::url('/cart/index/index', null);

        // 显示底部悬浮下载
        $data['showDownloadApp'] =  $this->isApp() ? false : true;

        // 显示页面底部登录信息
        $data['pageFooter'] =true;

        // 查询数据
        if (!isset($condition['query'])) {
            $data['goodList'] += Product\ListModel::getClassData($condition);
        } else {
            $listData = SearchData::searchByCondition($condition);
            // 处理返回的数据
            if (!empty($listData['data']['brand'])) {
                $brandData = $listData['data']['brand'];
                $data['brandWay'] = array(
                    'url' => 'http://' . $brandData['brand_domain'] . SUB_DOMAIN,
                    'thumb' => Helpers::getImageUrl($brandData['brand_ico'], 75, 40),
                    'name' => $brandData['brand_name']
                );
                // 设置品牌默认值
                $data['goodList']['brand'] = $brandData['id'];
                $data['goodList'] += ListProcess::getListData($listData['data']);
            }
            $listData = array();
        }


        if (isset($condition['title'])) {
            if ($isApp) {
                $this->setTitle($condition['title'], false, '');
            } else {
                $this->setNavHeader($condition['title'], true, SITE_MAIN);
            }
        }

        // 搜索列表将最新改成默认的标识
        $data['isSearch'] = true;

        /* 学生类型用户处理 */
        if (isset($condition['students'])) {
            array_merge($data, \Product\SearchModel::studentsHandle($uid, $isApp, $this->get('app_version')));
        }

        $this->_view->display('list', $data);
    }

    /**
     *
     * 店铺内的搜索
     */
    public function searchShopAction()
    {
        $uid = $this->getUid() ? $this->getUid() : $this->get('uid');
        $isApp = $this->isApp();

        /* 获取处理查询字符串 */
        $condition = \Product\SearchModel::conditionHandle();
        $query = empty($condition['query']) ? null : strtolower(trim($condition['query']));

        $data = array();
        $data['goodListPage'] = true;
        $data['goodList'] = $condition;
        $data['default'] = $data['query'] = $query;
        $data['shopId'] = $condition['shop_id'];

        // 用户自定义商品类目
        if(isset($condition['filter_poolId'])){
            $data['filter_poolId'] = rawurldecode($condition['filter_poolId']);
        }

        // 右下角的购物车链接
        $data['goodList']['cartUrl'] = Helpers::url('/cart/index/index', null);

        // 显示底部悬浮下载
        $data['showDownloadApp'] =  $this->isApp() ? false : true;

        // 显示页面底部登录信息
        $data['pageFooter'] =true;

        // 查询数据
        if (!isset($condition['query'])) {
            $data['goodList'] += Product\ListModel::getClassData($condition);
        } else {
            $listData = SearchData::searchByCondition($condition);
            // 处理返回的数据
            if (!empty($listData['data']['brand'])) {
                $brandData = $listData['data']['brand'];
                $data['brandWay'] = array(
                    'url' => 'http://' . $brandData['brand_domain'] . SUB_DOMAIN,
                    'thumb' => Helpers::getImageUrl($brandData['brand_ico'], 75, 40),
                    'name' => $brandData['brand_name']
                );
                // 设置品牌默认值
                $data['goodList']['brand'] = $brandData['id'];
                $data['goodList'] += ListProcess::getListData($listData['data']);
            }
            $listData = array();
        }

        /* 标题处理 */
        $this->setTitle('搜索');
        $this->setNavHeader('搜索', true, SITE_MAIN);

        if (isset($condition['title'])) {
            if ($isApp) {
                $this->setTitle($condition['title'], false, '');
            } else {
                $this->setNavHeader($condition['title'], true, SITE_MAIN);
            }
        }

        // 搜索列表将最新改成默认的标识
        $data['isSearch'] = true;

        /* 学生类型用户处理 */
        if (isset($condition['students'])) {
            array_merge($data, \Product\SearchModel::studentsHandle($uid, $isApp, $this->get('app_version')));
        }

        $this->_view->display('shop-list', $data);
    }

    /**
     * Ajax异步筛选请求
     */
    public function searchAction()
    {
        header('Access-Control-Allow-Origin:*');

        if ($this->get('query')) {
            $activity = SearchData::searchKeyActivity($this->get('query'));
            if ($activity['code'] === 200 && isset($activity['data']) && isset($activity['data']['url'])) {
                $this->go($activity['data']['url']);
            }
        }

        $data = \Product\SearchModel::search();

        if (empty($data['new'])) {
            echo ' ';
        } else {
            $this->_view->display('page', $data);
        }
    }

    /**
     * Ajax异步获取筛选数据
     * @return array 筛选数据
     */
    public function filterAction()
    {
        header('Access-Control-Allow-Origin:*');

        $data = Product\SearchModel::filter();

        if (empty($data)) {
            echo ' ';
        } else {
            $this->_view->display('filter', $data);
        }
    }

    /**
     * 模糊搜索提供的关键词
     */
    public function fuzzyDatasAction()
    {
        $keyword = $this->get('keyword', '');
        $data = SearchData::searchFuzzyDatas($keyword);
        $this->echoJson($data);
    }

}