在以上几节的Magento开发实例中,我们已经为新闻模块创建了后台应用,使我们可以在后台管理新闻数据,当我们向后台添加一些测试数据后,这一节中我们将在前台显示新闻列表。
1 前台控制器
修改/app/code/local/Www/News/controllers/IndexController.php的indexAction()方法:
<?php
class Www_News_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$this->renderLayout();
}
}
2 添加Layout文件
添加/app/design/frontend/default/default/layout/news.xml
<?xml version="1.0"?>
<layout version="0.1.0">
<news_index_index>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
<reference name="content">
<block type="page/template_container" name="news.container" template="news/container.phtml">
<block type="page/html_pager" name="news.pager.top" as="pager_top" template="page/html/pager.phtml"/>
<block type="page/html_pager" name="news.pager.bottom" as="pager_bottom" template="page/html/pager.phtml"/>
<block type="news/list" name="news.list" as="news_list" template="news/list.phtml">
<action method="bindPager"><pager>news.pager.top</pager></action>
<action method="bindPager"><pager>news.pager.bottom</pager></action>
</block>
</block>
</reference>
</news_index_index>
</layout>
并在config.xml文件中添加layout:
<config>
<frontend>
<layout>
<updates>
<news>
<file>news.xml</file>
</news>
</updates>
</layout>
</frontend>
</config>
3 添加Container模板
在Layout中我们设置container的模板为”news/container.phtml”
添加/app/design/frontend/default/default/template/news/container.phtml
<div class="page-news">
<div class="page-title"><h1>News</h1></div>
<?php echo $this->getChildHtml('pager_top') ?>
<?php echo $this->getChildHtml('news_list') ?>
<?php echo $this->getChildHtml('pager_bottom') ?>
</div>
4 添加List新闻列表Block
添加/app/code/local/Www/News/Block/List.php
<?php
class Www_News_Block_List extends Mage_Core_Block_Template
{
protected function _prepareLayout()
{
$collection = Mage::getModel('news/news')->getCollection();
$collection->addFieldToFilter('is_active', MagentoBoy_News_Model_News::STATUS_ENABLED);
$collection->setOrder('created_at', 'DESC');
$this->setCollection($collection);
return $this;
}
public function bindPager($pagerName)
{
$pager = $this->getLayout()->getBlock($pagerName);
if ($pager) {
$pager->setLimit(5); // 设置每页显示新闻的数量
$pager->setCollection($this->getCollection());
$pager->setShowPerPage(false);
}
}
}
5 添加List新闻列表Template
添加/app/design/frontend/default/default/template/news/list.phtml
<?php $_items = $this->getCollection();?>
<?php if ($_items->getSize()):?>
<ul class="news">
<?php foreach ($_items as $_item):?>
<li style="margin:20px;">
<h3><?php echo $_item->getTitle();?></h3>
<div>Posted on <?php echo $this->helper('core')->formatDate($_item->getCreatedAt());?></div>
<div><?php echo nl2br($this->htmlEscape($_item->getContent()));?></div>
</li>
<?php endforeach;?>
</ul>
<?php else:?>
<p class="note-msg">
<?php echo $this->__('There are no news.'); ?>
</p>
<?php endif;?>
打开http://www.example.com/news页面,我们将看到新闻页面,每页显示5条新闻,如果新闻数量超过5条,将显示分页栏。