最新代码片段

主标签

Drupal使用Libraries模块加载js和css

0
Vote up!

自定义CSS和JS可以在模块或主题里使用经典的Drupal内置机制加载(这里指的是drupal_add_css和drupal_add_js还有主题的info声明等方式)。但对于第三方插件或特效。JS和CSS是成组出现的,并且有时候我们还需要实现按需加载。Libraries模块的出现,渐渐形成了一个新的库文件加载方式和规范。

Drupal给用户添加角色和删除角色的代码片段

0
Vote up!

Drupal中用后台添加和删除角色十分简单,但有时我们需要在自定义模块中编程实现这个逻辑,可能是为了自动化,也可能是有额外的业务逻辑,给用户添加角色不像编辑节点那样load出来再save就行了,我们需要花点心思。

微调Drupal7的HOOK执行顺序

0
Vote up!

Drupal的HOOK执行顺序是通过模块的weight决定的,有微调需求的模块一般会在模块启动时检测weight,从而尽量让自己排在最前面或者最后面,但这么做会带来不确定性,这个问题一直比较困扰我们,通常的做法是尽量避开使用相同的HOOK,而是弄明白执行路径要经过多少个HOOK,然后将代码写在合适的HOOK里,但这么做并没有解决根本问题。

Drupal生成短链接

0
Vote up!

短链接有各种个样的用途,比如微博,比如手机短信,而且有各种个样的实现方案,比如随机字符串短链接,比如可读短链接等。这里不讨论短链接的原理,只是分享一种短链接的生成方法。

任何方案都有局限,如果采用,需要注意应用的规模。

基于MAMP让一台电脑上多版本Drush共存

0
Vote up!

这里以Mac电脑本地开发环境为例,我遇到的场景是我需要同时维护Drupal6和Drupal7站点,又想在本地试用和研究Drupal8,作为Drupal开发者肯定是离不开Drush的,但不同版本的Drupal需要用到不同版本的Drush,否则就可能产生不兼容。

Drupal删除节点修订版本的代码

0
Vote up!

这是从node模块里提取出来的,一般用于做一些数据处理时临时使用。

保存本地图片为Drupal files

0
Vote up!

通过看Drupal核心的文件操作API函数,发现有支持文件上传的,也有支持文件二进制保存的,但没有将本地文件保存为Drupal Files的API函数,但实际工作中,有时候文件不是人工上传,而是批量导入,这时候,我们有一个文件夹的图片,我们要做的是把这些图片保存到Drupal的files表,同时把fid保存到CCK字段里。

Drush的内存溢出怎么办

0
Vote up!

因为我们使用Drush的时候一般都是执行比较复杂的运维或者数据批处理操作,有时候需要的内存和前端网页的不同,如果我们直接增大服务器的PHP内存限制,会增加生产服务器的稳定性风险。所以一般我们的思路是让Drush和前端的内存限制不同。

Drush提供了几种方案,但前提是你的Drupal内部不能不能用ini_set对memory_limit项写死配置。欢迎大家补充。

任意规则批量导出节点的Drush命令

0
Vote up!

导出Node节点,我们常用的一个方法是使用Node export模块,这个模块既支持后台导入导出,也支持Drush命令,Drush命令的用法如下:

给Drupal已上线模块添加新表

1
Vote up!

对于这个问题,非Drupal-Way的方法就是在各个环境执行建表语句,好一些的则是把建表的SQL写到hook_update_N()里。但这还远远不够,为了让drupal_write_record正常工作,我们需要在hook_schema()里也写好表的结构定义数组(这个可以用schema模块自动输出)。

node export导出再导入,location信息丢失

0
Vote up!

事情是这样的,我需要在两个环境中同步Node数据(本地->测试服务器),采用的方法是使用Node export模块,我使用了drush node-export-export命令导出,然后在后台admin/content/import界面导入。

如何基于内容类型批量删除节点

0
Vote up!

关于如何批量删除节点,之前有过一个代码片段的分享,紧急批量删除节点。如果是要基于内容类型删除,只需要稍微修改一下里面的代码即可。

Drupal批量处理数据的脚本

0
Vote up!

当我们做批处理的时候,可能会有各种个样的方式,比如使用Drupal的Batch API,比如自己写个php脚本,循环处理,比如写个drush命令,比如利用Jenkins循环调用自身的方式,可以利用多线程技术,甚至是换一个思路用其他语言比如Node.js来做批处理。

我这里当然不会介绍这么多,只是说一下我遇到的一个场景的解决方法。

场景描述:

用Drush命令序列快速得到一个中文本地测试环境

0
Vote up!

这个主题的初级版请参考:最简单的重置本地环境的方法

通过执行drush si,我们可以得到了一个新的空的Drupal环境,但为了测试模块,或者实现某些想法,我们仍然需要继续配置一些东西,例如:

Drupal6编程批量创建CCK字段

1
Vote up!

如果是少数的字段,我们直接使用CCK的字段管理后台创建就可以了,但是如果是几十个,上百个字段,我们还人工手动创建么?这种繁琐的工作任何人都不愿意做,更何况是程序猿的我们呢。

这个代码片段来自于工作中的一次内容类型数据结构初始化的任务,有上百个字段要建立,类型也不尽相同,但大体可以分为以下几类。

使用Drush导入GZip压缩的数据库

0
Vote up!

之前写了导出数据库的代码片段:https://code.drupalproject.org/node/45

这次是导入数据库,仍然是用drush,一行搞定。

用Drush设置主题

0
Vote up!

drush可以查看当前主题,也可以设置切换为其他主题。在网站主题层不正常时可能会比较有用,比如说白屏,在升级主题时可能会出现。

导出数据库并GZip压缩

0
Vote up!

通过drush和管道符链接gzip命令,可以实现导出数据库的同时进行gzip压缩。

让dpm只执行一次

0
Vote up!

由于Drupal执行流程的特殊性,当我们使用dpm打印调试信息时,很多时候同一个位置的调试信息会被重复打印,但我们往往只需要看一条就够了,重复打印会造成页面打开缓慢,甚至打不开,同时也会影响我们的调试效率。

通过这个代码片段,我们可以只显示同一个位置dpm调用第一次的打印结果,通过改造这个代码片段,你甚至可以指定范围,或者输出次数统计之类的附加信息。

使用drupal_mail发送邮件

0
Vote up!

这是一个完整的代码片段,演示了如何使用drupal_mail发送邮件。

具体包括: