`
zhengdl126
  • 浏览: 2513467 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

(一)zendframework blog实例分析

阅读更多
modules  模块
models   模型


modules 对应路径控制的操作 都继承  Zend_Controller_Action,分前台(link)和后台(admin/link)控制器
models  对应表的类操作 都继承  class Common extends Zend_Db_Table

modules 每个动作方法对应一个URL


左侧菜单 :app\views\scripts\admin\script\common.js


admin/article/index
对应modeules下admin目录ArticleController.php的indexAction方法




=================================载入类文件
index.php
set_include_path('.' .PATH_SEPARATOR .'./library'.PATH_SEPARATOR .'./app/models/'.PATH_SEPARATOR .get_include_path());
//设置Zend Framework 自动载入类文件
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();//实现 Zend_Registry 自动转化成调用 Zend/Registry.php ,自动载入类文件

//*****************后期使用
//Zend_Loader::loadClass('Common_Plugin_Fckeditor');
//$oFCKeditor = new Common_Plugin_Fckeditor('content') ;
//来载入library 目录下的多级目录类文件

CategoryControler.php
require('CommonController.php');//得意于 index.php 的set_include_path
class Admin_CategoryController extends Admin_CommonController
{
var $category;
function init() {
parent::init();
$this->category = new Cate();

//Zend_Loader::loadClass('Common_Plugin_Fckeditor');
////$oFCKeditor = new Common_Plugin_Fckeditor('content') ;
//因为Cate.php是在models目录下,所以不必像上面那样loadclass来实例化
}

=======================初始化寄存器 和view
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();
$registry = Zend_Registry::getInstance();
$config = new Zend_Config_Ini('./app/config/config.ini',null,true);

/*****************confing.ini 数组格式
[general]
db.adapter = PDO_MYSQL
db.host = localhost
db.username = root
db.password = 123456
db.dbname = zfblog
db.charset = utf8
db.prefix = zf_

[site]
st.domain = http://localhost/zf-blog
st.appdir = /zf-blog
st.sitename = pconline
st.keywords = ZFblog,Zend Framework开源blog,Zend Framework开源项目,ZF教程,Zend Framework最新教程,ZF项目源码下载,Zend 
Framework项目源码下载
st.description = ZFblog,Zend Framework开源blog,Zend Framework开源项目,ZF教程,Zend_Framework最新教程,ZF项目源码下
载,Zend_Framework项目源码下载
st.version = 1.1
st.theme = g7_v5
*/
Zend_Registry::set('config',$config);

$view= new Zend_View();
Zend_Registry::set('theme', $config->site->st->theme);
$view->setScriptPath('./app/views/scripts/'.$config->site->st->theme.'/'); //模板文件位置
$view->setHelperPath('./app/views/helpers/','My_View_Helper');
$registry['view'] = $view;


//邮件配置
Zend_Registry::set('smtp',$config->mail->ml->server);
Zend_Registry::set('username',$config->mail->ml->username);
Zend_Registry::set('password',$config->mail->ml->password);
//*****************Controller.php文件调用:$this->view->keywords = $this->registry['keywords'];



==========================控制器
/*****************控制器一定要指定addModuleDirectory,这样来实现
http://localhost/zf-blog/admin/article/add自动到
./app/modules/admin/controllers/ArticleController.php 方法addaction()

http://localhost/zf-blog/link
自动找到
./app/modules/default/controllers/linkController.php 方法indexaction()
*/
s
$frontController = Zend_Controller_Front::getInstance();
$frontController->setBaseUrl($config->site->st->appdir) //设置基本路径
->setParam('noViewRenderer', true) //不采用官方view
->addModuleDirectory('./app/modules')
->setParam('useDefaultControllerAlways', true)
    ->setParam('noErrorHandler', true)
->registerPlugin(new Common_Plugin_MyAuth($auth, $acl))
->registerPlugin(new Zend_Controller_Plugin_ErrorHandler())
->throwExceptions(true) //false:关闭错误信息
->dispatch();




模板文件---嵌入php代码
<?php foreach ($this->paginator as $lv): ?>
<tr>
<td width="15%"><a class="editlink" href="#" title="点击编辑" alt="<?=$lv['id']?>|<?=$lv['name']?>|<?=$lv['url']?>|<?=$lv['logo']?>|<?=$lv['title']?>"><?=$this->escape($lv['name']); ?></a></td>
<td width="50%"><?=$this->escape($lv['title']); ?></td>
<td width="12%"><?=$this->escape($lv['typename']); ?></td>
<td width="8%"><?=$this->escape($lv['orderNo']); ?></td>
<td width="10%"><?=$this->escape($lv['isApp']); ?></td>
<td width="5%">
<a href="<?=$this->url(array('module'=>'admin','controller'=>'link','action'=>'delete','id'=>$lv['id']),null,true);?>" title="delete"><img src="<?=$this->tplpath;?>images/error.gif" border="0" /></a>
<?php
if($this->escape($lv['isApp'])=='未通过'){
?>
<a href="<?=$this->url(array('module'=>'admin','controller'=>'link','action'=>'app','id'=>$lv['id']),null,true);?>" title="delete"><img src="<?=$this->tplpath;?>images/correct.gif" border="0" /></a>
<?php
}
?>
</td>
</tr>
<?php endforeach;?>



=============================fck
<?=$this->editor;?>

* fck编辑器
*
* @param string $content
*/
function fckAction($content='')
{
//加载FCK类
Zend_Loader::loadClass('Common_Plugin_Fckeditor');

//实例化这个类
$oFCKeditor = new Common_Plugin_Fckeditor('content') ;

//这里是您放置FCK文件的路径.
$oFCKeditor->BasePath = $this->view->domain."/public/fckeditor/";

//FCK皮肤
$oFCKeditor->Config['SkinPath'] =
$this->view->domain.'/public/fckeditor/editor/skins/silver/' ;
$oFCKeditor->Width = '100%';
$oFCKeditor->Height = '600';
$oFCKeditor->Value = $content;
$this->view->editor = $oFCKeditor->CreateHtml();
}

===========================分页zend/view/helper/ paginationControl.php


<?=$this->paginationControl($this->paginator,'Elastic','page.php');?>
//page.php模板文件
//$this->paginationControl=====
zend/view/helper/ paginationControl.php

$link_arr = array();
foreach ($array as $key=>$value) {
$link_arr[$key]['id'] = $value['id'];
$link_arr[$key]['name'] = $value['name'];
$link_arr[$key]['url'] = $value['url'];
$link_arr[$key]['logo'] = $value['logo'];
$link_arr[$key]['title'] = $value['title'];
$link_arr[$key]['typename'] = $cate[$value['type']];
$link_arr[$key]['orderNo'] = $value['orderNo'];
$link_arr[$key]['isApp'] = $value['isApp']?'通过':'未通过';
}

$paginator = Zend_Paginator::factory($link_arr);




=======================================模板写法

<?php if (count($this->paginator)): ?>
<?php endif; ?>

<?php foreach ($this->paginator as $lv): ?>

<?php endforeach;?>




===============================zend cache
前台首页indexcontroller.php

if(!$array = $this->cache->load('indexlistBlog')) {
$array = $this->blog->listBlog();
$this->cache->save($array, 'indexlistBlog');
}
//取出链接类别
if(!$linktype = $this->cache->load('listLinktype')) {
$linktype = $this->linktype->listLinktype();
$this->cache->save($linktype, 'listLinktype');
}

//取出链接
if(!$linkarr = $this->cache->load('listLink')) {
$linkarr = $this->link->listlink();
$this->cache->save($linkarr, 'listLink');
}





Modules/default/controllers/CommonController.php  Zend_Cache_Core 对象
class CommonController extends Zend_Controller_Action
{
var $cache;
function init() {
// 缓存配置
$frontendOptions = array(
'lifeTime' => 120, // 两分钟的缓存生命期
'automatic_serialization' => true
);

$backendOptions = array(
'cache_dir' => "data/cache/" // 放缓存文件的目录
);

// 取得一个Zend_Cache_Core 对象
$this->cache = Zend_Cache::factory('Core','File',$frontendOptions,$backendOptions);
}



==========================db
入口:

Zend_Registry::set('config',$config);
$dbAdapter = Zend_Db::factory($config->general->db->adapter,$config->general->db->toArray());
$dbAdapter->query("SET NAMES {$config->general->db->charset}");
Zend_Db_Table::setDefaultAdapter($dbAdapter);
Zend_Registry::set('dbAdapter',$dbAdapter);
Zend_Registry::set('dbprefix',$config->general->db->prefix); //写到寄存器方便其他地方调用



Models 下所有类文件blog.php link.php  extends Common

<?php
class Common extends Zend_Db_Table
{
public function __construct()
  {
$dbprefix = Zend_Registry::get('dbprefix');
$this->_name = $dbprefix.$this->_name;
parent::__construct();
  }
}


====================== .htaccess
RewriteEngine on
RewriteRule !\.(js|ico|txt|gif|jpg|png|css|html|xml)$ index.php

php_flag magic_quotes_gpc off
php_flag register_globals off


=======================目录结构




  • 大小: 224.6 KB
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics