2009-05-27

Firefox 和 IE 中的键盘事件

类归于: JavaScript — 标签:zhuozi @ 13:23

今天,在测试项目中的form表单的时候,发现了一些被遗忘的细节问题,邮政编码和电话没有被验证。

对于,symfony的form机制,验证起来很方便,利用这个框架不用像以前自己在前端写一大堆的js进行判断。

可是,毕竟客户的需求总是奇怪的,在新项目中,有一个地方没有办法直接应用symfony中的fomr机制,没有办法偷懒只用js了。
if(window.event) { //IE键盘监控
if(e.keyCode<48   ||   e.keyCode>57||e.keyCode==8) {
return false;
} else {
return true;
}
} else if(e.which) { // Firefox 键盘监控
if((e.which>47)   &&   (e.which<58)||(e.which==8)) {
return true;
} else {
return false;
}
}

html代码
onkeypress="javascript:return key(event)

对于前端程序(css、js)来说,两大浏览器的兼容问题很是麻烦。
对于键盘事件,两个浏览器有着不同的理解。为了防止遗忘,把上面转载的程序在此备份,以便查找。

2009-05-25

怎么在app中构造其它app的链接(二)

类归于: symfony — 标签:zhuozi @ 17:15

写一个class

// apps/backend/config/backendConfiguration.class.php
class backendConfiguration extends sfApplicationConfiguration
{
protected $frontendRouting = null;
public function generateFrontendUrl($name, $parameters = array())
{
return 'http://frontend.example.com'.$this->getFrontendRouting()
->generate($name, $parameters);
}
public function getFrontendRouting()
{
if (!$this->frontendRouting)
{
$this->frontendRouting = new sfPatternRouting(new sfEventDispatcher());
$config = new sfRoutingConfigHandler();
$routes = $config->evaluate(array(sfConfig::get('sf_apps_dir').
'/frontend/config/routing.yml'));
$this->frontendRouting->setRoutes($routes);
}
return $this->frontendRouting;
}
}

在action中可以用下面的动作,就可以跳到其它的app中的动作,下面的‘hello’,是frontend/config配置文件routing中的一条路由规则

$this->redirect($this->getContext()->getConfiguration()->
generateFrontendUrl('hello', array('name' => 'Bar')));


function link_to_frontend($name, $parameters)
{
return sfProjectConfiguration::getActive()->
generateFrontendUrl($name, $parameters);
}

2009-05-23

怎么在app中构造其它app的链接(一)

类归于: CentOS/Redhat, symfony — 标签:zhuozi @ 16:44

最近开发的一个项目要求我们要在一个app中构造另一个app中的链接并使用。

我们现在有一个管理平台,app名字   admin, 我们还有一个PC展示平台 app名字 pc

我们知道使用symfony中链接辅助函数  url_for()  可以生成我们想要的URL,可是,默认的情况下,这种生成出来的URL是显示前端控制器名字的(控制器名字根据所在开发模式的不同,显示的也不一样)。

比如: 我们在admin这个平台使用  url_for(’member/create’)    生成的url是   admin_dev.php/member/create, 很显然这种URL不是我们所期望的,我们不希望还要去解析判断。

在apps/myapps/settings.yml 中有一项设置  no_script_name: off  这项是控制时候在URL中显示前端控制器的名字。

当我们把它开启的时候,再使用url_for(’member/create’)的时候,就会生成  member/create, 这样就会得到没有前端控制器名字的URL。

其实,最理想的状态是,我在使用某一个链接辅助函数的时候,直接就可以获得某一个平台的URL,比如在admin的平台返回给我一个  http://www.foolbirds.com/pc_dev.php/article/show  这样的链接。 可是找了一下下午也没有找到一个,或许需要自己写一个构造这样的URL来满足项目的需求了。

2009-05-11

如何使用swift发送邮件

类归于: symfony — 标签:, kthiz2006 @ 16:24

首先在项目的lib下建立vendor的文件夹
然后
svn checkout http://swiftmailer.svn.sourceforge.net/svnroot/swiftmailer/tags/php5/3.3.3/lib/ swift
接着把svn剪出的文件夹里的文件放到vendor目录下.
这样就可以使用swift发送邮件了
下面是一个简单的例子

<?php
try
{
// Create the mailer and message objects
$mailer = new Swift(new Swift_Connection_NativeMail());
$message = new Swift_Message('Mail\'s subject', $mailBody, 'text/html');
// Send
$mailer->send($message, $mailTo, $mailFrom);
$mailer->disconnect();
}
catch (Exception $e)
{
$mailer->disconnect();
// handle errors here
}
?>

2009-05-06

symfony1.2下的命令行程序(batch)

类归于: symfony — 标签:, , maker @ 15:09

这里说的命令行程序就是在命令行(或者叫shell)下执行的程序, 因为我们多数时间是用浏览器来访问symfony程序的, 而有些时候, 我们也需要在shell下来执行我们的程序, 比如定时任务.

在网上一番搜索并没有找到相关内容, 在1.0的<The Definitive Guide To symfony>里提到了一个init-batch的命令, 但是这个命令在1.2中已经不存在了.

后来终于在symfony命令中发现了generate:task命令, 这个命令的帮助文档是这样写的.

语法:
symfony generate:task [--dir="..."] [--use-database="..."] [--brief-description="..."] task_name

参数:
task_name The task name (can contain namespace)

选项:
–dir The directory to create the task in (default: lib/task)
–use-database Whether the task needs model initialization to access database (default: propel)
–brief-description A brief task description (appears in task list)

描述:
The generate:task creates a new sfTask class based on the name passed as
argument:

./symfony generate:task namespace:name

The namespaceNameTask.class.php skeleton task is created under the lib/task/
directory. Note that the namespace is optional.

If you want to create the file in another directory (relative to the project
root folder), pass it in the –dir option. This directory will be created
if it does not already exist.

./symfony generate:task namespace:name –dir=plugins/myPlugin/lib/task

If you want the task to default to a connection other than propel, provide
the name of this connection with the –use-database option:

./symfony generate:task namespace:name –use-database=main

The –use-database option can also be used to disable database
initialization in the generated task:

./symfony generate:task namespace:name –use-database=false

You can also specify a description:

./symfony generate:task namespace:name –brief-description=”Does interesting things”

简单来说, 这个命令是用来创建命令行任务的, 我们来做一个简单的测试.

./symfony generate:task test

这样我们就生成了test命令, 我们可以象下面这样使用test命令

./symfony test

虽然什么也没有输出, 但是没有报错说明命令存在. 如果要给命令添加动作需要修改 /lib/task/testTask.class.php

我们写一个简单的例子

// add your code here
echo "it runing\n";
$users = UserPeer::doSelect(new Criteria);
echo count($users);

这段代码执行了数据库操作, 这说明在task中类都是自动在载的, 详细阅读testTask.class.php中的代码我们会发现task还支持很多功能, 设置参数, 命名空间等等.

(未完待续)

WordPress 所驱动