thinkcmf后台获取一级分类下所有子分类的文章列表实现办法


最近忙于一个项目的开发,找了许多框架,对比之下选择了老猫的CMF,觉得该框架的潜力很大。


而在开发的过程中发现,一级分类下建立了许多子分类子栏目时,后台文章管理无法显示一级分类有任何文章,必须点击选择某个子分类进行搜索才行,这个不利用管理。


所以研究了一阵子,发现只需要修改几句,就可以实现后台文章列表中,一级分类下所有的子分类文章都显示出来。


具体效果如下:

1、一级分类下有许多的子分类

335d826ae607063f152c5f25c5a37259.jpg

2、即使是选择一级分类,它仍然可以显示它之下的子分类文章列表

dabc1ccb01e6d017a6a2c3162420ff43.jpg

通过调试工具可以发现,SQL语句对分类ID的数组进行查询。

c9582d2755e599fada1c2052d1b2fd90.jpg

3、当选择某一个子分类时,也正常搜索出文章列表。它的SQL语句如下图。

622dfc0985594015e36ec50b5a5aa6e3.jpg


具体实现方法如下:

1、修改\app\portal\service\PostService.php,找到函数 public function adminPostList()

(1)将

$category = empty($filter['category']) ? 0 : intval($filter['category']);

修改为

$category = empty($filter['category']) ? 0 : $filter['category'];


(2)将

$where['b.category_id'] = ['eq', $category];

修改为

 if(is_array($category)) {

                $where['b.category_id'] = ['in', $category];

            }

            else{

                $where['b.category_id'] = ['eq', $category];

            }


2、修改\app\portal\controller\AdminArticleController.php,

(1)在前面namespace下方的use函数库中,随便一行插入use app\portal\service\ApiService;


(2)然后,找到函数public function index()

在$categoryId = $this->request->param('category', 0, 'intval');下方增加以下内容


        $cate_api = ApiService::allSubCategories($param['category']);

        $subcategories =array();

        foreach ($cate_api as $key => $value) {

            $subcategories[] = $value['id'];

        }

        if(!empty($subcategories)){

                $param['category'] = array_merge((array)$param['category'],$subcategories);

        }


然后将这两个文章上传到网站同样的位置覆盖原文件,即实现一级分类显示子分类的文章列表。


PS:以上仅为技术交流,如有不对,欢迎斧正。


评论

暂时关闭,稍后恢复~
文档请看10遍以上!有问题可加QQ群!
发表话题

源素材推荐

提问必知

0.话题发布后没及时显示,请联系官方QQ群管理;
1.话题支持代码,qq截屏直接粘贴,和QQ群一样;
2.问题描述清,比如服务器版本,程序版本;
3.能上代码,就不用文字;
4.把问题发到话题后再发QQ群;
5.如果感觉回复者解答的不错,可以发红包!
6.多帮助别人也是对自己的锻炼!
7.付费讨论中只有提问者和付费用户才可以查看回复

积分规则

1.评论积分+1;每天最多10次奖励
2.发布话题积分+1;每天最多5次奖励
3.垃圾评论积分-500;
4.黄色,暴力,违反我国法律评论直接封号


ThinkCMF 8.0.0发布啦!祝大家节日快乐! 立即体验!