Jump to content

Funcionamiento de la lista despegable en el registro de usuario


JuanJo Tech

Recommended Posts

Hola,

 

Estudiando como se generan las  listas despegables de paises/ provincias en el registro de usuarios encuentro esta linea en el country.php:

 

$countries[$row['id_country']]['states'][] = $row;

 

Alguien puede ayudarme a entender exactamente qué es 'states'.

 

Saludos y gracias!

Link to comment
Share on other sites

Hola,

 

Estudiando como se generan las  listas despegables de paises/ provincias en el registro de usuarios encuentro esta linea en el country.php:

 

$countries[$row['id_country']]['states'][] = $row;

 

Alguien puede ayudarme a entender exactamente qué es 'states'.

 

Saludos y gracias!

 

Estados/províncias

Link to comment
Share on other sites

Hola joseantgv,

 

Gracias por tu respuesta, pero mi pregunta esta relacionada directamente con el origen de esa variable 'states', imagina que en el registro de un usuario quieres incluir una nueva lista despegable, que a la vez interactue con lo seleccionada en otra, es decir, tal y como funcionan Paises y provincias (si seleccionas un pais se cargan las provinciasde ese pais), entiendo toda la logica excepto qué es y de donde viene ese campo 'states'.

 

Saludos,

Edited by JuanJo Tech (see edit history)
Link to comment
Share on other sites

En la funcion getstates  de esa class tienes esto

**
	 * @brief Return available countries
	 *
	 * @param integer $id_lang Language ID
	 * @param boolean $active return only active coutries
	 * @param boolean $contain_states return only country with states
	 * @param boolean $list_states Include the states list with the returned list
	 *
	 * @return Array Countries and corresponding zones
Link to comment
Share on other sites

Hola Antonio,

 

Gracias por responder,  en la siguiente función:

 

public static function getCountries($id_lang, $active = false, $contain_states = false, $list_states = true)
 {
  $countries = array();
  $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
  SELECT cl.*,c.*, cl.`name` country, z.`name` zone
  FROM `'._DB_PREFIX_.'country` c '.Shop::addSqlAssociation('country', 'c').'
  LEFT JOIN `'._DB_PREFIX_.'country_lang` cl ON (c.`id_country` = cl.`id_country` AND cl.`id_lang` = '.(int)$id_lang.')
  LEFT JOIN `'._DB_PREFIX_.'zone` z ON (z.`id_zone` = c.`id_zone`)
  WHERE 1'.($active ? ' AND c.active = 1' : '').($contain_states ? ' AND c.`contains_states` = '.(int)$contain_states : '').'
  ORDER BY cl.name ASC');
  foreach ($result as $row)
   $countries[$row['id_country']] = $row;

  if ($list_states)
  {
   $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'state` ORDER BY `name` ASC');
   foreach ($result as $row)
    if (isset($countries[$row['id_country']]) && $row['active'] == 1)
     
$countries[$row['id_country']]['states'][] = $row;
  }
  return $countries;
 }

 

Y aquí es donde no entiendo como construye el array en función de la query, identifico todos los campos, por ejemplo id_country es un campo de la tabla PS_COUNTRY y en la tabla PS_COUNTRY_LANG, lo que no acabo de entender es de donde se obtiene el campo 'states' ya que no esta implicado en ninguna de los campos de las tablas de la query, tampoco lo encuentro declarado como una variable....

 

Saludos y gracias.

Link to comment
Share on other sites

No he debugado la función, pero creo que ese array será de la siguiente forma:

countries
    => [1]
            => [states]
                        => "La Coruña"
                        => "Badajoz"
                        => ...
    => [2]
            => [states]
                        => "Porto"
                        => ...

"states" es el nombre de la key, no tiene ningún valor! Luego te servirá para acceder a ese array.

Link to comment
Share on other sites

joseantgv,

pero....¿Quieres decir que funcionaría igual si llamamos a esa key con otro nombre? por ejemplo, si en vez de 'states' lo llamo 'provincias':

 

          $countries[$row['id_country']]['provincias'][] = $row;

 

Entiendo que no funciona, por eso lo que necesito es saber es donde lo declara o como lo obtiene...(quiero reproducir ese comportamiento, es decir que en función de un valor me filtre un segundo campo en una nueva lista.)

.

Gracias

Link to comment
Share on other sites

Pues sí, debería, lo que pasa que todas las funciones que luego esperen que ese array tenga el valor 'states' no funcionarán. Igualmente pon antes del return:

var_dump($countries);

y mira el formato de ese array, a ver si todo lo que te he dicho es mentira  :D

Link to comment
Share on other sites

  • nadie locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...