日期间天数的计算

$a=date("y-m-d",time());  
$b=$resultarray['date'];  
$c=strtotime($a)-strtotime($b);  
$c=ceil($c/(60*60*24));

—————————– 2009-07-27 17:33:04 ——————————

一条记录,Copy为另一条记录

$mNewObj    = new DbMccAccount();
$mObj    = $mccAccount['mobj'];
$mObj->setId(null);
$mObj->setSemUserId($uid);
$mObj->copyInto($mNewObj);
$mNewObj->save();
$mid    = $mNewObj->getId();
$aNewObj    = new DbAccount();
$aObj    = $mccAccount['aobj'];
$aObj->setId(”);
$aObj->setSemMccAccountId($mid);
$aObj->copyInto($aNewObj);
$aNewObj->save();

——————————————————————————–
同一个字段的两个条件书写方法:

$c1= $criteria_task->getNewCriterion(SpotTaskPeer::SPOT_PLAN_DATE, $start_date, Criteria::GREATER_EQUAL);
$c2= $criteria_task->getNewCriterion(SpotTaskPeer::SPOT_PLAN_DATE, $end_date, Criteria::LESS_EQUAL);
$c1->addAnd($c2);

—————————– 2009-07-15 09:10:14 ——————————

$c = new Criteria();
$c->add(AuthorPeer::LAST_NAME, array("Tolstoy", "Dostoevsky", "Bakhtin"), Criteria::IN);

$authors = AuthorPeer::doSelect($c);

—————————– 2009-07-14 16:30:37 ——————————

// Find all authors with first name "Leo" OR last name of
// "Tolstoy", "Dostoevsky", or "Bakhtin"
$c = new Criteria();
$cton1 = $c->getNewCriterion(AuthorPeer::FIRST_NAME, "Leo");
$cton2 = $c->getNewCriterion(AuthorPeer::LAST_NAME,
                      array("Tolstoy", "Dostoevsky", "Bakhtin"), Criteria::IN);
// combine them
$cton1->addOr($cton2);
// add to Criteria
$c->add($cton1);

—————————– 2009-07-09 11:44:52 ——————————
模板从配置文件中读取值:

<!– apps/frontend/modules/job/indexSuccess.php –>
<?php foreach ($category->getActiveJobs(sfConfig::get(‘app_max_jobs_on_homepage’)) as $i => $job): ?>

—————————– 2009-07-07 10:08:10 ——————————
模版中 设置 获得 当前用户的语言
<?php use_helper(‘Number’) ?>
<?php $sf_user->setCulture(‘en_US’) ?>
<?php $sf_user->getCulture() ?>
你无需明确地将culture值传递给辅助函数。辅助函数会在当前的会话对象中
自动找到culture值。例13-4中列出的辅助函数在输出数据时都会考虑用户
的culture值。

—————————– 2009-07-06 16:23:24 ——————————
删除记录
Example 1: Delete using primary key
<?php

BookPeer::doDelete(1);
Example 2: Delete using instantiated object
<?php

$book = BookPeer::retrieveByPK(1);
BookPeer::doDelete($book);

$c    = new Criteria();
$c->add(JobeetJobPeer::TYPE, ‘part-time’);
$jobeet_jobs    = JobeetJobPeer::doDelete($c);

—————————– 2009-07-06 10:45:37 ——————————
select 列表书写方式:
1.select_tag  +   objects_for_select
<?php echo select_tag(‘advertiser_exist’, objects_for_select($advertisers_list, ‘getId’, ‘getAdvertiserName’)?>

2. select_tag + options_for_select
<?php echo select_tag(‘channel’, options_for_select(array()) ?>

—————————– 2009-07-06 10:15:23 ——————————

表单动作,位于同一个动作脚本中:
// mymodule/actions/actions.class.php
public function executeEditAuthor()
{
  if ($this->getRequest()->getMethod() != sfRequest::POST)
  {
    // 显示表单
    return sfView::SUCCESS;
  }
  else
  {
    // 对提交的表单加以处理
    $name = $this->getRequestParameter(‘name’);
    …
    $this->redirect(‘mymodule/anotheraction’);
  }
}
这段代码要能正常工作,表单处理和表单显示必须在同一个动作中。
// mymodule/templates/editAuthorSuccess.php

—————————– 2009-06-25 10:33:41 ——————————
不显示到模版中的动作
//    return sfView::NONE;

—————————– 2009-06-25 09:56:29 ——————————
Vim中u是撤销当前操作,U是恢复刚才撤销的操作。

—————————– 2009-06-25 09:44:55 ——————————
PHP
各个方法中通用的变量需要在Class中预定义。
引用的时候使用$this指针。

—————————– 2009-06-25 09:44:25 ——————————
General DB API Changes ?

Of course, any code in your application that was using the Creole API (e.g. returned from Propel::getConnection()) will now need to use the PDO API.

See http://www.php.net/pdo for more information on the PDO API. Generally, the PDO API is quite similar to Creole’s, so updates are generally quite easy.

For example:

Propel 1.2 + Creole code:

<?php

$con = Propel::getConnection(SomeTablePeer::DATABASE_NAME);
$stmt = $con->prepareStatement("SELECT * FROM some_table WHERE name = ?");
$stmt->setString(1, $name);
$rs = $stmt->executeQuery();
while($rs->next()) {
   print "Name: " . $rs->getString("name") . "\n";
}

完整版
        $con = Propel::getConnection();
        $query = ’select %s.*, %s.action_name from %s, %s where %s=%s and %s=?’;
        $query = sprintf($query,
          DbAuthorityGradeRelActionPeer::TABLE_NAME,
          DbAuthorityActionPeer::TABLE_NAME,
          DbAuthorityGradeRelActionPeer::TABLE_NAME,
          DbAuthorityActionPeer::TABLE_NAME,
          DbAuthorityGradeRelActionPeer::SEM_AUTHORITY_ACTION_ID,
          DbAuthorityActionPeer::ID,
          DbAuthorityGradeRelActionPeer::SEM_AUTHORITY_GRADE_ID
        );

        $stmt = $con->prepareStatement($query);
        $stmt->setInt(1,$aid);
        $rs = $stmt->executeQuery();
        return $rs;

Propel 1.3 + PDO code:

<?php

$con = Propel::getConnection(SomeTablePeer::DATABASE_NAME);
$stmt = $con->prepare("SELECT * FROM some_table WHERE name = ?");
$stmt->bindValue(1, $name);
$stmt->execute();
while($row = $stmt->fetch()) {
   print "Name: " . $row['name'] . "\n";
}

http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Upgrading

example:
        $con    = Propel::getConnection();
        $query    = "select %s.*,%s.* from %s left join %s on %s=%s ";
        $query    .= "where %s=? and %s>? and %s<?";
        $query    = sprintf($query,
          MediaPlanPeer::TABLE_NAME,
          AdvertisersPeer::TABLE_NAME,
          MediaPlanPeer::TABLE_NAME,
          AdvertisersPeer::TABLE_NAME,
          MediaPlanPeer::ADVERTISER_ID,
          AdvertisersPeer::ID
          );
        $stmt    = $con->prepare($query);
        $stmt->execute();
        $hell    = $stmt;
//        $this->media_plannings    = $stmt->fetch();

        $this->media_plannings    = MediaPlanPeer::populateObjects($stmt);

while($row = $hell->fetch()) {
   print "Name: " . $row['media_plan_name'] . "<br />";
}

—————————– 2009-06-24 09:07:48 ——————————
i18n下面的文件名,不能带有下划线。

—————————– 2009-06-01 09:16:20 ——————————

表单辅助函数

form_tag()
————————————————

  <?php echo form_tag(‘module/action’) ?>
    => <form method="post" action="module/action">

  <?php echo form_tag(‘module/action’, ‘method=get multipart=true class=simpleForm’) ?>
    => <form method="get" action="module/action" enctype="multipart/form-data" class="simpleForm">

————————————————-

标准的表单元素

input_tag(‘name’, ‘default value’, ‘maxlength=20′)

—————————– 2009-05-31 16:16:19 ——————————

模版快捷变量

在模版里,有一些Symfony变量可以直接使用。通过这些快捷变量可以从Symfony的对象中取得一些最常用的模版信息:
$sf_context:  完整的环境对象(context object), sfContext类的实例
$sf_request:  请求对象,sfRequest类的实例
$sf_params:   请求的参数
$sf_user:     当前的用户session对象,sfUser类的实例

$sf_request 请求对象的实例:

| 模版中获得请求的参数(http://www.a.cn/showpage.php?id=1,id就是请求showpage.php的参数)
| <?php echo $sf_request->getParameter(‘id’); ?>
| 简版:
| <?php echo $sf_params->get(‘id’); ?>
|
| 在动作(action)里面,相当于如下代码:
| echo $this->getRequestParameter(‘id’)

——————————————————————————–

—————————– 2009-05-31 16:16:06 ——————————

模版中使用 Helper 时,先使用 use_helper() 函数载入:
<?php use_helper(‘Text’)?>

TextHelper.php

truncate_text()        字符串截取函数
highlight_text()    高亮显示函数
excerpt_text()        截取摘要函数
wrap_text()        自定义行宽函数
simple_format_text()    格式化文本
auto_link_text()    自动设置文本的的链接
strip_links_text()    去除文本中的链接
_auto_link_urls()    转换文本中的URL为可点击的URL
_auto_link_email_addresses()    转换文本中Email为可点击的Email

—————————– 2009-05-31 15:19:05 ——————————

为项目设置虚拟主机

NameVirtualHost *:80
<VirtualHost *:80>
  ServerName weblog.loc
  DocumentRoot "D:\workspace\weblog\web"
  <Directory "D:\workspace\weblog\web">
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

  Alias /sf "D:\xampp\php5\pear\data\symfony\web\sf"
  <Directory "D:\xampp\php5\pear\data\symfony\web\sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

本机解析项目域名
打开文件:C:\WINDOWS\system32\drivers\etc\hosts
增加相应域名解析:
127.0.0.1       weblog.loc
127.0.0.1       uii.loc
127.0.0.1       jobeet.loc
127.0.0.1       askeet.loc
127.0.0.1       mysql.loc
127.0.0.1       localhost

—————————– 2009-05-31 11:59:27 ——————————

Symfony 建立项目流程

创建项目:
D:\workspace\weblog> symfony init-project weblog

创建模型:
// Create a schema.yml file in ProjecName/config/
D:\workspace\weblog> symfony propel-build-model

创建数据库:
D:\workspace\weblog>symfony propel-build-sql
D:\workspace\weblog>symfony propel-insert-sql

创建应用程序:
D:\workspace\weblog>symfony init-app frontend

创建模块:
D:\workspace\weblog>symfony init-module frontend post
D:\workspace\weblog>symfony init-module frontend comment
(创建脚手架:
D:\workspace\weblog>symfony propel-generate-crud frontend post Post
D:\workspace\weblog>symfony propel-generate-crud frontend comment Comment
)

—————————– 2009-05-31 10:50:10 ——————————

表单验证
————————

        methods:
          get:            [password1, password2]
          post:           [password1, password2]
        names:
          password1:
            required:     Yes
            required_msg: Please enter a password
          password2:
            required:     Yes
            required_msg: Please retype the password
            validators:   passwordValidator
        passwordValidator:
          class:          sfCompareValidator
          param:
            check:        password1
            compare_error: The passwords you entered do not match. Please try again.
/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/i

emailValidator:
  class:                  sfRegexValidator
    param:
      match:            Yes
      match_error:      Email 格式不正确
      pattern:              /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/i
——————————————————–