jobeet第七天:玩转分类页面

*这一系列文章来源于Fabien Potencier,基于Symfony1.4编写的Jobeet Tutirual

今天我们就来完成第二天内容中Category的需求,实现Category的相关页面:

用户能够查看同一Category中的所有Job信息,并且Job信息能按照最近发布时间进行排序,并且每页显示20条Job信息

配置Category路由

首先,我们需要为Category页面添加易理解的URL路由。把下面的代码添加到路由文件的开头:

为了得到转义过的Category::name属性值,我们需要在Category类中添加getSlug()方法:

 

添加链接到Category页面的URL

现在编辑JobController下的index.html.twig模板,让它能链接到对应的Category页面:

在上面的模板中,我们使用到了category.morejobs变量的值,所以我们需要定义它:

属于同一Category下的Job列表总行数减去首页中同一Category下的Job列表的行数的结果就是more_jobs属性中Job的数量(看代码)。

我们需要在JobRepository类中加入countActiveJobs()方法:

现在我们可以在浏览器中看到下面的结果:

07-01

创建CategoryController控制器

现在是时候创建 CategoryController控制器了。我们在src/Ibw/JobeetBundle/Controller目录下添加CategoryController.php文件:

和之前的JobController类似,我们可以使用doctrine:generate:crud命令来生成控制器,但其中生成的90%代码是我们不需要的,因此我们选择手动创建一个新的控制器。

更新数据库

我们现在为Category添加一个slug列,同时把它加入到lifecycleCallbacks区块中,这样slug的值就能被自动填充了:

删除Category实体(src/Ibw/JobeetBundle/Entity/Category.php)中的getSlug()方法,然后运行下面的命令更新Category实体:

现在我们可以看到Category.php中添加了下面的代码:

修改setSlugValue()方法:

因为我们为Category实体类加入了slug列,所以我们需要更新数据表。现在我们需要删掉之前的数据库并重新创建,然后加载Fixture

 

Category页面

现在我们需要往showAction()方法中添加一些东西了。在CategoryController.php中添加下面的代码:

接下来我们创建show.html.twig模板:

 

包含一个Twig模板

你可能注意到了,我们在Category模块中的show.html.twig文件里创建Job列表的HTML代码和在Job模块中的index.html.twig文件里创建Job列表的HTML代码一样。请注意,这里已经有代码重复了,我们都知道代码重复不是件好事。如果我们需要重用模板中的一些代码,我们可以创建一个新的twig模板,然后在需要用到它们的模板中把它们包含进来即可。现在我们来创建list.html.twig文件:

我们可以在模板中使用include函数来替换我们之前的两个模板中出现过的

标签的内容:

 

 

分页列表

现在(作者写这篇教程的时间)Symfony2并没用为我们提供好的分页工具,那我们就来使用经典的方式来实现分页吧。首先我们来为IbwJobeetBundle_category路由添加分页参数。分页参数的默认值为1,因此它可以不是必需的:

 

修改路由后我们需要清除缓存:

每页显示多少行Job信息的参数我们会在app/config/config.yml中定义:

修改JobRepository::getActiveJobs()方法,为它添加一个$offset参数:

修改Category::showAction()方法:

最后我们来修改模板:

结果如下:

 

07-02

 

原文链接:http://www.intelligentbee.com/blog/2013/08/13/symfony2-jobeet-day-7-playing-with-the-category-page/

 

One comment

发表评论