Drupal db_transaction 使用范式

Submitted by admin on Wed, 10/26/2016 - 16:35
$transaction = isset($transaction) ? $transaction : db_transaction();

try {
  $ids = array_keys($entities);

  db_delete($this->entityInfo['base table'])
    ->condition($this->idKey, $ids, 'IN')
    ->execute();

  if (isset($this->revisionTable)) {
    db_delete($this->revisionTable)
      ->condition($this->idKey, $ids, 'IN')
      ->execute();
  }
  // Reset the cache as soon as the changes have been applied.
  $this->resetCache($ids);

  foreach ($entities as $id => $entity) {
    $this->invoke('delete', $entity);

Mac上将brew安装的MySql改用Docker执行

Submitted by admin on Mon, 10/17/2016 - 01:26

docker是最近大热的技术,堪称技术界的网红。本着技术人折腾的本性,尝试将本地的MySql服务器改成用docker执行,本文记录折腾过程,以作备忘。

步骤如下:

1:安装docker

自己找文档去

2:使用mysql官方发布的docker image,命令如下

docker pull mysql/mysql-server:5.7.16 ##(这是本文发布时候MySql最新稳定版,并且最好和本地的Mysql版本一致,否则第三步可能会有问题。)

因为GFW的缘故,这个过程有点漫长。命令执行完之后,执行"docker images"看到有mysql-server字样即表示成功了。


3:运行docker images,有几个注意点

a:端口号问题,默认情况下3306被占用了,所以用其他端口进行映射,比如6603

Drupal db_select addExpression

Submitted by admin on Mon, 10/10/2016 - 21:30
$query = db_select('turnover_estimate', 'e');
$query->fields('e');
$query->addExpression("DATE_FORMAT(date, '%Y-%m-%d')", 'date_format');
$res =  $query->execute()->fetchAllAssoc('date_format');


如上代码可以正确执行。但是略有小坑。

$query->addExpression('DATE_FORMAT(date, "%Y-%m-%d"), 'date_format');

注意单引号和双引号,这里的写法会报错。


相关讨论见这里:

drush命令讲解之数据库操作

Submitted by admin on Thu, 06/23/2016 - 16:31

匆匆一看,竟然2016年过了一半了,居然还没写过一篇博客。真是罪过罪过。

今天分享一个我经常用的drush命令,用来做数据库方面的操作。我经常这样使用;但是看周围的很似乎很少这么玩。

秉着知识共享,不藏私货的精神,共享出来。

数据库导出:

drush sql-dump > DB.sql
drush sql-dump --gzip > DB.tar.gz ###导出数据库并压缩


数据库导入:

drush sqlc < DB.sql
gunzip -c DB.tar.gz | drush sqlc  ###导入gzip压缩文件


一键解锁Drupal登录锁定

drush sqlq "delete from flood where 1;"


自定义eck的添加路径

Submitted by admin on Fri, 12/11/2015 - 13:46

对于有洁癖的人来说,eck的添加路径是不完美的,一般是如下形式:

admin/structure/entity-type/ENTITY_TYPE/BUNDLE/add

这种形式的菜单,一般会调用默认的后台主题进行渲染。


下面的代码,对eck生成的entity,使用自定义的路径,这会带来诸多好处。

代码比较短,复制粘贴到自定义模块即可。

drupal entity metadata wrapper判断entityreference字段是否为空的技巧

Submitted by admin on Thu, 11/26/2015 - 15:45

个人是entity重度用户,经常使用entity_metadata_wrapper对entity进行set与get操作。

这是个神器,但是用不好会伤身,伤神。


下面这段代码,用来判断一个entityreference字段是否为空,可以减少很多无谓的报错。

// also check if there is an identifier, __isset alone is not enough!
if ($wrapper->__isset('field_ref') && $wrapper->field_ref->getIdentifier()) {
    $number =  $wrapper->field_ref->field_project_number_complete->value();
    return $number;
}


重置Entity ID

Submitted by admin on Tue, 11/24/2015 - 16:11

使用Drupal开发过程中,会产生一定的测试数据,比如node,会产生很多的数据;这个时候nid会变得不可控制。

如果想重置nid从1开始,则可以使用如下步骤实现:

1:将所有node删除

2:执行语句:

oauth2 server模块的services接口调用代码片段

Submitted by admin on Sat, 11/21/2015 - 02:46
define("TOKEN_URL", 'http://example.com/oauth2/token');
define("UPDATE_URL", 'http://example.com/api/order/update-status');
//第一步:调用token接口,获取token。
$data = array(
    'grant_type' => 'client_credentials',
    'client_id' => 'your_client_id',
    'client_secret' => 'your_client_secret',
    'scope' => 'basic', //这里可以根据设置好的scope灵活填写。
);
$fields_string = '';
foreach ($data as $key => $value) {
    $fields_string .= $key . '=' . $value . '&';
}
rtrim($fields_string, '&');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, TOKEN_URL);

自制durpal console安装镜像

Submitted by admin on Sat, 10/10/2015 - 17:13

Drupal console是基于symfony 的console相关组建开发的一个drupal命令行工具。目前看来与drush有部分重叠的功能。

随着Drupal 8 rc版本的发布,应该会慢慢的有人开始研究与使用Drupal 8,那么很可能drupal console会对你很有帮助。


我在尝试安装这个console的时候,遇到问题,花了点时间,自己做了个镜像,成功安装并可使用。以后会不定期跟踪console的版本更新并更新自己的镜像。


Drupal console的官方文档地址: