中文

芋头的领域 » CakePHP

欢迎深入狼穴···

Thinkly Blog » Cakephp

CakePHP - Jack和David的蛋糕!

Cakephp结合Yaml文件来构建高效网站

一点心得顺便记录一下。

Cakephp本身提供了相当好而且相当简便的缓存和优化技术,通过Element技术可以缓存某个部分的代码,但是有了Yaml文件的帮助,可以说是如虎添翼!

Yaml文件是一种文本的易读的文件格式。

我们可以使用Yaml文件为我们的Element提供必要的数据支持,然后,通过我们的后台代码生成需要的Yaml文件,这使得Yaml文件成为了一种临时缓存文件。

这有几个好处:

1. 易解析,可以借助Pear的Yaml组件实现从PHP数据到Yaml数据的相互转换

2. 高效,Yaml适用于实现数据量不是很大,但是需要频繁操作数据库的Element,这使得某些Element操作数据库的几率为0,我们所要做的就是在后台生成它。

3. 便于修改,Yaml文件的最大优势就是它的易读性,我们甚至可以将网站的配置文件全部放在Yaml文件中,修改简单,我们只需要打开记事本,简单的缩进就完成了,相比XML和其他格式化符号文件,可读性非常好。

总结一下:

Yaml非常适合用在频繁操作数据库但是数据量不大的模块单元中,效率将会得到很大的提升。

余心烦错 » cakephp

穷居而野外,升高而望远

[转载]在Cakephp中使用i18n本地化程序,并使用poedit编辑语言文件

本文来自苏南的博客, 网址:http://newsn.net

Cakephp的很强大的i18n功能就是用来实现本地化和国际化的。他通过使用语言配置文件使得程序能够很好的适应变化进行本地化。通过新建 locale/chi/LC_MESSAGES/default.po文件,并指定语言选项为“chi”实现。本文中说的就是如何实现这个本地化过程,当然本文中的poedit并不是必须的,但是他可以使得工作效率更高。

 

一、关于i18n和L10n
这2个东东其实头一次我看到的时候也是一头雾水,但是经过百度的一通搜索,得出的结论就是,不管是几个n,最终的目的就是实现程序本地化就好了,说白了,就是由很多的语言配置文件,反正我是这么理解的。大家也可以去看看,http://baike.baidu.com/view/372835.htm 这里有很详细的说明。

cakephp controller中设置viewVars时的陷阱

要从controller传递变量到view,需要使用set method。基本的用法是

$this->set('categories',$categories);

更顺手的写法是

CakePHP 实例教程: Categories Acts as Tree

Tree是CakePHP 1.2的核心Behaviors之一,可以用来轻易的实现无限极分类,并呈现树状列表。

图片来源:Tree traversa,WIKIPEDIA

通过GenerateData生成Cakephp项目的模拟数据!

      项目进行中,总是离不开数据库,那么必然就要有数据!当前,我们的项目进行中要是有更新(程序以及schema.sql和测试数据的更新)见下图:

image

      然后,我们会通过运行cake schema run create 或者 cake schema run update 来更新数据库结构,然后通过命令:zcat APP/config/sql/sample_data.sql.gz | mysql -u root -p [project_db] 将上图的模拟数据包中的数据填入到数据库中。

      以上就是我们在项目开发过程中,经常进行的操作:通过SVN更新项目,更新schema,重新填入模拟的数据。那么我们通过什么来生成成千上万条的数据呢?是的,通过GenerateData

Cakephp1.2中JQuery和JSON的使用

文章原文来自于 Eelco Wiersma 的文章 《Using JSON in CakePHP 1.2》

参考文章

Using JSON in CakePHP 1.2

介绍 JSON

JQuery API 1.3

简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。Cakephp1.2提供了对JSON的内置支持,主要体现在两个特殊的方法:

Router::parseExtensions() JavascriptHelper::object()

目标

我们要通过JQuery的$.getJSON方法,获取Cakephp服务端的JSON数据,URL可能是这个样子

http://localhost/posts/index.json

如何完成?

Cakephp中使用Captcha实现更加安全的验证码

Captcha官方

http://www.captcha.ru/en/

Captcha下载

http://www.captcha.ru/en/kcaptcha/

本地下载1.2.6版本

使用Captcha可以实现安全的验证码功能,Captcha提供了多种风格和样式的风格比如

image

使用方法超级简单

getImage.php

Cakephp自定义的find方法,实现类似find(’first’),find(’list’)类似的功能

感谢 Yoophi 提供的参考文章

$entry->title(’Pagination with custom find types in CakePHP’);

大概的中心思路是这样:

通过在模型中重载find方法,实现类似于find(’first’),find(’list’)的功能

app_model.php

Email Routing Problem with Contact Form on Planet CakePHP

Sorry to everyone who sent me emails between Jan 2009 to May 2009 and have not received any replies. I just realised that the emails got bounced due to my web host routing them to the local MX server instead of Google's mail servers. I am sure it used to be working but oh well. So please don't think I can't be bothered to reply to emails. Those who have yet to get any replies, feel free to drop me another email via the contact page. Thanks!

在windows vista Home Basic 安装easyeclipse无法正常启动的解决

      机器的信息如下图所示:

image

      出现的错误信息如下图所示:

      An error has occurred. See the log file …\workspace\.metadata\.logs

image

      诚如下图所示,在vista系统中,默认”Program Files”目录在安全模式下,只需要将easyeclipse安装到其他目录即可!

开展CakePHP项目的一些总结!

      现在的项目对以前已经完成的部分工作进行了修改!这也可以让自己将cakephp项目进行的一些东西记录下来,与大家分享!

      网站策划,设计,商定程序开发中的文件组织形式等等都已经完成,在此不便多少,也说不清楚!就是记录下程序员怎样将那些HTML文件变成.CTP文件,并实现其功能的工作流程。

      项目(项目策划已经完成)已经开始,设计人员出HTML文件!然后交由cakephp程序员按照商定的文件组织形式将HTML文件改写成.ctp文件。将页面按功能划分为不同的区域,并根据功能的使用频度,来决定是否将其用element的方式来实现其功能!总之,把一个个页面显示的内容,想象成由一个个页面元素拼合而成就可以了!

      当把HTML页面拆分成.ctp文件后,就是使用cakephp的模型(model),控制器(controller)来实现其各个页面元素的业务逻辑了!

      对完成的工作,进行测试,修改,提交!直至项目完成!在实现其业务流程和业务逻辑的工作中,大部分工作都放在了model中,希望大家能注意下!尽量将处理业务逻辑的代码放在模型中!

Cakephp中使用join语句的使用

感谢台湾PHP联盟的 kiang 的Help

Cakephp的关联是写在模型里面的,有时候我们需要在控制器中Join一些其他的表,执行一些复杂的查询,那么我们可以这样写

$data = $this->User->find('all',array(
    'conditions' => array(
        'OR' => array(
            'User.name LIKE' => ''%keyword%'',
            'Note.subject LIKE' => ''%keyword%'',
        ),
    ),
    'joins' => array(
        array(
            'table' => 'notes',
            'alias' => 'Note',
            'type' => 'LEFT',
            'conditions'=> array('User.id = Note.user_id'),
        ),
    )
));

参考文章

台湾PHP联盟[Cakephp查询关联表的方法总结]

Thinkly TAG[复杂查询]

Cakephp中出现的schema问题!

      东西越学越深入!可惜,David同学在某些问题出现时,还是一头雾水!像昨天,我就遇到了在Cakephp中使用”cake schema run update”就出现了问题!老提示我运行run update有错误!

      最后在Jack同学的帮助下,解决了问题!原来schema.php文件要是有增加信息或者把以前的信息删除,想通过cake schema run update更新的话,需要先执行“cake schema run create”,然后再执行导入数据的操作!最后执行一次“cake schema run update”即可!

      这只是我在开发过程遇到问题的解决办法!可能不能解决大家遇到的类似问题,如果大家也遇到了schema的问题,欢迎大家在回复中与我们交流,分享解决问题的方法!

CakePHP error “Cannot unset string offsets…”

      刚刚进行了一小部分功能的开发!在开发过程中为了实现checkbox组,出现了“Cannot unset string offsets in /usr/share/cake/cake/libs/view/helpers/form.php on line 1863”的错误!

      其错误是因为其错误代码:

<?= $form->checkbox('noteid',$note['ReceivedNote']['id']) ?>

其正确的书写代码为:

<?= $form->checkbox('noteid',array('value'=>$note['ReceivedNote']['id'])) ?>

另出现了:

Notice (8): Undefined index:  is_read [APP/views/themed/design/notes/trash.ctp, line 38]

其原因为:在控制代码,字段列表中没有‘is_read’字段!应该加上,例如:

'ReceivedNote.receive_user_id',

另外,在视图(view)中,使用Auth的值,其方式为:

<? $session->read('Auth.User.id') ?>

        记录,以便以后查找!

CakePHP in French

Added a new French section as suggested by Pierre MARTIN! Thanks to him, the section starts off with 4 good blogs on CakePHP in French.

For the rest of you, feel free to submit any feed which I may have missed. Enjoy reading!

[cakephp]在cakephp的paginate方法前bindmodel的方法

在使用cakephp的分页方法paginate之前如果想使用bindmodel方法绑定model的时候,需要给bindmodel第二个参数设定为false,使bindmodel产生持久绑定,否则在paginate时bind的model会丢失。

$this->Forum->bindModel(
array(’hasMany’ => array(
‘ForumPrivilege’ => array(
‘className’ => ‘ForumPrivilege’,
‘foreignKey’ => ‘forum_id’,
‘dependent’  => true
),
)
),false
);

Items in Feed Now Link Directly to the Original Article

After the change to use FeedAPI instead of Aggregator Drupal module, feed items have been linking to Planet CakePHP instead of the original article and the author is always me (Derick Ng). Some subscribers are rather turned off by having to click multiple times before arriving at the original article and having no idea who the original author was. I have been putting this off for quite some time and finally found time to dig through the codes. Do let me know if there are any other feedback. Cheers!

Syndicate content