如何使用在自定义事件中定义的参数,以获取操作 -- 6 领域 和 rules 领域 drupal 相关 的问题

How to use arguments, defined in a custom event, for an action


2
vote

问题

中文

我刚用两个参数定义了这个事件:编号和消息。我想用它们来验证消息并将响应发送回数字。我有一个行动,但我不知道如何通过参数。

  function sms_rules_rules_event_info() {   return array(       'sms_rules_sms_received' => array(          'label' => t('SMS received'),          'module' => 'sms_rules',          'arguments' => array(             'number' => array('type' => 'text', 'label' => t('Number from where the message was received.')),             'message' => array('type' => 'long text', 'label' => t('Contents of message.')),          ),       ),   ); }   
英文原文

I've just defined this event with the two arguments: number and message. I want to use them to verify the message and send a response back to the number. I have an action for that but I don't know how to pass the arguments.

function sms_rules_rules_event_info() {   return array(       'sms_rules_sms_received' => array(          'label' => t('SMS received'),          'module' => 'sms_rules',          'arguments' => array(             'number' => array('type' => 'text', 'label' => t('Number from where the message was received.')),             'message' => array('type' => 'long text', 'label' => t('Contents of message.')),          ),       ),   ); } 
     

回答列表

2
 
vote
vote
最佳答案
 

在你的行动中,你可能有类似的东西

  function mymodule_rules_action_info() {   return array(     'my_action' => array(       'label' => t('Label'),       'module' => t('My module'),       'arguments' => array(         'number' => array('type' => 'text', 'label' => t('Number from where the message was received.')),         'message' => array('type' => 'long text', 'label' => t('Contents of message.')),       ),       'base' => 'mymodule_my_action',     ),   ); }   

'base' 属性表示操作的回调。如果您选择不设置 'base' ,您还可以使用操作的键作为回调。在这种情况下,它将是 function my_action() 。操作中定义的参数将自动传递给该函数。现在,该操作是否可用取决于您的事件可用的参数,您的操作需要哪些参数。因此,如果我有一个传递 998876666 'type' => 'node' 然后只有具有参数'用户'和'node'的操作。这是规则1的工作原理。或者,通过使用简单的"文本" 数据类型,操作将始终可用,因为数据类型不是唯一的。您可以通过实现 hook_rules_data_type_info() 来指定您自己的数据类型。

无论如何,我偏离了轨道。所以,你的基础是 mymodule_my_action

  if ( $op == 'presave' and $node->type == 'event' ) :    $existing = node_load($node->nid);    if ( $existing ) :        check your fields in $node against the $existing node        if they are different do something 0  

另一个添加,如果需要,您可以进行设置表格到您的操作。

  if ( $op == 'presave' and $node->type == 'event' ) :    $existing = node_load($node->nid);    if ( $existing ) :        check your fields in $node against the $existing node        if they are different do something 1  

在这种情况下,您只需将设置阵列添加到操作回调中作为最后一个参数:

  if ( $op == 'presave' and $node->type == 'event' ) :    $existing = node_load($node->nid);    if ( $existing ) :        check your fields in $node against the $existing node        if they are different do something 2  

hmm ......我甚至不知道我是否回答了你的问题,但我试图提供尽可能多的信息。如果我完全错过了,请给我一些指导。我维护了三个规则模块,所以我一直遍布那个模块一段时间,我很高兴帮助。

 

In your action you might have something like

function mymodule_rules_action_info() {   return array(     'my_action' => array(       'label' => t('Label'),       'module' => t('My module'),       'arguments' => array(         'number' => array('type' => 'text', 'label' => t('Number from where the message was received.')),         'message' => array('type' => 'long text', 'label' => t('Contents of message.')),       ),       'base' => 'mymodule_my_action',     ),   ); } 

The 'base' property indicates the callback for the action. You can also use the key of your action as the callback if you choose not to set a 'base'. In this case it would be function my_action(). The arguments defined in the action will automatically be passed to that function. Now, whether the action is available is dependent upon which arguments your event makes available and which arguments your action requires. So, if I had an event that passes a 'type' => 'user' and 'type' => 'node' then only actions that have arguments 'user' and 'node' would be available. This is how Rules 1 works. Alternatively, by using a simple 'text' data type the actions will always be available because the data type is not unique. You can specify your own data types by implementing hook_rules_data_type_info().

Anyways, I got off track. So, with your base being mymodule_my_action:

function mymodule_my_action($number, $message) {   // Do stuff here.   return $number; } 

Another addition you can make if necessary is adding a settings form to your action.

function mymodule_my_action_form($settings, &$form) {   $form['settings']['my_options'] = array(     '#type' => 'select',     '#title' => t('Select an option'),     '#options' => array(       'this' => t('this'),       'that' => t('that'),       'also' => t('also'),     ),     '#default_value' => $settings['my_options'],     '#required' => TRUE,   ); } 

In this case, you would just add the settings array to your action callback as the last argument:

function mymodule_my_action($number, $message, $settings) {   if ($settings['my_options'] == 'this') {     // Do stuff.   } } 

Hmm... I don't even know if I answered your question, but I tried to provide as much info as possible. If I completely missed it please give me some guidance. I maintain three Rules modules, so I've been around that module for a while and I'm glad to help.

 
 
   
   

相关问题

0  如何更改形式保存的自定义字段  ( How to change a custom field on form save ) 
在节点类型页面中,我添加了一个整数字段"field_article_repted" 。 当拒绝时,它包含1。 但是当注册用户更改并"保存" 它时,我想将其设置为0。 还有注册用户在此字段上没有读/写权限。但是,如果需要,我可以给出此字段的用户权限,但我会在"显示字段" 中隐藏它,以"显示字段" 怎么做? 我在d...

3  流媒体视频集成  ( Streaming video integration ) 
我正在寻找一个解决方案在Drupal 6中媒体视频。理想情况下,我希望能够通过内容类型,转换和对它进行用户上传视频,然后将发布的版本链接到Streaming Server(如 dss )。我想自己托管流式服务器,理想情况下,我希望它是免费的。 我从来没有听说过它,但似乎还有一些叫做的东西 kaltura 。< / p...

3  WEBForm将数据与提交的值添加  ( Webform add data along with submitted values ) 
我正在使用webform 6x 3.11,并将 nodeid 传递到一个名为 hidden_key 的隐藏字段中。我已经创建了一个自定义模块来实现 hook_form_alter() ,从而我尝试添加其他数据(以及正在提交的数据)到提交结果。 此附加数据基于对隐藏字段中的值执行的一些计算,即:基于 NodeID 获取...

1  强制用户填写至少文本区域或文件  ( Force user to fill in at least text area or file ) 
注册用户正在创建具有主体和文件字段的节点。我想强制用户用300个字符填充身体或选择文件。至少需要选择/填充。 我该怎么做? 我可以使用规则模块吗? ...

0  将所有添加的类删除到正文标记  ( Remove all added classes to body tag ) 
如何删除添加到正文标记的所有类?目前我的身体标签是: <body> 然而,呈现为 <body class="lightbox-processed admin-nw admin-vertical admin-df"> ...

0  现场更新在字段上没有许可  ( Field update on field with no permission ) 
我有一个字段(selectbox),它被配置为不显示(无'查看'权限)在特定角色上,也不要编辑(否'编辑'权限)相同的角色。此角色仅能够编辑其他字段。所以通常,当这个角色编辑内容时,他不应该看到这个特定的字段。但我希望这个字段自动通过"触发的规则" 来更新。我不希望任何人能够首先看到这个领域。例如: 价格范围字段: ...

0  TAO覆盖父reset.css文件。  ( Tao overriding parent reset css file ) 
我希望覆盖从我从中提供的主题提供的默认CSS文件之一。根据创建子主题页面,我需要执行以下操作: 覆盖继承的样式表:指定一个相同的样式表 子主题中的文件名。例如,覆盖style.css 从父主题继承,将以下行添加到您的 子主题的.info文件: stylesheets[all][] = styl...

0  automenu和令牌  ( Automenu and tokens ) 
我在drupal 6.22工作,想知道有人知道如何让令牌与 automenu < / a>模块?它来自可用性角度的一系列问题,并且希望将此与我的面包屑合作(使用 menu_breadcrumb )。 例如,我有能力创建多个画廊,它属于 /media/galleries/[gallery-title-raw] ,并...

0  i18n,路径别名不起作用  ( I18n path alias doesnt work ) 
我将内容类型页面的路径自动别名为: [语言] / [标题 - 原始] 我正在使用内容翻译模块。 我创建了英文版所选页面。 别名是好的。 但即使我是admin,我有404何时我想查看此页面。 有人可以给我任何建议吗? 编辑 我将路径别墅设置更改为 [title-raw] 仍然404。 如果我使用页面...

2  如何将视图参数作为类似/包含而不是等于  ( How to get views argument as a like contains instead of equals ) 
我有一个视图,我需要使用逻辑字段筛选,其中包含url_argument_1。或者在SQL Field_A中像'%url_argument_1%'。我所拥有的问题只是过滤器让我使用"包含" 运算符,只有参数允许我访问url_argument_1。我怎样才能结合它们? 仅为Clarity url_argument_1是从...

0  使用Drupal 6针对Drupal 7教程  ( Using a drupal 6 tutorial for drupal 7 ) 
我讨厌制作这样的帖子,因为我觉得我要让人们为我做我所有的工作!然而,在这样的时候,当我按下时间时,我必须。所以... 我正在尝试在论坛模块的主题中添加用户配置文件。我找到了一个辉煌的教程,但不幸的是,它适用于Drupal 6,其中一些功能与Drupal 7不兼容;我找不到相同的函数,我想到了一些你可能知道它们。 如...

2  如何更改为默认本地化客户语言转换  ( How to change to default localization client language to translate ) 
本地化客户端只允许我从英语翻译成其中一个语言。 也可以从语言x到英语翻译? ...

1  在提交时更改表单的值,但在验证之前?  ( Alter a forms values on submission but before validate ) 
我正在尝试设置用户注册表单以填充带电子邮件地址字段的用户名字段。有没有方法可以在不使用hook_validate并且必须手动做表单验证? ...

0  在WebForm 3.0中提交后隐藏WebForm  ( Hide the webform after submission in webform 3 0 ) 
我有一个webform(webform 3模块)嵌入在我的网站上的主页上。我正在寻找一种方法来隐藏在提交后的WebForm。 - &gt;试图检查$ _post但不起作用 - &gt;也许WebForm API可以提供帮助? 谢谢。 ...

0  根据表单设置新用户配置文件字段  ( Setting a new users profile fields based on a form ) 
我网站上的用户都有一个"家庭区域" 字段。为每个用户保存此配置文件字段并用于自定义各种站点功能,以便用户显示本地内容。 这些地区不是州或城市 - 他们更像是选民/地方议会的界限(我真的很确定美国的类比是什么)。大多数用户将不确定他们实际要保存到他们的用户配置文件的区域。 我有一个表单,它允许用户从选择下拉或(b)中明...

0  花环主题和h2标题  ( Garland theme and h2 heading ) 
在d6.2上我正在使用花环。但是,它不是为其生成H2标记的标题生成H1标签。 让它生成H1而不是H2的最佳方法是什么? 我应该象限性它并修改page.tpl.php吗? 是否有任何可以执行的设置或模块? ...

0  用户如何为站点默认语言选择不同的语言?  ( How can a user select a different language to the site default language ) 
我的drupal 6站点应该始终以法语显示为所有用户 me。我需要用英语管理网站。 使用Locale模块,我已安装两种语言并默认设置为法语。在语言协商设置('configure')中,我已选择"无" 。帮助文本表示"用户可以(可选)在" "中选择我的帐户页面上的首选语言。 即使我在我的帐户设置中选择了英语(在"语言设...

1  子主题花环  ( Sub theming garland ) 
我经历了创建一个子主题,但有一些不明确的东西我。 为什么需要复制样式.CSS并将其声明为在info文件中,在上面的链接中,它清楚地说,如果我们声明任何CSS文件,所有CSS文件都会自动继承? 任何人都可以确认创建花环子主题的最低步骤吗? 使用"样式表[全部] [] = style.css" 创建".info" 文...

0  Drupal 6中这些多站点设置有什么区别?  ( Whats the difference between these multi site setups in drupal 6 ) 
我正在将几个drupal 6站点迁移到新主机。我回想一下,安装人员只需在安装程序中的一些设置就会自动设置我的多站点表。我无法找到这些设置,同时我正在进行迁移并发现多站点配置的描述。 我的原始多站点是此类型:示例一个(此页面介绍一个多站点在站点的Setteds.php文件中使用$ db_prefix属性)。 在此文件...

0  $ _session空  ( Session empty ) 
我在使用 <?php print $messages; ?> 的页面中打印错误消息(例如,从登录表格)。什么都没有出现。 我想我的问题是$ _session变量(应该包含这些错误消息)是空的。 我尝试在使用 $_SESSION['test'] = 'wtf'; 中显式设置会话var,它绝对插入我的drupal_ses...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.