解决使用drush features-update导致的语言问题

Submitted by admin on Wed, 09/23/2015 - 17:53

预先声明下,本文内容比较小众,需要有较丰富开发经验才可看懂;初学者可以跳过。

对于feature重度用户来说,每次使用手工方式点击导出features并进行代码覆盖的方式,显然是很低效的做法。

好消息是,features提供对drush的支持,可以通过如下命令进行查看相关命令:

drush |grep features

支持的命令列表如下:

 features-add (fa)     Add a component to a feature module. (DEPRECATED: use features-export)

 features-components   List features components.

 features-diff (fd)    Show the difference between the default and overridden state of a feature.

有用的theme_links

Submitted by admin on Tue, 08/11/2015 - 18:38
$items = array(
  'admin/commerce/orders/add' => '创建订单',
  'admin/commerce/orders/add/delivery' => '待收货订单',
  'admin/commerce/orders/add/recipt' => '收货单',
);
foreach ($items as $url => $title) {
  $links[] = array('title' => $title, 'href' => $url);
}
$vars = array(
  'links' => $links,
  'attributes' => array('class' => array('action-links'))
);
print theme('links', $vars);

执行如上代码,会打印如下:前提是是seven theme.


下面这段代码可能更有意义,添加完文章后,跳转回当前页面。

drupal taxonomy term depth(深度)计算

Submitted by admin on Wed, 06/24/2015 - 16:58

Drupal并没有提供API来获得term的dpeth;但是我们仍然有方法获得。本文分享两种方法,供有需要读者自行选择。

1:自行构造函数,通过数据库查询方式来获得。

function get_term_depth($tid) {
 $limit = 9;
 $depth = 1;
 while($parent = db_query('SELECT parent FROM {taxonomy_term_hierarchy} WHERE tid = :tid', array(':tid' => $tid))->fetchField()) {
    $depth++;
    $tid = $parent;
    if($depth > $limit) {
      break;
    }
  }
  return $depth;
}

2:利用ctools

ctools有个子模块,叫做term_depth,估计大部分人都没注意过这个模块。这个模块提供一个隐藏的函数_term_depth,也可以用来计算term的depth。

经过一番摸索,下面提供可以调用该函数的方法。

记录一次解决Drupal站点用户恶意注册的过程

Submitted by admin on Thu, 05/14/2015 - 10:57

背景:

  在一个电子商务网站上发现有很多@sina.com的垃圾注册用户。虽然已经开启了honeypot模块,但是没有屏蔽住此类注册。

分析:

  攻击者可能比较熟悉honeypot的工作机制,可以自己编写相应的脚本实现恶意注册。

  在Drupal系统中,默认情况下,用户注册都会有日志记录,保存在watchdog表中。通过分析watchdog表中的关于用户的日志的情况,可以统计出相应的信息供参考。

  然后通过user block模块或其他相应模块屏蔽该恶意IP的注册。


解决步骤:

 在任意mysql客户端,或者phpmysql里面执行如下sql语句:

如何将版本控制从svn切换到git

Submitted by admin on Mon, 12/22/2014 - 13:08

假设当前的svn的工作目录是/var/www/test

1:查找并删除所有的.svn文件

cd /var/www/test
find . -name .svn -type -d | xargs rm -rf

2:初始化git并提交。

git init
git add ./*
git commit -m "init"

3:如果你不想把git仓库放到其他地方,而只是放到本机,则如下操作:

mkdir /home/user1/git
cd /home/user1/git
git init --bare

4:将仓库切添加到本地仓库:

cd /var/www/test
git remote add origin /home/user1/git
git push origin master


备注:

Google event tracking(事件跟踪)

Submitted by admin on Sun, 12/21/2014 - 13:12

在描述这个问题之前,介绍下Google跟踪代码的情况。

Google跟踪代码目前有两个版本,我们姑且命名为新版本,旧版本。如何区分,很简单。

查看你的Google跟增代码:

如果是ga.js的为旧版。

如果是analytics.js的为新版。

目前网络上充斥的大部分的案例是基于旧版本的。

对于一些Google高级跟踪功能,两个版本的写法有点不一致。下面是常用的Google事件跟踪代码的实例:

对于旧版本的ga.js

https://developers.google.com/analytics/devguides/collection/gajs/event…

用正确的方式渲染Drupal Field(字段)

Submitted by admin on Sun, 12/14/2014 - 09:56
$node->field_name['und'][0]['safe_value']

对于大多数人来说,一般会使用上面的方式来打印一个字段的值。

这是普遍的做法,但是不通用。

上面的做法,会有如下问题:

1: 'und'的使用容易导致多语言方面的问题。

2:上面的方式,打印的是field的原始的值;不是正常的field的渲染方式。

3:[0]['safe_value'],这种方式只会渲染第一个值。如果是一个多值字段,会有数据不会被渲染出来。

4:对于有些字段,比如entityreference类型的字段,是没有['safe_value']这个东西的,这种方式很容易出现语法错误。


下面推荐的是一种Drupal原生的方式渲染字段:

即field_view_field

常规用法如下: