153 lines
4.1 KiB
PHP
153 lines
4.1 KiB
PHP
<?php
|
|
/*
|
|
|
|
新闻控制器路由规则:
|
|
|
|
routes.news.route = news/:type/:page
|
|
routes.news.defaults.controller = news
|
|
routes.news.defaults.action = list
|
|
routes.news.defaults.page = 1
|
|
|
|
routes.archive.type = "Zend_Controller_Router_Route_Regex"
|
|
routes.archive.route = "news/:type/archive-(\d+).html"
|
|
routes.archive.defaults.controller = news
|
|
routes.archive.defaults.action = archive
|
|
routes.archive.map.1 = "aid"
|
|
|
|
*/
|
|
class NewsController extends Zend_Controller_Action
|
|
{
|
|
private $limit=10;
|
|
function preDispatch()
|
|
{
|
|
$this->view->config = Zend_Registry::get('config');
|
|
$this->db=Zend_Registry::get('db');
|
|
$this->messenger=$this->_helper->getHelper('FlashMessenger');
|
|
$this->view->messages = $this->messenger->getMessages();
|
|
}
|
|
|
|
function indexAction()
|
|
{
|
|
$sql="select * from news_category order by displayorder asc";
|
|
$re = $this->db->query($sql);
|
|
$types = $re->fetchAll();
|
|
|
|
$this->view->types=$types;
|
|
|
|
$sql = "SELECT a.*,t.title as typetitle,t.url FROM news_archives a
|
|
LEFT JOIN news_category t ON a.typeid=t.id
|
|
WHERE a.ts_published<'now()' AND is_pub>=1 ORDER BY ts_published DESC";
|
|
|
|
$rs = $this->db->query($sql);
|
|
$rows = $rs->fetchAll();
|
|
|
|
$page = $this->_request->getParam('page');
|
|
|
|
$paginator = Zend_Paginator::factory($rows);
|
|
$paginator->setCurrentPageNumber($page);
|
|
$paginator->setItemCountPerPage($this->view->config->page->max);
|
|
$paginator->setView($this->view);
|
|
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
|
$this->view->paginator=$paginator;
|
|
}
|
|
|
|
function listAction()
|
|
{
|
|
$type = strtolower($this->_request->getParam('type'));
|
|
$page = $this->_request->getParam('page');
|
|
|
|
if(preg_match("/archive\-(\d+)\.html/",$page,$matches))
|
|
{
|
|
$this->_forward('archive', 'news', null, array('archive' => $matches['1'] , 'type'=> $type));
|
|
}
|
|
else
|
|
{
|
|
if(preg_match("/[^a-z0-9]/",$type) || preg_match("/[^0-9]/",$page))
|
|
{
|
|
$this->_forward('error', 'error', null, null);
|
|
}
|
|
|
|
$sql = "SELECT id,url,title FROM news_category WHERE url='$type'";
|
|
$rs = $this->db->query($sql);
|
|
$row = $rs->fetch();
|
|
|
|
if(empty($row['id']))
|
|
{
|
|
$this->_forward('error', 'error', null, null);
|
|
}
|
|
|
|
else{
|
|
|
|
$this->view->url = $row['url'];
|
|
$this->view->title = $row['title'];
|
|
|
|
$sql="select * from news_category order by displayorder asc";
|
|
$re = $this->db->query($sql);
|
|
$types = $re->fetchAll();
|
|
|
|
$this->view->types=$types;
|
|
|
|
$sql = "SELECT arc.*,c.url FROM news_archives arc
|
|
LEFT JOIN news_category c ON arc.typeid=c.id
|
|
WHERE arc.typeid='{$row['id']}' AND arc.ts_published<'now()' AND arc.is_pub>=1
|
|
ORDER BY arc.ts_published DESC";
|
|
|
|
$rs = $this->db->query($sql);
|
|
$rows = $rs->fetchAll();
|
|
|
|
$paginator = Zend_Paginator::factory($rows);
|
|
$paginator->setCurrentPageNumber($page);
|
|
$paginator->setItemCountPerPage($this->view->config->page->max);
|
|
$paginator->setView($this->view);
|
|
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination_param.phtml');
|
|
$this->view->paginator=$paginator;
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function archiveAction()
|
|
{
|
|
$type = $this->_request->getParam('type');
|
|
$archive = $this->_request->getParam('archive');
|
|
|
|
$this->view->type = $type;
|
|
|
|
if(preg_match("/[^a-z0-9]/",$type) || preg_match("/[^0-9]/",$archive))
|
|
{
|
|
$this->_forward('error', 'error', null, null);
|
|
}
|
|
|
|
$sql="select * from news_category order by displayorder asc";
|
|
$re = $this->db->query($sql);
|
|
$types = $re->fetchAll();
|
|
|
|
$this->view->types=$types;
|
|
|
|
$sql = "SELECT arc.*,type.url,type.title as typename,u.realname as author FROM news_archives arc";
|
|
$sql .= " LEFT JOIN news_category type ON arc.typeid=type.id";
|
|
$sql .= " LEFT JOIN users u ON arc.userid=u.id";
|
|
$sql .= " WHERE arc.is_pub>0 AND arc.ts_published<'now()' AND arc.id=$archive";
|
|
|
|
|
|
$rs = $this->db->query($sql);
|
|
$row = $rs->fetch();
|
|
|
|
if(empty($row['id']))
|
|
{
|
|
$this->_forward('error', 'error', null, null);
|
|
}
|
|
|
|
$this->view->infos = $row;
|
|
|
|
}
|
|
|
|
function searchAction()
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|