保定网站建设,网站推广,网站优化服务,保定专业的PHP网站制作机构!

让CakePHP element方法可以定义路径

发表于:2010年06月30日 02时  作者:dx_andy

用CakePHP做了个小项目,项目中支持更换模板功能,所以这就要求每套模板都要有一个自己的文件夹,假设为“aaa”。aaa文件夹中存储aaa模板的所有action的View文件,还有就是Elements文件。

这里只说一个Elements文件,aaa模板的Elements统一放在aaa/elements文件中。这时在View层就不能单纯的利用$this->element(‘elementName’)方法来调用Elements了,因为路径不对。。。

时间比较紧,也没有找到更好的方法,所以就修改了一下。cake/libs/view/view.php文件。

在第329行后添加:

if (isset($params['paths'])) array_unshift($paths, $params['paths']);

这时您的CakePHP就支持Elements定义路径了。使用方法:

$this->element(‘elementName’, array(‘paths’ => ELEMENT_PATH));

CakePHP Nginx服务器Rewrite规则

发表于:2010年05月18日 00时  作者:dx_andy

有几个CakePHP项目部署在了Centos+Nginx服务器上,才知道原来Nginx的Rewrite规则并不是由Apache的.htaccess来实现的。Nginx有自己的Rewrite规则。

确实想体验一下Nginx服务器的,所以就花心思转换了一下。

CakePHP原有.Htaccess文件代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

CakePHP去除Controller和Action完美优化Url地址

发表于:2009年09月29日 14时  作者:dx_andy

近来好像写有关CakePHP的文章比较多一些。搞的多了,难免会虚伪一下。这次刚写了一个小网站,顺便把新研究出来的有关CakePHP的知识共享一下。

这次程序方面没做太多的研究,主要考虑了一下网站优化,更确切的说是有关CakePHP Url地址的优化。

参考网站:中药材百科 – http://www.yaocai123.com

设置Url的文件为:app\config\routes.php

首页就不多说了,没有更改routes.php文件。

由栏目层说起:

中药材大全http://www.yaocai123.com/zhongyao/

中药种植http://www.yaocai123.com/zhongzhi/

中药处方http://www.yaocai123.com/chufang/

这三个地址,如果是用常规的CakePHP来写的话为三个Controller。分别为:zhongyao, zhongzhi, chufang。而现在这个项目只用到了一个Controller – MedicineController。在Routes.php中只需要要Controller和Action的名字隐藏掉,而貌似Controller的zhongyao只是MedicineController Index动作的参数而已。

CakePHP Cache缓存的使用方法

发表于:2009年09月26日 00时  作者:dx_andy

注:测试的CakePHP版本为当前最新的稳定版本-CakePHP 1.2.5。

本来想将网站的首页Cache一下。结果按照CakePHP官方文档测试了半天也没能成功。研究代码也一无所获。所以就放弃了。将几个对MySQL数据库操作大的Element缓存了一下。

CakePHP Element Cache缓存使用方法(View层代码,Element层也可以使用):

$this->element(‘ElementName’, array(‘cache’ => ‘+1 Hours’));

将ElementName缓存1小时。缓存文件会以文本的方式存入App\tmp\cache\views\中。

CakePHP findAll获取随机数据记录

发表于:2009年09月24日 01时  作者:dx_andy

为了使搜索引擎每天都认为我的网站更新了一次。特意为网站首页加了一个缓存,缓存时间为一天。提取一条新闻,并摘取300个左右的字显示在主页某一块中。我管它叫做(随机消息)

用Sql语句可以直接写如下语句来获取随机记录:

SELECT * FROM table_name ORDER BY rand() LIMIT 5;

CakePHP获取随机记录要变通一下,研究了一下CakePHP生成SQL语句才搞明白。原来只需要这样:

$this->{ModelName}->findAll(
null,
array(‘ModelName.id’, ‘rand() as oo‘) ,
array(‘oo’),
5
);

如此而已…

CakePHP DISTINCT 查询唯一记录

发表于:2009年05月21日 10时  作者:dx_andy

用CakePHP一般都是进行一些普通的查询操作,当涉及到唯一性查询的时候着时记我费了一些头脑,找了很多资料都没能解决,国内更是一些有价值的资料没有。还是在国外的网站上找到了些蛛丝马迹。

假如项目中用的是findAll查询,若要查询唯一记录可以这样写:

$this->Model->findAll(null, ‘DISTINCT Model.*’);

若项目中用了CakePHP1.2的paginate组件,查询唯一记录可以这样写:

$this->paginate['fields'] = array(‘DISTINCT Model.*’);

$this->set(‘contents’, $this->paginate());

Godaddy主机空间CakePHP .htaccess编写方法

发表于:2009年04月13日 21时  作者:dx_andy

CakePHP的框架默认的.htaccess不能完美支持Godaddy主机空间。也不是Godaddy空间的Htaccess有问题,而是我们没有写好.htaccess。您可以参考如下代码来配置您的CakePHP项目

CAKEPHP .htaccess不重写某子目录或文件

发表于:2009年04月13日 21时  作者:dx_andy

CakePHP框架会把urls重写对自己的友好的urls,适合MVC项目的实施。假如有某一目录不需要CakePHP重写,假如没有重新定义.htaccess将无法访问此目录。假如配置环境为php fastCGI可能会出现:No input file specified.错误。

这时可以自己为.htaccess加一段代码,告诉服务器不转发此子目录即可,这时需要注意的是,此子目录的名称不能为CakePHP Controller的名称(name值)。

修改网站主目录中.htaccess如下(本人使用的CakePHP版本为,最新的CakePHP稳定版:1.2.2.8120 Stable):

CakePHP不重写某目录.htaccess

# 不重写subdirectory目录
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/subdirectory/(.*)$
RewriteRule ^.*$ - [L]
</IfModule>

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule    ^$ app/webroot/    [L]
RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

很多站长会将自己的网站加上一个Google网站管理员工具,假如用CakePHP开发的项目,也需要对主目录的.htaccess加以修改。代码如下:

CakePHP requestAction使用方法

发表于:2009年04月01日 17时  作者:dx_andy

CakePHP中View层有一个方法为:$this->requestAction(url)。望文生意,此方法可以解释为:请求Action。使用此方法可以大大的减少项目中的冗余代码。

比如我们有一个商品管理的Controller为StoreController,一个文章管理的Controller为PostController。以前当文章中需要调用最新的商品时我们可能会这样写:

PostController 代码如下

class PostController extends AppController {
var $name = ‘Post’;
var $uses = array(‘Post’, ‘Store’);
var $layout = ”;

var $paginate = array(
‘limit’ => 10,
‘order’ => array(‘Post.created DESC’),
);

function index() {
$this->set(‘posts’, $this->paginate());

// 调用最新的商品
$this->set(‘newStores’,
$this->Store->findAll(
array(‘Store.display’ => 1),
null,
array(‘Store.created DESC’),
10
)
);
}
}

这样项目中的冗余代码会变的很多,不利于管理。合理的利用requestAction是最明智的选择

使用requestAction后$uses可以不用加载Model: Store,认真看一下代码就明白了。

CakePHP 1.2.2.8120稳定版已发布

发表于:2009年03月28日 14时  作者:dx_andy

备注:报导的晚了些,CakePHP 1.2.2.8120于2009.03.19日发布。

此版本修正了很多严重的错误,比如Paginator的链接问题,官方建议升级到最新版本。

站内报导:http://www.phplamp.org/tag/cakephp/

官方新闻:http://bakery.cakephp.org/articles/view/release-1-2-2-8120

下载地址:http://cakeforge.org/frs/?group_id=23&release_id=441

1/212