Crear Local Actions personalizadas

Events happening in the community are now at Drupal community events on www.drupal.org.
aheredia's picture

El caso es el siguiente:

Tengo un tipo de nodo artista y un tipo de nodo obra con un entity-refernce al artista.

La idea seria poder crear una "Local Action" para que cuando este viendo un artista en concreto me aparezca un link a "crear una obra" en la que ya apareciese relleno el campo de tipo entity reference.

Existe algun modulo que te permita hacer eso?

O es mejor utilizar el hook_menu_local_tasks_alter ?

Saludos

Comments

otra opción es pasarle en la

oskar_calvo's picture

otra opción es pasarle en la url o en una variable de sesión el nid del elemento que se quiere asociar.

Y con hook_form_alter comprobar si existe el valor, y si existe darlo como "default".

Oskar.

Gracias por el apunte

aheredia's picture

Gracias por el apunte Oskar
Basicamente eso es lo prentendo hacer.

La idea es crear una "local action" en el tipo artista y que ponga algo similar a "Añadir obra del artista".

He instalado el modulo Entityreference Prepopulate que permite pasar el id por la url y asi rellenar el campo. (basicamente lo que tu comentas)

Este modulo espera recibir algo similar a:
node/add/obra?field_obra_artista=49.

Con el hook_menu_local_tasks_alter ya lo tengo añadido. El unico problema con el que me estoy encontrando es la manera de construir el href no acepta los paremetros y me los rescribe con %2F y cosas asi.

Estoy viendo como pasarle los parametros

function hook_menu_local_tasks_alter(&$data, $router_item, $root_path){
  // Add action link
  if ($root_path == 'node/%' && $router_item['page_arguments'][0]->type == "artista") {
    $path = 'node/add/solicitud?field_obra_artista=49';
    $data['actions']['output'][] = array(
      '#theme' => 'menu_local_task',
      '#link' => array(
        'title' => t('Crear Obra del artista'),
        'href' => $path,
        'localized_options' => array(),
      ),
    );
  }
}

Parece que esta resuelto, la

aheredia's picture

Parece que esta resuelto, la clave estaba en pasarle la query en 'localized_options'.

function hook_menu_local_tasks_alter(&$data, $router_item, $root_path){
  // Add action link
  if ($root_path == 'node/%' && $router_item['page_arguments'][0]->type == "artista") {
    $path = 'node/add/solicitud
    $query['field_obra_artista']=49;
    $data['actions']['output'][] = array(
      '#theme' => 'menu_local_task',
      '#link' => array(
        'title' => t('Crear Obra del artista'),
        'href' => $path,
        'localized_options' => array(
          'query' => $query,
        ),
      ),
    );
  }
}

Spanish

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: