drush 安装/Install

Windows 上面安装Drush
GITHUB: https://github.com/drush-ops/drush
官方的安装文档:http://www.drush.org/drush_windows_installer
包下载: http://www.drush.org/sites/default/files/attachments/Drush-6.0-2013-08-28-Installer-v1.0.21.msi

Linux

pear channel-discover pear.drush.org
pear install drush/drush

详细请看GITHUB文档

Linux 删除Drush / 重新安装

$sudo pear uninstall drush/drush
$sudo pear install drush/drush-5.0.0
$sudo pear upgrade-all

Drupal 多层级Token

在Drupal中使用hook_token_info来定义一个token, 但是wiki上面并没有讲如何来定义多个层级的token,比如你会看到这样的token, 是属于多个层级的.

[current-user:created:long]

其实这是嵌入一个类型,user本来就是一个token类型, create也是一个token类型。然后再将create这个token类型嵌入到user里面去,所以就可以实现这样的选择.下面是我创建一个名字为 baidu_analytics, 并且嵌入到user中.

function baidu_analytics_token_info() {
  // create a new token type: baidu_analytics.
  $types['baidu_analytics'] = array(
    'name' => t('Baidu Analytics'),
    'description' => t('Baidu Analytics.'),
    'needs-data' => 'user',
  );
  $info['role-names'] = array(
    'name' => t('User role names'),
    'description' => t('The role names the user account is a member of as comma separated list.'),
  );
  $info['role-ids'] = array(
    'name' => t('User role ids'),
    'description' => t('The role ids the user account is a member of as comma separated list.'),
  );

  // add token type baidu_analytics to user.
  $user_info['baidu_analytics'] = array(
    'type' => 'baidu_analytics',
    'name' => t('Baidu Analytics'),
    'description' => t('Baidu Analytics.'),
  );

  return array(
    'types' => $types,
    'tokens' => array(
      'user' => $user_info, 
      'baidu_analytics' => $info
    )
  );
}

然后我就可以进行类似的选择:
[user:baidu_analytics:role-ids]
[user:baidu_analytics:role-names]

PHP 截取字符串函数 保持中英一样长

读取每隔字符, 比如汉字宽度是2,那么正常字母是1, 如果是”1″ 宽度为0.5 如果是”w” 宽度为2
string_cat($sourcestr,$cutlength)
所以, $cutlength 其实可以说是伪长度, 只要设定为20,不管字符串是100个数字1还是100个汉字,长度相等

/**
* 字符串截取函数
*
* @param string $sourcestr  字符串
* @param int $cutlength     截取长度
* @return string            返回字符串
* @author lrenwang
*/
function string_cat($sourcestr,$cutlength)
{
  $returnstr='';

  $i=0;

  $n=0;

  $str_length= strlen($sourcestr);//字符串的字节数

  $end = $cutlength * 2;

  while (($n<$end) and ($i<=$str_length))
  {
    $temp_str=substr($sourcestr,$i,1);
    $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码
    if ($ascnum>=224) //如果ASCII位高与224,
    {
      $returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符
      $i=$i+3; //实际Byte计为3
      $n = $n+2; //字串长度计1
    }
    elseif ($ascnum>=192) //如果ASCII位高与192,
    {
      $returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符
      $i=$i+2; //实际Byte计为2
      $n = $n +2; //字串长度计1
    }
    elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,
    {
      $returnstr=$returnstr.substr($sourcestr,$i,1);
      $i=$i+1; //实际的Byte数仍计1个
      if ($ascnum==87)
      {
        $n = $n + 2;
      }
      else
      {
        $n = $n + 1.5; //但考虑整体美观,大写字母计成一个高位字符
      }

    }

    else //其他情况下,包括小写字母和半角标点符号,
    {
      $returnstr=$returnstr.substr($sourcestr,$i,1);
      $i=$i+1; //实际的Byte数计1个
      if ($ascnum == 119) //如果是几个特殊字 w
      {
        $n = $n + 1.5;
      }
      else
      {
        $n = $n + 1; //小写字母和半角标点等与半个高位字符宽...
      }

    }
  }

  if ($str_length>$i){
    $returnstr = $returnstr . "...";//超过长度时在尾处加上省略号
  }
  return $returnstr;

}


echo string_cat('测试截取长度,这个长度够了',10).'
'; echo string_cat(‘123456数字字母混合78900---666’,10); ?>

原文来自: http://blog.lrenwang.com/post/3/

获取百度统计的JS文件

为什么的要获取这个文件,因为这个文件是去百度获取你的配置.如果你的配置没有改变,根本就没有必要每次去获取这个文件.你可以将他放到你的本地.
最重要的一个参数,父页面(referer)这个一定要有.否则就不可能获取到数据
1. CURL

$ch = curl_init("http://hm.baidu.com/hm.js?5363783196d3196ea87fa3b4211156bd");
curl_setopt($ch, CURLOPT_REFERER, "referer");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
$output = curl_exec($ch);
curl_close($ch);
var_dump($output);

2. Drupal

$output = drupal_http_request('http://hm.baidu.com/hm.js?5363783196d3196ea87fa3b4211156bd', array(
  'referer' => 'http://localhost'
));

PHP new self VS new static

class A {
    public static function get_self() {
        return new self();
    }

    public static function get_static() {
        return new static();
    }
}

class B extends A {}

echo get_class(B::get_self());  // A
echo get_class(B::get_static()); // B
echo get_class(A::get_static()); // A