Translate to

Buscar

15 de julio de 2011

Acceder a los valores de un nodo con javascript


Una forma simple de hacer esto, es a través de Drupal.settings, que es un objeto siempre disponible.

Para agregar el nodo a Drupal.settings, lo hago en alguna función adecuada, por ejemplo en la implementación del hook_form_alter(), ya que allí se hacen las alteraciones de los formularios de edición de nodos.

Por ejemplo:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case 'my_node_form':
      ...
      $node = node_load($form['nid']['#value']);

      // port to javascript
      if ($node) {
        drupal_add_js(array('node' => $node), 'setting');
      }

      ...
      break;
    ...
  }
}

Luego, en algún javascript que se invoque para el tipo my_node, se puede usar algo como:

  var node = Drupal.settings.node;

  var nid = Drupal.settings.node.nid;
  var node_my_field = node.field_my_field[0].value;


Si usa Firebug, podrá encontrar el objeto Drupal en la pestaña DOM y navegar por los otros elementos disponibles en node.

13 de julio de 2011

Resolviendo el cambio de alias con views_customfield

Views Custom Field es un módulo que permite colocar PHP como contenido de un campo de una vista.

Normalmente, uno usa la variable $data para acceder a los valores de los campos que se hayan definido.

Por ejemplo, $data->nid permite obtener el valor de nodo y haciendo print_r($data) uno puede explorar otros valores que usar.

Pero hay un problema con los valores de los campos CCK. El nombre de los campos que contienen sus valores en $data corresponden a aliases que no son constantes. Por ejemplo, cuando usa filtros expuestos, podrá encontrar que ese nombre de campo en $data cambia según qué filtro esté aplicando.

Una forma de solucionar esto es usar $this->view, también disponible, para obtener el alias adecuado en cada caso. Es decir, en lugar de usar $data->some_field_alias usar $data->{$this->view->field['field_id']->field_alias}

Este es un ejemplo real:

<?php
$cliente_nid = $data->{$this->view->field['field_client_nid']->field_alias};
$pieza = $data->{$this->view->field['field_job_pieza_value']->field_alias};
$descuento = $data->{$this->view->field['field_job_descuento_value']->field_alias};
$factor = $data->{$this->view->field['field_job_factor_value']->field_alias};
$cantidad = $data->{$this->view->field['field_job_cantidad_value']->field_alias};
return mymodule_get_tarifa_final($cliente_nid, $pieza, $descuento, $factor, $cantidad);
?>

Referencias

12 de julio de 2011

Aplicando un patch en Windows

El comando patch, disponible en Linux, usualmente no está disponible en Windows. Cuando uno quiere aplicar algún patch, suele encontrar una traba de solución no tan fácil.

En lugar de las recomendaciones de instalar Cygwin, o algo parecido, alguna vez use Aptana (un derivado de Eclipse) para aplicar un parche.

Hoy estoy instalando Simpletest y la documentación indica aplicar patch -p0 < path/to/simpletest/D6-core-simpletest.patch y ya no recuerdo cómo lo hice con Aptana :-S Tampoco quisiera instalar Cygwin sólo para eso.

Esta vez, noto que tengo instalado Git para Windows (https://git-scm.com/download/win), hago click derecho sobre el directorio drupal y elijo Git Bash Here. Hago patch --help para comprobar que cuento con el comando y luego:

$ patch -p0 < sites/all/modules/simpletest/D6-core-simpletest.patch
patching file `install.php'
Hunk #1 succeeded at 19 (offset -1 lines).
patching file `includes/bootstrap.inc'
Hunk #1 succeeded at 1111 (offset -1 lines).
Hunk #3 succeeded at 1343 (offset -1 lines).
patching file `includes/common.inc'
Hunk #1 succeeded at 530 (offset -1 lines).
Hunk #2 succeeded at 2663 (offset 2 lines).
Hunk #3 succeeded at 3805 (offset 6 lines).

Ojalá le sirva de ayuda.

8 de julio de 2011

Generación modular de HTML

Actualmente, cuando desarrolla un sitio usando cierto framework, no lo puede modificar con otro. Si está metido en esto, puede parecer obvio y hasta natural. Pero, si lo vemos en perspectiva, es algo así como una limitación por diseño. Algo que se podría mejorar.
Lea el artículo original en Puroguramu: Generación modular de HTML

Más artículos