read

No más código en la base de datos por favor!!! (Parte 3)

En esta tercera parte hablaremos acerca de eventos, condiciones y acciones de rules. Todo lo relacionado con rules lo haremos en un archivo [nombre-modulo].rules.inc

Eventos de Rules

Un evento es el encargado de desencadenar una serie de reglas que estén asociadas a este.

Para crear uno debemos implementar el hook_rules_event_info

function mimodulo_rules_event_info() {
  $items = array();
  $items['mi_evento'] = array(
    'group' => t('Node'),
    'label' => t('Mi Evento'),
    'variables' => array(
      'variable1' => array(
        'type' => 'text',
        'label' => t('Variable 1'),
      ),
      'variable2' => array(
        'type' => 'user',
        'label' => t('Variable 2'),
      ),
    ),
  );
  return $items;
}

Con eso; rules será capaz de ver un nuevo evento llamado “Mi Evento” que provee dos variables; pero para ejecutar este evento; desde donde se necesite; hay que llamar a la función rules_invoke_event; ej.

rules_invoke_event('mi_evento', $variable1, $variable2);

Condiciones de Rules

Estas se utilizan para asegurarse de que verdaderamente queremos ejecutar una serie de acciones. Para esto debemos implementar hook_rules_condition_info; ejemplo:

/**
 * Implements hook_rules_condition_info()
 */
function mimodulo_rules_condition_info(){
  return array(
    'mimodulo_mi_condicion' => array(
      'label' => t('Mi Condición'),
      'parameter' => array(
        'parameter1' => array(
          'type' => 'text',
          'label' => t('Parameter 1'),
          'options list' => 'funcion_que_devuelve_opciones',
          'restriction' => 'input',
        ),
        'parameter2' => array(
          'type' => 'user',
          'label' => t('Parameter 2 (tipo User)'),
        ),
      ),
      'group' => t('Node'),
    ),
  );
}

/**
 * Callback para mimodulo_mi_condicion.
 */
function mimodulo_mi_condicion($parameter1, $parameter2) {
  // Realizar aquí las comprobaciones necesarias
  // y devolver TRUE o FALSE según corresponda.
}

Acciones de Rules

Estas son las acciones que verdaderamente queremos ejecutar. Para esto debemos implementar hook_rules_action_info; ejemplo:

/**
 * Implements hook_rules_action_info().
 */
function mimodulo_rules_action_info() {
  $items = array(
    'mi_accion' => array(
      'label' => t('Mi acción'),
      'base' => 'mimodulo_mi_accion',
      'parameter' => array(
        'parameter1' => array(
          'type' => 'text',
          'label' => t('Parameter 1'),
          'options list' => 'funcion_que_devuelve_opciones',
          'restriction' => 'input',
        ),
        'parameter2' => array(
          'type' => 'user',
          'label' => t('Parameter 2 (tipo User)'),
        ),
      ),
      'group' => t('Node'),
    ),
  );

  return $items;
}

/**
 * Callback para mimodulo_mi_accion.
 */
function mimodulo_mi_accion($parameter1, $parameter2) {
  // Realizar la acción requerida.
}

Con eso simplemente, tenemos una acción de rules disponible.

Como podemos ver; el API de rules es bastante sencillo y muy útil para nuestras tareas cotidianas; y de esta forma también evitamos meter código en la base de datos.

Éxitos!!!

En la parte 4 de esta serie hablaremos acerca de views_bulk_operations y crearemos una acción personzalida para utilizar en con este módulo.

Blog Logo

Kevin Jesús Porras Zumbado

Drupal Backend Developer y un poco de site-builder. Me gustan los retos con las tecnologías y siempre aprender cosas nuevas.


Published

blog comments powered by Disqus
Image

Blog de Kporras07

Un intento personal de documentación

Back to Overview