Campos dependientes

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

Hola,

Estoy iniciándome en el mundo deDrupal, y tengo una duda que a priori puede ser básica, pero que a mi al menos me esta dando quebraderos de cabeza encontrar una solución...

Usando Drupal 7, durante el alta de un nodo, en el que he añadido 2 campos personalizados uno para la provincia y otro para el municipio (listas de selección), estoy intentando configurar el nodo para que en el campo municipio, solo se muestren los valores relacionados con la provincia relacionada, y no todos los valores, como hace por defecto drupal.

He intentando conseguirlo usando los módulos, Hierachical Select, Conditional Fields, y Relations, y aunque todos estos módulos aportan funcionalidades muy buenas y relacionadas con el comportamiento deseado, ninguna acaba de conseguir exactamente esto.

Igual le estoy dando demasiadas vueltas y hay una forma mas sencilla de hacer esto, ya que a priori me parece algo bastante básico. Me gustaría que me orientaseis en como actuar en estos casos, ya que supongo esto sea una tarea habitual en el desarrollo de un sitio web.

Gracias y un saludo a toda la comunidad.

Comments

Con conditional Field puedes

nabushaitang's picture

Con conditional Field puedes hacer eso, yo tengo un nodo con un campo que es país, y si el país a mostrar es Venezuela muestra un campo y si no es Venezuela muestra otro campo diferente. Y va muy bien, donde si no se como hacer eso es en las vistas con filtros expuestos yvque dependiendo del país muestre otro campo

Gracias por la respuesta

N4N's picture

Gracias por la respuesta nabushaitang pero realmente no es lo que quiero hacer... yo solo tengo un campo hijo, lo que necesito es que los valores de ese campo se filtren en funcion del valor seleccionado en otro campo. Es decir, que si selecciono una provincia, en el campo municipios se muestren solo los municipios de esa provincia, y no todos. No busco mostrar u ocultar campos en funcion del valor de otro, que eso si que lo puedo conseguir con conditional fields.

Gracias de nuevo

Chévere, bueno, si das con

nabushaitang's picture

Chévere, bueno, si das con la solución, comparte la porfa,

hola,

luis_san's picture

hola, prueba con el modulo location. Este modulo te permite agregar campos de direccion ya sean geolocalizados o no. Entre los su camoos que te brinda estan estado y pais los cuales ya tienen el comporta.iento que quieres.

Saludos

Luis

Ok, gracias lo revisare

N4N's picture

Ok, gracias lo revisare Kandabra, pero lo de Municipio y provincia, era mas bien un ejemplo concreto, yo estaba buscando algo mas generico, un modulo que de forma generica me permitiese hacer este tipo de filtrados. Ejemplos...

Municipio --> Provincia (Localizacion)
Marca --> Modelo (Vehiculos)
Equipo --> Jugadores

En todos los casos, tengo 2 listas de seleccion y lo que quiero es que la 2ª lista (provincia, modelo, jugadores) se filtre, segun el valor seleccionado en la 1ª (Municipio, Marca, Equipo). El comportamiento por defecto en drupal es que en la 2ª lista se muestran todos los valores, es decir, todos los jugadores de todos los equipos, todos los municipios de todas las provincias, y todos los modelos de todas las marcas. Esto da al usuario la posibilidad de que seleccione por ejemplo (En el caso de vehiculos): BMW Camaro :)

He visto que este tipo de problemas se puede resolver mediante codigo (http://drupal.stackexchange.com/questions/10112/dynamic-select-list-in-t...) pero yo busco un modulo que me lo resuelva ya que me parece algo demasiado basico como para tener que resolverlo mediante codigo.

Gracias de nuevo

Hierarchical Select

hatuhay's picture

Quien hace el truco es http://drupal.org/project/hierarchical_select sin embargo la integración con Views no ha sido desarrollada en el mismo módulo sino en un módulo pago (controversial).
Personalmente lo que nosotros hacemos es:
- Crear un View con parámetros en la URL.
- Programar un formulario con los filtros expuestos y por programación llamar al Views anterior.
Esto último es más sencillo de los que suena.

Buenas tardes amigo, puedes

nabushaitang's picture

Buenas tardes amigo, puedes indicar una dirección donde podamos ver como se hace? O un ejemplo? Es que no se como hacer una views que dependiendo del país me muestre uno u otro campo.

Buenos dias por estos lares

hatuhay's picture

Un ejemplo de uso en www.goa.pe, la búsqueda lateral utiliza hierarchical select.

Los filtros en la URL se llaman filtros contaxtuales y están en las opciones avanzadas de Views, debes definir primero una URL con variables, por ejemplo listado-inmuebles/%/%

Este es el código que crea el bloque, formulario utilizando el hierachical select y busca el View.

<?php

/
* Implements hook_block_info().
*
* This hook declares what blocks are provided by the module.
*/
function goa_block_front_block_info() {
  $blocks['goa_block_front_caja'] = array(
    // info: The name of the block.
    'info' => t('Bloque de Busqueda inmuebles'),
    // Block caching options (per role, per user, etc.)
    'cache' => DRUPAL_CACHE_PER_ROLE, // default
  );
  return $blocks;
}

/

* Implements hook_block_view().
*
* This hook generates the contents of the blocks themselves.
*/
function goa_block_front_block_view($delta = '') {
  //The $delta parameter tells us which block is being requested.
  switch ($delta) {
        case 'goa_block_front_caja':
               $block['subject'] = t('Busca tu inmueble');
             $block['content'] = drupal_get_form('goa_block_front_search_block');
       break;
  }
  return $block;
}

// Crea el formulario de búsqueda

function goa_block_front_search_block($form, &$form_state) {
  $form['#id'] = 'goa_block_front_search';
  $form['#submit'][] = 'goa_block_front_search_submit';
  $form['tipo_propiedad']=array(
          '#type'=> 'select',
         '#title'=> t('Tipo de propiedad'),
          '#options'=> goa_options_vocabulary_name(3, 0, NULL),
       '#default_value' => arg(1),
      );
    
  $vocabulary = taxonomy_vocabulary_machine_name_load('zonas_propiedades');
     $vid = (int) $vocabulary->vid;
  $options_first = goa_options_vocabulary_name($vid, 0, 1);
  unset($options_first['all']);
  // If we have a value for the first dropdown from $form_state['values'] we use
  // this both as the default value for the first dropdown and also as a
  // parameter to pass to the function that retrieves the options for the
  // second dropdown.
  $selected = isset($form_state['values']['operacion']) ? $form_state['values']['operacion'] : key($options_first);

  $form['operacion'] = array(
    '#type' => 'select',
    '#title' => t('Operación'),
     '#options' => $options_first,
    '#default_value' => $selected ,
    // Bind an ajax callback to the change event (which is the default for the
    // select form type) of the first dropdown. It will replace the second
    // dropdown when rebuilt
    '#ajax' => array(
      // When 'event' occurs, Drupal will perform an ajax request in the
      // background. Usually the default value is sufficient (eg. change for
      // select elements), but valid values include any jQuery event,
      // most notably 'mousedown', 'blur', and 'submit'.
      // 'event' => 'change',
      'callback' => 'goa_block_front_dependent_dropdown_callback',
      'wrapper' => 'dropdown-second-replace',
    ),
  );

  $form['distrito'] = array(
    '#type' => 'select',
    '#title' => $options_first[$selected] . ' - ' . t('Distrito'),
    // The entire enclosing div created here gets replaced when dropdown_first
    // is changed.
    '#prefix' => '<div id="dropdown-second-replace">',
    '#suffix' => '</div>',
    // when the form is rebuilt during ajax processing, the $selected variable
    // will now have the new value and so the options will change
    '#options' => goa_options_vocabulary_name($vid, $selected, 1),
    '#default_value' => arg(2),
  );
     $form['actions']['submit'] = array('#type' => 'submit',
    '#value' => t(''),
    '#type' => 'image_button',
    '#src' => drupal_get_path('theme', 'barrio').'/images/btn-cajarural.png',
  );
       return $form;
}

function goa_block_front_dependent_dropdown_callback($form, $form_state) {
  return $form['distrito'];
}

function goa_block_front_search_submit($form, &$form_state){
  global $base_url;

  $operacion_id = $form_state['values']['operacion'];
  $distrito_id = $form_state['values']['distrito'];
  $propiedad_id = $form_state['values']['tipo_propiedad'];
  $enlace = $base_url . '/busqueda-inmuebles/'.$propiedad_id .'/'. $distrito_id ;

    drupal_goto($enlace);
    
       // $enlace = $base_url . 'busqueda-inmuebles/' . $form_state['values']['ciudad'] .'/'.$form_state['values']['categoria'];
}

function goa_options_vocabulary_name($vid, $parent, $max_depth) {
  $terms= taxonomy_get_tree($vid, $parent, $max_depth, $load_entities = FALSE);
  $items['all']= "Todo";
  foreach ($terms as $term ) {
    $items[$term->tid] = taxonomy_term_load($term->tid)->name;   
  }
  return $items;
}

Cantidad de Selects dinámicos

corncakes's picture

Excelente,...

Como podría hacerlo para me identificara la cantidad de hijos del término padre y así sacara los Selects,, estoy tratando pero no he podido..

Gracias

Yo use conditional Field,

nabushaitang's picture

Yo use conditional Field, servirá con el?

Si pero hay que entender

hatuhay's picture

Si pero hay que entender algunos conceptos.

Primero:

Conditional field lo único que hace es ocultar uno o varios campos en función al resultado de un select.
Lo que hace el código que adjunté es llenar el select2 en función al resultado del select1.

Segundo (pero en realidad primero):

Paises - Provincias
Marcas - Modelos
Y otras características de un contenido son por definición Taxonomías y no campos simples, por tanto lo "correcto" (si se puede decir) es utilizar selectores de taxonomías anidadas y no campos (fields) diferentes.

Gracias por tú aclaratoria,

nabushaitang's picture

Gracias por tú aclaratoria, si use conditional field, era lo único que conocía para ese entonces, o, los países y estados son referencia a taxonomía, cómo puedo usar esos selectores de taxonomía anidadas, disculpa la pregunta es que no tengo mucha experiencia . Gracias

Hola a todos y mil disculpas

jadsam's picture

Hola a todos y mil disculpas si lo que voy a consultar ya se respondio de alguna manera pero no me doy cuenta.
Mi problematica es la siguiente necesito utilizar varios combos (Entity reference) unos dependientes de otros. En un tipo de contenido llamado "turno agendado" tengo los campos:

  1. Zona
  2. Especialidad (Solo aquellas especialidades que se puedan brindar en la zona)
  3. Profesional (Solo aquellos profesionales que atiendan determinada especialidades en la zona previamente seleccionada)

Hasta el momento estaba intentando crear 3 tipos de contenidos "zona", "especialidad" y "profesional" que se terminaban vinculando en el tipo de contenido "turno agendado", con el objetivo final de tener un "turno agendado" con la posibilidad de seleccionar los 3 contenidos anteriores de la manera explicada anteriormente para terminar agregando fecha y hora ademas de otros campos exclusivos del contenido "turno agendado"

No he logrado que los combos se autocarguen automaticamente utilizando el valor referenciado en el combo anterior.

Llevo varias semanas investigando el tema pero no he dado con una solucion al problema. Desde ya agradecere sus comentarios.

Muchisimas gracias

Hola jadsam, Precisamente ese

N4N's picture

Hola jadsam,

Precisamente ese es el tema que estamos tratando en este hilo. Ya se han dado algunas soluciones en el hilo, pero todas pasan por la modificación mediante código del comportamiento estandar de drupal. El modulo Hierachical select, ha sido propuesto como alternativa, pero no resuelve el problema que estamos tratando, ya que ese modulo solo ocupa una única entidad, mientras que nosotros hablamos de al menos 2 entidades. Me parece extraño que no haya una forma sencilla mediante configuración de resolver esto. Es una necesidad muy habitual en cualquier aplicación web.

Gracias a todos por las aportaciones

Un saludo

Dos opciones me ocurren: Usar

creando sensaciones's picture

Dos opciones me ocurren:

Usar filtros expuestos en views, que se aplican de forma automatica a traves de Ajax. Y a la vez configurados para que tan solo muestran opciones existentes entre los resultados.
Asi no puedes configurar cual sean las combinaciones predeterminados, sino se ajusta organicamente segun el contenido existente.
Si quieres que el siguiente campo tan solo muestra opciones cuando el primero se ha aplicado, lo puedes realizar con una linea de jquery.

O montarlo enterramente con jquery, escondiendo opciones no deseados según los classes o ids de los widgets. Pero entonces no hay UI para la configuración.

¿La opción filtros expuestos

N4N's picture

¿La opción filtros expuestos en views se puede aplicar a formularios de Alta/Edición de Nodos?

No. Verdad, has preguntado

creando sensaciones's picture

No. Verdad, has preguntado por creacion de nodos y yo pensaba en su presentación.

La opción de esconder opciones con jquery a medida, si la tienes con node/add y node/x/edit.
Lo puedes introducir con

function mi_module_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'mi_form_id') { 
    drupal_add_js(drupal_get_path('module', 'mi_module') . '/js/mi_jquery.js');
  }
}

Módulo

Yaazkal's picture

Hola @N4N, creo que este módulo hace lo que necesitas: http://drupal.org/project/reference_option_limit

Saludos !

En el clavo

N4N's picture

Muchas gracias Yaazkal, diste justo en el clavo con lo que necesitaba. Este modulo es exactamente lo que andaba buscando.

Gracias por vuestra ayuda

Excelente

Yaazkal's picture

Me alegra mucho que te haya sido de ayuda :)

Estaba queriendo hacer lo

Ruidodemente's picture

Estaba queriendo hacer lo mismo instale el reference_option_limit pero no tengo la mas palida de como configurarlo ya que me amarece desabilitado el check box gracias !!!

A mi tambien me costo al

N4N's picture

A mi tambien me costo al principio configurarlo... Me ocurria li mismo con el checkbox. Al final revisando la propia pagina de documentacion del modulo, di con el problema... El truco estaba en añadir los campoS a la 2a entidad usando usando la opcion de campos existentes, no la de campos nuevos

Piensa en una relacion 1:N

Hola N4N, Chicos!, Viendo

jsiesquen's picture

Hola N4N, Chicos!,

Viendo este hilo tambien estoy buscando lo que discutieron, pero en mi caso necesito usar 3 campos los cuales:

  • Los valores del primer listado no depende de nadie, pero para los 2 siguientes listados si.
  • Los valores del segundo listado depende del valor seleccionado del primero listado.
  • Los valores del tercer listado depende del valor seleccionado del segundo listado.

N4N sobre todo quisiera me pudieras guiar de como usar el modulo option limiting, ya que no se como usarlo. En mi caso ya tengo registrado las 3 taxonomias para los listados, pero aun no se como enlazarlos. Que necesito, ojala puedas ser detallado.

Mil Gracias!

Juan Siesquen R.
Force IT Solutions / LPIC-1
@jsiesquen
Profile: http://cvgram.me/jsiesquen

hola jsiesquen, Para hacer

N4N's picture

hola jsiesquen,

Para hacer esto, lo que necesitas son los campos dependientes, no hay duda alguna...

Una vez definidas las categorias, solo tienes que ir al tipo de contenido que quieras, y añadir los campos el 1º como referencia de termino, y el 2º como entity reference. Pero usando la opción de añadir campos existentes.

Una vez añadido el 2º campo en su configuración, vas a option limiting settings, y le dices que esta vinculado al 1º

El 3º se configura exactamente igual que el 2º.

Si quieres dame acceso a tu sitio y te digo como configurarlo, o te invito al mio para que lo veas.

UN saludo

El Problema

jsiesquen's picture

Cuando intento añadir el 2° campo dentro del tipo de contenido usando la opción de campos existentes no veo el option limiting setting.... sigo intentando...

Juan Siesquen R.
Force IT Solutions / LPIC-1
@jsiesquen
Profile: http://cvgram.me/jsiesquen

Perfecto N4N

jsiesquen's picture

No tengo un sitio en linea ahora... pero si puedes invitarme seria perfecto... entonces tambien tengo que tener entity reference. Gracias por tu apoyo!

Mi correo es juan.siesquen@gmail.com

Saludos,

Juan Siesquen R.
Force IT Solutions / LPIC-1
@jsiesquen
Profile: http://cvgram.me/jsiesquen

views y reference option limit

deivis.crisanto's picture

Hola N4N sin duda es un gran modulo el que están usando yo estuve usando el hierarchical, pero no se integra con el modulo views al parecer tu no tuviste problemas con reference option limit pero yo estoy trabajando Autos con marcas y modelo y quiero hacer un filtrado con categorías y subcategorias seria genial que me compartas tu experiencia con respecto al modulo views. quiero realizar ua busqueda como la de esta pagina solo de ejemplo http://www.goa.pe/busqueda-inmuebles/21/all

PD mi pagian es la siguiente:

http://one.2cdevelopers.com/stock-1

Spanish

Group organizers

Group notifications

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

Hot content this week