newstyles项目实战(十六)CMS管理系统之内容分类管理

      内容管理系统,在这里管理的主要为首页的广告,今天我们需要实现一个首页大广告位的实现,所以这个大广告位和我们的CMS(内容管理系统)是分不开的,所以首先分析下我们的业务流程:

     我们需要展示的为广告,需要广告显式在对应的位置,但是我们之前的内容也分析过,一般的这些图片,尤其是向我们现在想要展示的内容一般放置在一个图片服务器上,我们接着利用之间搭建的nginx服务器作为我们的图片服务器,所以真正的需要分析的,归结到java中还是将我们所需要的对象抽析出来,所以,我们在数据库中根据我们以下的需求创建了一个关于广告内容的表:

抽取首页展示内容的共性:1、有一张图片2、有一个连接3、有一个标题4、有链接的提示5、价格。可以看到,如果在这里管理这些内容,例如我们有这么几个分类,大广告,边角广告,头广告等所以我们需要一个属性的结构来准确的表明他们的从属关系,所以我们需要一个属性结构,而怎么能够有效的保存这种关系呢,当然需要我们在数据库中建立一个表记录这种关系,我们将表的名字命名为tb_content_category。

表的设计如下:



分析一下,可以看到,里面有三个字段比较重要,parent_id是表示的当前的内容的父节点为那个,假如他又有子节点,那么子节点的此字段的值为父节点的id,同时,还有一个is_parent字段来标识是否为父节点的状态,这样便可以通过调用进行对应内容的读取(此案例使用的是EasyUI)。

首先,分析一下后端页面中有关此表中的内容读取的代码段:


可以看到,当页面进行初始化的时候,就会请求url进行一次查询,将对应的节点填充到页面中,此jsp页面为content-category.jsp页面。毕竟因为这个页面是属于后台管理使用的,之前我们也对台的很多内容进行了实现。所以我们了解了整个过程后可以着手实现此内容:

Dao层:

对于单个的查询,我们可以使用之前逆向工程生成的代码,然而抽吸出最基本的业务逻辑为一个查询:根据parentid查询节点列表:SELECT* FROM `tb_content_category` WHERE parent_id = 30;

Service层:

功能:接收parentid。根据parentid查询节点列表,返回返回一个EasyUI异步Tree要求的节点列表。每个节点包含三个属性id、text、state三个属性。可以使用EUTreeNode。

参数:id,返回值:List<EUTreeNode>

设计逻辑如下:

@Service
public class ContentCategoryServiceImpl implements ContentCategoryService {

	@Autowired
	private TbContentCategoryMapper contentCategoryMapper;
	
	@Override
	public List<EUTreeNode> getCategoryList(long parentId) {
		TbContentCategoryExample example = new TbContentCategoryExample();
		Criteria criteria = example.createCriteria();
		criteria.andParentIdEqualTo(parentId);
		//执行查询
		List<TbContentCategory> list = contentCategoryMapper.selectByExample(example);
		List<EUTreeNode> resultList = new ArrayList();
		for (TbContentCategory tbContentCategory : list){
			EUTreeNode node = new EUTreeNode();
			node.setId(tbContentCategory.getId());
			node.setText(tbContentCategory.getName());
			node.setState(tbContentCategory.getIsParent()?"closed":"open");
			resultList.add(node);
		}
		return resultList;
	}
}

Controller层:

接收页面传递过来的parentid,根据parentid查询节点列表。返回List<EUTreeNode>。需要响应json数据。返回的json数据被页面解析,展示到我们的页面上:
@Controller
@RequestMapping("/content")
public class ContentCategoryController {

	@Autowired
	private ContentCategoryService contentCargoryService;
	
	@RequestMapping("/category/list")
	@ResponseBody
	public List<EUTreeNode> getContentCatList(@RequestParam(value="id", defaultValue="0") long parentId){
		List<EUTreeNode> list = contentCargoryService.getCategoryList(parentId);
		return list;
	}
}
此时,因为请求的参数中parentid是从0开始的,可以看上面展示的表格中的内容,所以我们默认的请求值为0,这样能够读取最终的目录。

最终运行的结果如下:



可以看到最终页面能够读取相应的内容,并且按照我们所希望的那样按照一个树形结构展示出来。


猜你喜欢

转载自blog.csdn.net/qq_18870127/article/details/80108468
今日推荐