Drop down list para ciudades  

 
Sergio1808
 Sergio1808
Usuario eminente

Buenas a todos,

Veréis tengo unas cuantas dudas respecto a lo que necesito hacer, pero primero os pongo al tanto:

A ver, nuestra tienda va a relaizar el tema de cotización de productos y pasarela de pagos a través de una empresa que ofrece las 2 opciones. En estos momentos estamos en pleno proceso de implementación y uno de los requisitos que tiene este webservice es el del código de cada ciudad.

En Colombia se utiliza un tipo de código que representa a cada ciudad dentro de cada estado del país (aquí se llama Departamento).

El caso es que cuando estuve repasando los campos que aparecen al usuario a la hora de añadir una dirección de envío, el campo "Ciudad" es un textbox, que el nombre de la ciudad se escribe. Entonces para evitarnos rollos de que si se escribe X ciudad con acentos, junto o separado, la idea es crear un drop down list donde una vez escogido el :
País: Colombia (de momento solo va a estar este)
Estado: Aquí hay unos 30, pero viene por defecto en una lista.
Ciudad: Según el estado que se escoja, aparecerá una lista de ciudades u otra.

Entonces si en Estado escogen "Antioquia" en Ciudad les debería aparecer sólo las ciudades asociadas al estado de Antioquia.

Bueno, ya realicé la parte pesada que es meter los casi 1200 municipios (ciudades) que componen el país, lo que hice fue duplicar la tabla "virtuemart_states", cambiarle el nombre a "virtuemart_city" y añadirle el campo "city_dane_code" que es el código que representa a cada ciudad y el campo "virtuemart_state_id" que es el Estado asociado a las ciudades.

Bueno, una parte de mis dudas viene aquí, en los Índices que hay que utilizar en la tabla "virtuemart_city"... Os adjunto una captura para que veáis cuáles son y si están bien (algo que dudo porque la Cardinalidad se les queda en 0 menos al primero.

Después de corregir esto, vendría algo creo que más complejo que es cambiar el textbox de la ciudad del frontend de la Dirección de Envío por un Drop Down List.

Alguien sabe donde se encuentra este fichero para hacerme una idea de cómo es el código para las listas de Países y Estados? Tal vez con eso de ejemplo sepa realizar lo mismo para las Ciudades.

Gracias de antemano y perdonad si no me he llegado a explicar bien.

Un saludo.

Citar
Respondido : 10/07/2012 11:13 pm
Johnny Heredia Montiel
 Johnny Heredia Montiel
Miembro Moderator

Hola Sergio1808,

Dentro de la configuración del Virtuemart deberías poder agregar al país un estado que en tu caso seria el departamento, de esta manera te debe funcionar correctamente el dropbox te adjunto una captura:

Saludos.

Si nuestra ayuda te ha sido útil, déjanos tu testimonio y mejora así el posicionamiento de tu web:
Enviar mi Testimonio
¡Gracias!.

ResponderCitar
Respondido : 11/07/2012 1:09 am

wpdoctor-revisa-la-salud-de-tu-wordpress

Sergio1808
 Sergio1808
Usuario eminente

Hola Johnny,

Si los estados (departamentos) ya están creados y asociados a la tabla de ciudades que he creado yo en la base de datos a través de phpMyadmin. Los estados ya los añadí como tu indicas.

Ahora el trabajo esta en crear el drop down list al campo Ciudad del apartado "Dirección de envío" cuando el usuario quiere realizar una compra.
Y bueno, saber si los índices de la tabla mySQL estan bien realizados para que se asocien los estados (departamentos) con las ciudades correspondientes.

Un saludo.

ResponderCitar
Respondido : 11/07/2012 1:40 am
Jordi Sala
 Jordi Sala
Miembro Admin

Hola Sergio1808,

¿ Se muestran en la captura de pantalla que ha enviado Jhon (configuración --> países), cuando pulsan en el país en cuestión [Estados] desde la administración de Virtuemart ?

Saludos

Si nuestra ayuda te sirve déjanos tu testimonio y mejora así el posicionamiento de tu web:
Enviar mi Testimonio

ResponderCitar
Respondido : 11/07/2012 8:41 am

Gestor de Contraseñas - VPN Conexión Segura - Gestor 2FA (Segundo Factor de Autenticación

Sergio1808
 Sergio1808
Usuario eminente

Para que sea más cómodo os adjunto 2 imágenes explicando bastante bien, creo, lo que quiero hacer.

En la 1ª imagen os muestro la captura del administrador de virtuemart donde podéis ver que tengo creado todos los Estados (Departamentos aquí en Colombia) y dentro de esta captura os pongo una imagen extraida del phpMyadmin de la tabla "virtuemart_city" la cual he creado manualmente y quiero que se enlace (indexe) a la tabla "virtuemart_states" que es donde estan creados los Departamentos de Colombia, para poder hacer un drop down list de las ciudades.

En la 2ª imagen os pongo donde sale el campo de Ciudad y cómo quiero que quede finalmente.
El usuario escoge Colombia, y le aparecen los estados (departamentos) una vez escoja el departamento, el campo Ciudad debe de ser un drop down list donde le salga las Ciudades asociadas (enlazadas/indexadas) a ese Departamento en concreto.

Resumiendo, quiero que en el campo Ciudad se realice exactamente el mismo proceso que se realiza al escoger un país concreto, es decir, que si pongo Colombia, salga los 32 estados que he creado, o si escojo USA salgan los tropocientos que tiene. Pues lo mismo con las ciudades, cuando escoja Colombia/Antioquia, quiero que salga una lista con las 50 (por ejemplo) ciudades que tiene este estado.

Espero haberme hecho entender un poco mejor. Perdonad por el engorro jajaja

Un saludo.

ResponderCitar
Respondido : 11/07/2012 6:25 pm
Jhon
 Jhon
Soporte CMS Webempresa Moderator

HOla Sergio

Esto no es posible configurarlo desde virtuemart y será necesario que lo programes manualmente.

Indicarte además que lo usual es llegar sólo hasta estado, más no a ciudad, esto usualmente es tipeado en la mayoría de sitios web.

Saludos.

Si nuestra ayuda te sirve déjanos tu testimonio y mejora así el posicionamiento de tu web:
Enviar mi Testimonio
¡Gracias!.

ResponderCitar
Respondido : 11/07/2012 8:55 pm

Cursos Gratuitos WordPress

Sergio1808
 Sergio1808
Usuario eminente

Hola Jhon

Si me imaginaba desde el principio que habría que hacerlo manualmente, pero no se donde se encuentran los archivos que generan este formulario de virtuemart.
Porque tomando como base los drop down list que ya están creados en el País y en los Estados, puedo realizar sin mucha dificultad el nuevo para las Ciudades.

Se que en muchos sitios se digita la ciudad, pero en este caso el transportista se basa en los códigos de la ciudad mas no en el del estado, por eso no podemos permitir que la Ciudad se escriba incorrectamente, así que la solución más efectiva es crear una lista para que el cliente escoja.

¿Sabes donde se encuentran estos archivos? Para poder empezar a trastear con el código.

Un saludo.

ResponderCitar
Respondido : 11/07/2012 9:03 pm
Jhon
 Jhon
Soporte CMS Webempresa Moderator

HOla Sergio

Revisa si tienes el siguiente archivo ya que este archivo es el que muestra la pantalla de edición de datos del usuario en vm:
templates/TU_TEMPLATE/html/com_virtuemart/user/edit_address.php

Saludos.

Si nuestra ayuda te sirve déjanos tu testimonio y mejora así el posicionamiento de tu web:
Enviar mi Testimonio
¡Gracias!.

ResponderCitar
Respondido : 11/07/2012 10:04 pm

optimiza-automaticamente-todas-las-imagenes-de-tu-wordpress

Sergio1808
 Sergio1808
Usuario eminente

Bueno, he estado revisando ese archivo, y creo, repito CREO que la "gracia" está aquí:

Spoiler

<!--<form method="post" id="userForm" name="userForm" action="" class="form-validate">-->
        
        
        
        prepareAddressDataInCart();
//             $this->assignRef('cart', $cart);
// 				vmdebug('my cart in edit_adress',$cart->BTaddress);
            if (count($this->userFields['functions']) > 0) {
                echo '' . "n";
                echo join("n", $this->userFields['functions']);
                echo '' . "n";
            }
            $corefields = VirtueMartModelUserfields::getCoreFields();
//             for ($_i = 0, $_n = count($this->userFields['fields']); $_i userFields['fields']); $_i userFields['fields']);
                } else {
                    $_field = next($this->userFields['fields']);
                }
                if ($_field['hidden'] == true) {
                    $_hiddenFields .= $_field['formcode'] . "n";
                    continue;
                }
                if ($_field['type'] == 'delimiter') {
                    if ($_set) {
                        // We're in Fieldset. Close this one and start a new
                        if ($_table) {
                            echo '	' . "n";
                            $_table = false;
                        }
                        echo '' . "n";
                    }
                    $_set = true;
                    echo '
' . "n"; echo ' ' . "n"; echo ' ' . $_field['title']; echo ' ' . "n"; continue; } if (!$_table) { // A table hasn't been opened as well. We need one here, echo ' ' . "n"; $_table = true; } $class = ''; if (in_array($_field['name'], $corefields) && $_field['name'] != 'email') { $class = 'class = "joomlaCoreField" '; } echo ' ' . "n"; echo ' ' . "n"; echo ' ' . "n"; echo ' ' . "n"; } if ($_table) { echo '
' . "n"; echo ' ' . "n"; echo ' ' . "n"; echo ' ' . $_field['formcode'] . "n"; echo '
' . "n"; } if ($_set) { echo '
' . "n"; } echo $_hiddenFields; ?>

La verdad, no tengo ni idea de qué hacer, he estado revisando varios archivos, y hay uno que se llama "state.php" dentro de 'components/com_virtuemart/controllers' el cual llama a los ID's de los estados dependiendo del ID del país, aquí está el código:

Spoiler
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die('Restricted access');

// Load the controller framework
jimport('joomla.application.component.controller');

if(!class_exists('VirtueMartModelState')) require( JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'state.php' );

class VirtueMartControllerState extends JController
{
    /**
	 * Method to display the view
	 *
	 * @access	public
	 * @author RickG, Max Milbers
	 */
	public function __construct() {
		parent::__construct();

		$stateModel = VmModel::getModel('state');
		$states = array();

		//retrieving countries id
		$countries = JRequest::getString('virtuemart_country_id');
		$countries = explode(',', $countries);

		foreach($countries as $country){
			$states[$country] = $stateModel->getStates( JFilterInput::clean($country, 'INTEGER'),true );
		}
		echo json_encode($states);

		jExit();
	}

}

Supongo que habría que realizar algo parecido para los códigos de las ciudades, pero respecto a hacer el drop down list en el formulario, estoy MUY perdido en ese código :pinch:

ResponderCitar
Respondido : 11/07/2012 11:52 pm
Johnny Heredia Montiel
 Johnny Heredia Montiel
Miembro Moderator

Hola Sergio1808,

Lamentablemente es un tema de programación por lo que indica nuestra leyenda en nuestro foro:

No ofrecemos soporte a webs alojadas en localhost ni soporte css o programación.

En todo caso el fichero que te mostró Jhon es la ruta que necesitas para cumplir con tu objetivo.

Saludos.

Si nuestra ayuda te ha sido útil, déjanos tu testimonio y mejora así el posicionamiento de tu web:
Enviar mi Testimonio
¡Gracias!.

ResponderCitar
Respondido : 12/07/2012 12:24 am

wpdoctor-revisa-la-salud-de-tu-wordpress

Sergio1808
 Sergio1808
Usuario eminente

Lo entiendo perfectamente, pues nada, me pondré a pelear con el código.

Muchas gracias a todos.

ResponderCitar
Respondido : 12/07/2012 12:30 am

Por favor Iniciar Sesión o Registro