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

By admin |
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安装镜像

By admin |

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

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


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


Drupal console的官方文档地址:

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

By admin |

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

对于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

By admin |
$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(深度)计算

By admin |

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站点用户恶意注册的过程

By admin |

背景:

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

分析:

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

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

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


解决步骤:

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

Drupal下基于content type批量更新path alias

By admin |

pathauto允许批量更新路径别名。但是没办法根据内容类型删除。

经过一番调查,可以使用如下技巧:

首先执行sql,删除掉路径别名,

DELETE FROM url_alias WHERE dst LIKE 'my_custom_pattern/%';

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

By admin |

假设当前的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


备注: