为你的 Drupal 模块创建Drush命令

Drush是每位Drupal开发者必不可少的工具。作者也写过其他有关Drush的文章,可以用网站右上角的搜索框搜索一下“drush”。之前的文章基本是入门、介绍性的,比如如何使用drush清除缓存,设置默认主题等等。今天我们一起来深入一下,将drush结合到自己的模块中去。自定义你需要的操作,几行命令就敲完,岂不是很爽?! 下面我们一起来看一下如何将drush结合进模块中去。

首先初始化一个全新模块(亦或者在已有模块中)。假设命名模块名字为drush demo。

接下来,在drush_demo.module中添加以下代码:

/**
 * Example function.
 */

function demo_drush_print_statement($type = NULL) {
  drupal_set_message(t('Hello world!'), $type);
}

上面代码就如同每个新编程语言一样,Hello World!

接下来,创建一个drush_demo.drush.inc文件,也是最主要的一个文件。命名规则遵循modulename.drush.inc。在文件开头记得添加<?php。

在开始写drush_demo.drush.inc文件之前,先补充一个hook:hook_drush_command。该hook的作用是声明一个新的drush command。然后我们定义一个简单的drush命令:drush-demo-command。同时给它起一个简称ddc。如下代码:

/**
 * Implements hook_drush_command().
 */
function drush_demo_drush_command() {

  $items['drush-demo-command'] = array(
    'description' => 'Demonstrate how Drush commands work.',
    'aliases' => array('ddc'),
    'arguments' => array(
      'type' => 'The type of statement (error or success).',
    ),
    'options' => array(
      'repeat' => 'The number of statement repeats.',
    ),
    'examples' => array(
      'drush ddc error' => 'Prints the statement once with the error flag.',
      'drush ddc success --repeat=10' => 'Prints the statement 10 times with the success flag.',
    ),
  );

  return $items;
}

drush_demo.drush.inc文件的第二部分是drush的回调函数,通常以drush开头并以下划线链接剩余的部分。剩余部分来自于上面hook_drush_command钩子中的items,比如此处的drush-demo-command。结合起来,回调函数的名字是drush_drush_demo_command()。 回调函数的写法如下:

/**
 * Callback for the drush-demo-command command
 */
function drush_drush_demo_command($type = FALSE) {

  // Check for existence of argument
  if (!$type) {
    $options = array(
      'success' => dt('Success'),
      'error' => dt('Error'),
    );
    $type = drush_choice($options, dt('What kind of message you\'d like to print?'));
  }

  // Check for correct argument
  $correct_args = array('error', 'success');
  if (!in_array($type, $correct_args)) {
    return drush_set_error(dt('"@type" is not a valid statement type. Please choose between "success" and "error".', array('@type' => $type)));
  }

  // Option
  $repeat = drush_get_option('repeat', 1);
  if ($repeat > 1 && is_numeric($repeat)) {
    for ($i=0; $i < $repeat; $i++) {
      demo_drush_print_statement($type);
    }
  }
  else {
    demo_drush_print_statement($type);
  }

}

以上便是drush结合进模块的基本命令,使用drush cc drush命令将drush的缓存清除掉,试一下你的命令吧:drush ddc!

PS:如果你想做更多的开发可以参考drush api以及drush官网的文档,欢迎指正校对文章内容!

时间: 2024-10-12 12:31:58

为你的 Drupal 模块创建Drush命令的相关文章

Drupal模块开发之创建自己的钩子

Drupal的钩子系统允许和模块交互并改变其他模块的逻辑,甚至是改变Drupal核心逻辑.这是一个非常简单的系统,甚至可以让第三方模块创建自己的钩子.在通常的实践中,有两种类型的钩子你可能想要创建,一种是内容修改类的钩子,一种是拦截类的钩子.修改类的钩子提供了一个标准的方法来修改某个特定对象或变量的内容,典型的是使用 drupal_alter()函数.拦截类的钩子可以让第三方模块在模块执行过程中根据条件做出一些动作. 例1:简单调用  代码如下 复制代码 <?php // will call a

javascript构造函数: JavaScript学习笔记(二十四) 模块创建构造函

 模块创建构造函数(Modules That Create Constructors)在前面的例子中,创建了一个MYAPP.utilities.array对象,但有时候使用构造函数创建你的对象更方便,你也可以使用模块模式实现它.唯一的不同就是在包裹模块的立即执行函数返回一个函数而不是对象.下面这个例子就是模块模式创建一个构造函数 MYAPP.utilities.ArrayMYAPP.namespace('MYAPP.utilities.Array');MYAPP.utilities.Array

为什么电脑安装了pymongo等模块,在命令行可以import,但是在web上不能

问题描述 为什么电脑安装了pymongo等模块,在命令行可以import,但是在web上不能 apache的错误日志这样显示: File "D:AppServwwwXYingPYdbMongoDB.py", line 1, in r [Wed Dec 17 10:17:13 2014] [error] [client 127.0.0.1] import pymongor [Wed Dec 17 10:17:13 2014] [error] [client 127.0.0.1] Impo

MySQL数据定义语句:CREATE(创建)命令、ALTER(修改)命令、DROP(删除)

数据定义语言(DDL):包括CREATE(创建)命令.ALTER(修改)命令.DROP(删除)命令等. 注:MySQL version: 5.6.27 1.创建数据库和数据表: 数据库如果存在,则删除:(删除重要数据备份) mysql> DROP DATABASE IF EXISTS weloveshare; Query OK, 0 rows affected, 1 warning (0.00 sec) 删除或不存在weloveshare,则创建/*我们爱分享数据库*/ mysql> CREA

python模块创建,如何封装C#中定义的函数

问题描述 python模块创建,如何封装C#中定义的函数 我的平台包含了python脚本编写和执行,其中我在平台中有一个函数是 public class FnValues { public int Pn; public string Fn; public string [] Values; } 而我在python脚本的模块函数中用到了这个函数: def Get_Meter_Reading(cs,a): fnValue1=FnValues(); fnValue1.Fn="30" fnVa

cocos2d-x-cocos项目创建dos命令

问题描述 cocos项目创建dos命令 @echo off echo =============Cocos2D-x新建项目============== set /p name=输入项目的名称: echo 项目名为:%name% set /p pack=输入包名称: echo 项目名为:%name% echo 包名为:%pack% echo 正在创建新项目... cocos new %name% -p %pack%%name% -l cpp echo 创建完成. echo 进入编译... cd p

mysql 协议的创建DB命令包及解析

git https://github.com/sea-boat/mysql-protocol 概况 mysql客户端通过创建DB命令包告诉服务端创建某个schema. mysql通信报文结构 类型 名字 描述 int<3> payload长度 按照the least significant byte first存储,3个字节的payload和1个字节的序列号组合成报文头 int<1> 序列号 string payload 报文体,长度即为前面指定的payload长度 创建DB命令包

Drupal7配合Varnish使用及整合drupal模块的详细教程

准备环境 首先安装一个全新的Drupal,推荐使用drush安装,方便迅速. 先要建一个数据库,记住用户和密码. ###进入mysql mysql -uroot -p CREATE DATABASE `mydb` CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT ALL ON `mydb`.* TO `username`@localhost IDENTIFIED BY 'password'; ####退出mysql Drush安装Drupal7:

drupal模块MMENU介绍

一款非常棒的模块:mmenu.它集成了mmenu jquery插件,可以非常方便地给你手机站创建类app滑动菜单. 安装需求:libraries,jquery 1.7.0或更高(可以通过安装jquery_update)来解决. 特性:     集成scss的全响应式css框架    像创建menu一样简单方便的后台界面    menu可以放置到顶部.右边.底部.或者左边等等    添加头部.标签.统计甚至一个搜索    通过改变背景色来改变前端显示    兼容主流浏览器    使用scss来轻松