Scratch学科网站开发日志四:课程内容显示

在搞掂了课程的分类显示之后,立马做课程内容的显示。课程内容显示的原理是这样子的:

1、在左侧栏的课程内容下面列出该课程的所有内容文章标题。

2、在主内容显示区显示文章内容,如果是点击了该课程,则直接进入该课程下的第一篇文章,否则根据文章ID显示文章。

实现

要实现以上原理,我使用了以下方法。

1、需要定制一个新的视图文件应用到课程内容分类上,复制视图文件list.html并重命名为list_course_item.html。完成后,将课程内容分类模板设置为此模板。例如:“第一课 小猫爱编程”这个分类,编辑它,在模板设置里,列表模板选择list_course_item.html

2、修改控制器ListController.php文件,在index()方法里,在渲染之前添加如下方法来判断是否为课程内容分类:

1
2
3
if($tplname == 'list_course_item') {
$this->course_item(intval($_GET['id']));
}

新建一个方法,名为course_item($term),参数$term为课程内容分类ID。在这个方法里,需要获取该分类下的所有文章,并且要按照后台设置好的顺序进行排序好:

1
2
3
4
5
6
7
$posts_model = D("Portal/Posts");
$term_relationships_model = D("Portal/TermRelationships");
$posts=$term_relationships_model
->alias("a")
->join(C ( 'DB_PREFIX' )."posts b ON a.object_id = b.id")
->where("a.term_id = ".$term)
->order("a.listorder ASC")->select();

点击了课程内容下的文章,也是使用同一个视图文件进行渲染的,所以,在URL地址里还需要传递文章ID值,根据获取到的文章ID值来显示文章内容,如果为空,则显示该课程内容分类下的第一篇文章。

1
$article_id=sp_get_term($_GET['article']);

3、修改视图文件。在需要显示文章内容的地点写上{$article['post_content']}。而左侧边栏,则是通过一个循环将文章标题陈列:

1
2
3
4
5
6
<foreach name="posts" item="vo">
<php>$smeta=json_decode($vo['smeta'],true);</php>
<p>
<a href="{:leuu('list/index',array('id'=>$vo['term_id'],'article'=>$vo['id']))}">{$vo.post_title}</a>
</p>
</foreach>

这样子就简单地完成了课程内容的显示了。如下图:

课程内容截图