完整电商项目--(六)商品模块(4):首页三级分类展示及广告展示

切记联系前文中简述的 数据表的关系

三级分类中的数据返回构造:
  • 参照这个图片,看下面的数据结构:
    在这里插入图片描述

  • 这是一个难点,最主要的就是以一个好的形式将数据传递,使用

{
    "1":{   # 这个数字key, 就是代表的 tb_channel_group 表当中的频道 
        "channels":[
        	# 这个就是一行,每个频道中包含的一级分类 
            {"id":1, "name":"手机",   "url":"http://shouji.jd.com/"},
            {"id":2, "name":"相机", "url":"http://www.itcast.cn/"}
        ],        
        "sub_cats":[
            {
            	# 这是每个一级分类对应的二级分类
                "id":38, 
                "name":"手机通讯", 
                "sub_cats":[
                	# 每个二级分类对应的三级分类信息
                    {"id":115, "name":"手机"},
                    {"id":116, "name":"游戏手机"}
                ]
            },
            {
                "id":39, 
                "name":"手机配件", 
                "sub_cats":[
                    {"id":119, "name":"手机壳"},
                    {"id":120, "name":"贴膜"}
                ]
            }
        ]
    },
    "2":{
        "channels":[],
        "sub_cats":[]
    }
}
  • 下面是具体实现的代码:
def get_categories():
    # 查询分类数据,每个元素包含两个数据:一级分类列表。二级分类列表(里面含三级分类)
    '''
    categories={
    1: {
        channels:[{name:***, url:***}....],  # 一级分类,某些一级分类属于同一频道
        sub_cates:[sub{},....],   # 二级分类,里面是三级分类
    },
    {}, {}, {}, .....
    }
    '''
    # 1. 查询所有的频道
    channel_list = GoodsChannel.objects.order_by('group_id', "sequence")  # 前面一个排序是判断在一个频道,后面一个是判断,一个频道中 谁在前面,谁在后面排列
    categories = {}
    # 遍历频道,添加分类信息
    for channel in channel_list:
        # 判断频道是否已经存在
        if channel.group_id not in categories:
            # 不存在则新建频道
            categories[channel.group_id] = {
                'channels': [],
                'sub_cats': []
            }
        # 添加一级分类, 二级分类
        categories[channel.group_id]['channels'].append({'url': channel.url, 'name': channel.category.name})
        # 添加二级分类:通过一级分类的对象关联找到对应的二级和三级分类
        for sub2 in channel.category.subs.all():
        	# 这里的做法是后续的更改了。和上面的结构不一样, 直接是加入了一个 二级分类对象,它的一个属性含有三级分类对象,因为是前后端不分离开发,可以传递对象。
            sub2.sub_cats = sub2.subs.all()  # 获取二级分类对应的三级分类,动态给二级分类对象增加这个属性
            categories[channel.group_id]['sub_cats'].append(sub2)

    return categories
  • 大致思路就是这样! 注释是那么的清晰~ 希望你能理解,不懂就要多看看上节的数据表分析。

首页广告展示:

直接上代码:这一部分逻辑要简单很多

def get(self, request):
        # 2. 查询所有广告分类(广告位),我们之前讲的,广告分类,因为广告有很多投放位置
        content_category_list = ContentCategory.objects.all()
        # 构造广告字典
        '''
        {广告位标识:[广告1,....]}
        '''
        contents = {}
        # 遍历广告分类,找到每个分类中需要展示的广告即可,这里也是不分离。 分离也很容易,把查出来的对象再次遍历,组成所需数据结构即可~
        for content_category in content_category_list:
            # 查询出一个广告位,对应的所有广告内容
            contents[content_category.key] = content_category.content_set.all().order_by('sequence')

总结下来,实际上还是数据表的设计比较复杂。代码只要掌握一些技巧,知识构造数据结构。其实多写起来并不难。

over!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java电商项目中,商品服务三级分类删除代码实现可以参考以下步骤: 1. 首先需要在数据库中删除该三级分类的记录,可以通过以下SQL语句实现: ``` DELETE FROM category WHERE id = #{id} AND level = 3; ``` 其中,`id`表示三级分类的ID,`level`表示分类级别。 2. 在商品服务的实现类中添加删除三级分类的方法,调用以上SQL语句实现删除操作。例如: ```java public class CategoryServiceImpl implements CategoryService { @Autowired private CategoryMapper categoryMapper; @Override public int deleteCategory(Long id) { Category category = categoryMapper.selectByPrimaryKey(id); if (category == null || category.getLevel() != 3) { return 0; } return categoryMapper.deleteByPrimaryKey(id); } //... } ``` 其中,`categoryMapper`为MyBatis的Mapper接口,`selectByPrimaryKey()`方法用于根据ID查询分类信息,`deleteByPrimaryKey()`方法用于根据ID删除分类记录。在删除操作之前,需要判断该分类是否存在且为三级分类。 3. 在Controller中添加删除三级分类的接口,例如: ```java @RestController @RequestMapping("/category") public class CategoryController { @Autowired private CategoryService categoryService; //... @DeleteMapping("/{id}") public Result deleteCategory(@PathVariable Long id) { int count = categoryService.deleteCategory(id); if (count == 0) { return Result.failure("删除失败"); } return Result.success(); } } ``` 其中,`@DeleteMapping("/{id}")`表示接收DELETE请求,并且URL中的`{id}`参数为要删除的分类ID。`deleteCategory()`方法调用商品服务中的删除三级分类的方法,并返回操作结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值