JoysticK Posted March 24, 2011 Share Posted March 24, 2011 Buenas señores, ¿ alguien sabría decirme que modificación tendría que realizar en PS 1.4 para que en la ficha de registro de nuevo cliente el campo DNI sea obligatorio y no opcional ? ¿ tiene ps 1.4 alguna opción para activar esto sin modificar los tpl ?Gracias de antemano por vuestro tiempo Link to comment Share on other sites More sharing options...
kristianmu Posted March 24, 2011 Share Posted March 24, 2011 Estoy interesad en lo mismo!Lo que he encontrado es modificar la traducción de "Addres(2)" Por DNI/NIF/NIE y en template poner obligatorio. Ya se que no es lo que buscas ni yo tampoco, preferiría que fuera por administración..A ver si alguien más puede aportar algo! Saludos! Link to comment Share on other sites More sharing options...
JoysticK Posted March 24, 2011 Author Share Posted March 24, 2011 Hombre es una opción, algo chapuzera pero el apaño lo da seguro, vamos a esperar a ver si alguien nos da más datos Link to comment Share on other sites More sharing options...
kristianmu Posted March 24, 2011 Share Posted March 24, 2011 Bueno ya lo he solucionado, he modificado el controlador de autenticacion de la carpeta controlles/authController.phpEn el apartado de dni he dividido el IF que hay en 2, para poder tratar el error por separado, como se hace con el resto ce campos. Ahora no lo tengo delante, pero si quieres me mandas un mensaje privado y mañana te lo contesto, y si eso ya lo publico aquí también. Saludos! Link to comment Share on other sites More sharing options...
sersanm2 Posted March 25, 2011 Share Posted March 25, 2011 Yo lo que he hecho es en "authentication.php" cambiar el trozo de código que valida el DNI (lo que he hecho es dividir el IF en 2). if(Tools::getValue('dni') == NULL) { $errors[] = Tools::displayError('DNI isn\'t valid'); } if ($validateDni != 1) { $error = array( 0 => Tools::displayError('DNI isn\'t valid'), -1 => Tools::displayError('this DNI has been already used'), -2 => Tools::displayError('NIF isn\'t valid'), -3 => Tools::displayError('CIF isn\'t valid'), -4 => Tools::displayError('NIE isn\'t valid') ); $errors[] = $error[$validateDni]; } Link to comment Share on other sites More sharing options...
kristianmu Posted March 25, 2011 Share Posted March 25, 2011 Buenas de nuevo, te paso por aquí la "solución" y así a ver si ayudamos a más genteLo que hice fué modificar la parte donde valida el DNI en el AuthController.php como ya te comenté: /* if (Country::isNeedDniByCountryId($address->id_country) AND !Tools::getValue('dni') AND !Validate::isDniLite(Tools::getValue('dni'))) $this->errors[] = Tools::displayError('Identification number is incorrect or has already been used.'); elseif (!Country::isNeedDniByCountryId($address->id_country)) $address->dni = NULL; */ //------------------------ DNI -------------------------- if (Country::isNeedDniByCountryId($address->id_country)) { if(!Tools::getValue('dni') or !Validate::isDniLite(Tools::getValue('dni'))) { $this->errors[] = Tools::displayError(''.Tools::displayError('Introduzca el DNI/NIF/NIE').''); } } elseif (!Country::isNeedDniByCountryId($address->id_country)) $address->dni = NULL; //------------------------ DNI -------------------------- Si te fijas, la primera parte que esta todo comentado, es la forma antigua de tratar el dni (línea 125 del -php), la segunda parte es la que obliga a rellenar el dni para poder hacer el registro. Ten en cuenta que en la ficha del pais (en transportes-Paises) hay que poner que requiere el numero de de identificación fiscal. Bueno a ver si te ayuda! Link to comment Share on other sites More sharing options...
kristianmu Posted March 25, 2011 Share Posted March 25, 2011 Yo lo que he hecho es en "authentication.php" cambiar el trozo de código que valida el DNI (lo que he hecho es dividir el IF en 2). if(Tools::getValue('dni') == NULL) { $errors[] = Tools::displayError('DNI isn\'t valid'); } if ($validateDni != 1) { $error = array( 0 => Tools::displayError('DNI isn\'t valid'), -1 => Tools::displayError('this DNI has been already used'), -2 => Tools::displayError('NIF isn\'t valid'), -3 => Tools::displayError('CIF isn\'t valid'), -4 => Tools::displayError('NIE isn\'t valid') ); $errors[] = $error[$validateDni]; } Justo acabo de comentar algo parecido jeje Link to comment Share on other sites More sharing options...
sersanm2 Posted March 25, 2011 Share Posted March 25, 2011 Yo lo que he hecho es en "authentication.php" cambiar el trozo de código que valida el DNI (lo que he hecho es dividir el IF en 2). if(Tools::getValue('dni') == NULL) { $errors[] = Tools::displayError('DNI isn\'t valid'); } if ($validateDni != 1) { $error = array( 0 => Tools::displayError('DNI isn\'t valid'), -1 => Tools::displayError('this DNI has been already used'), -2 => Tools::displayError('NIF isn\'t valid'), -3 => Tools::displayError('CIF isn\'t valid'), -4 => Tools::displayError('NIE isn\'t valid') ); $errors[] = $error[$validateDni]; } Justo acabo de comentar algo parecido jeje Verdad no lo había visto!, sorry. Link to comment Share on other sites More sharing options...
Sawe Posted March 25, 2011 Share Posted March 25, 2011 Hola buenas,Estoy probando la nueva version 1.4 y he hecho los cambios que comentais aqui.Cuando he provado de introducir un dni he puesto cuanquier cosa para que me diera error.Mi sorpresa ha sido que ponga lo que ponga en el campo dni me lo da por bueno, cuando me deberia decir que el dni es incorrecto.Me he sorprendido aun más cuando al volver al codigo por defecto pasaba lo mismo. juas juas.¿Os pasa lo mismo o es al bug de servidor?Gracias Link to comment Share on other sites More sharing options...
JoysticK Posted March 25, 2011 Author Share Posted March 25, 2011 Acabo de probarla Sawe y tienes razón, la verificación que realizaba en la versión 1.3 para comprobar que el dni es correcto, ahora en la 1.4 no la realiza...Por un lado incluso me alegro, ese campo daba un poco de "por culo" cuando topamos con un cliente torpe... Link to comment Share on other sites More sharing options...
JoysticK Posted March 25, 2011 Author Share Posted March 25, 2011 KristianMM, ya he modificado el fichero tal y como indicas y funciona a la perfección, gracias Link to comment Share on other sites More sharing options...
Tecniloco Posted March 29, 2011 Share Posted March 29, 2011 Hola, en Back Office>> Transporte>> Países hay una opción para requerir el Número de identificación fiscal por paises (¿Necesita el número de identificación fiscal?) ¿es que no funciona? .. saludos TECNILOCO. Link to comment Share on other sites More sharing options...
kristianmu Posted March 29, 2011 Share Posted March 29, 2011 Hola, en Back Office>> Transporte>> Países hay una opción para requerir el Número de identificación fiscal por paises (¿Necesita el número de identificación fiscal?) ¿es que no funciona? .. saludos TECNILOCO. Te lo pide pero no te lo hace obligatorio por defecto, como dices tu "no funciona" Link to comment Share on other sites More sharing options...
Tecniloco Posted March 29, 2011 Share Posted March 29, 2011 Pués habrá que hacer que funcione.. saludos tecniloco. Link to comment Share on other sites More sharing options...
kristianmu Posted March 29, 2011 Share Posted March 29, 2011 Con lo que yo he posteado funciona obligándote a escribir algo, pero falta depurarlo un poco ya que si escribes lo que sea, note lo trata como un dni, la función que mira el DNI Validate::isDniLite(Tools::getValue('dni') no se si acaba de funcionar bien, pero con lo que puse yo funciona parcialmente Link to comment Share on other sites More sharing options...
xacoso Posted April 3, 2011 Share Posted April 3, 2011 Creo que he encontrado la solución definitiva a este tema!Sin modificar el código fuente de ningún "Controller", es decir, tal y como vienen (deshacer la modificación que habéis realizado), haced lo siguiente:- Activar lo siguiente:Back Office >> Transporte >> Países >> España >> ¿Necesita el número de identificación fiscal? >> SI* Esto hace que se muestre en el formulario de registro la casilla de DNI.Back Office >> Clientes >> Direcciones >> Parámetros avanzados >> Campos obligatorios >> dni* Esto hace que el campo DNI sea obligatorio.Con esto ya tendremos solucionado el problema de que el DNI sea obligatorio, y sin necesidad de modificar ningún fichero fuente...Aún así, continuaremos con el problema del formato. Para solucionar esto, no hay otra manera que modificar ficheros del CORE, por lo que debemos ir al fichero:* ..\classes\Validate.phpY aquí realizar la siguiente modificación: static public function isDniLite($dni) { /* Validació DNI - INI */ //return empty($dni) OR (bool)preg_match('/^[0-9a-z-.]{1,16}$/Ui', $dni); return empty($dni) OR (bool)preg_match('/[a-zA-Z0-9]{1}[0-9]{7}[a-zA-Z0-9]{1}/', $dni); /* Validació DNI - FIN */ } De esta manera podremos insertar los siguientes formatos:* NNNNNNNNL (DNI)* LNNNNNNNL (NIE)* LNNNNNNNN (NIF)Y para mayor control sobre la longitud de este campo, deberemos ir al fichero:* ..\classes\Address.phpY realizar la siguiente modificación: /* Validació DNI - INI */ //'other' => 300, 'phone' => 16, 'phone_mobile' => 16, 'dni' => 16); 'other' => 300, 'phone' => 9, 'phone_mobile' => 9, 'dni' => 9); /* Validació DNI - FIN */ Y así solo permitiremos insertar 9 caracteres en el campo 'dni' (y de paso en los números de teléfono... jeje... ).Espero que a alguien le resulte de ayuda, ya que yo llevo toda la tarde peleándome con esto...Por cierto, podéis verlo funcionando en:>> http://www.elpalaciodelsexo.com (en construcción)Un saludo! Link to comment Share on other sites More sharing options...
JoysticK Posted April 4, 2011 Author Share Posted April 4, 2011 Gracias xacoso, esta tarde me pondré a probarlo y te cuento Link to comment Share on other sites More sharing options...
kristianmu Posted April 4, 2011 Share Posted April 4, 2011 Habrá que testearlo jeje!Gracias por el aporte y un saludo! Link to comment Share on other sites More sharing options...
Yoriel79 Posted May 8, 2011 Share Posted May 8, 2011 Hola.Si lo cambiamos en le BO todo esto funciona bien siempre y cuando el país de procedencia de la persona que se registra requiera DNI, si no es así, aun desapareciendo el campo, te pide que metas DNI para poder registrar, y claro, es imposible hacerlo si no está el campo por ningun lado. Resultado? Los potenciales clientes del resto del mundo no se pueden registrar en nuestra tienda.Saludos. Link to comment Share on other sites More sharing options...
PresTeamShop Posted May 8, 2011 Share Posted May 8, 2011 Buenas.Para solucionar el problema.Se tiene que tomar la solucion de KristianMM y juntarlas con la solucion de xasoco (Solo tomar la validacion del DNI y la longitud del DNI).Porque si solo se toma solo la solucion de xacoso, pasara lo que le sucedio a Yoriel79Yo uní las dos soluciones y me funciono todo correctamente.Saludos. Link to comment Share on other sites More sharing options...
adrirg2424 Posted May 11, 2011 Share Posted May 11, 2011 Creo que he encontrado la solución definitiva a este tema!Sin modificar el código fuente de ningún "Controller", es decir, tal y como vienen (deshacer la modificación que habéis realizado), haced lo siguiente:- Activar lo siguiente:Back Office >> Transporte >> Países >> España >> ¿Necesita el número de identificación fiscal? >> SI* Esto hace que se muestre en el formulario de registro la casilla de DNI.Back Office >> Clientes >> Direcciones >> Parámetros avanzados >> Campos obligatorios >> dni* Esto hace que el campo DNI sea obligatorio.Con esto ya tendremos solucionado el problema de que el DNI sea obligatorio, y sin necesidad de modificar ningún fichero fuente...Aún así, continuaremos con el problema del formato. Para solucionar esto, no hay otra manera que modificar ficheros del CORE, por lo que debemos ir al fichero:* ..\classes\Validate.phpY aquí realizar la siguiente modificación: static public function isDniLite($dni) { /* Validació DNI - INI */ //return empty($dni) OR (bool)preg_match('/^[0-9a-z-.]{1,16}$/Ui', $dni); return empty($dni) OR (bool)preg_match('/[a-zA-Z0-9]{1}[0-9]{7}[a-zA-Z0-9]{1}/', $dni); /* Validació DNI - FIN */ } De esta manera podremos insertar los siguientes formatos:* NNNNNNNNL (DNI)* LNNNNNNNL (NIE)* LNNNNNNNN (NIF)Y para mayor control sobre la longitud de este campo, deberemos ir al fichero:* ..\classes\Address.phpY realizar la siguiente modificación: /* Validació DNI - INI */ //'other' => 300, 'phone' => 16, 'phone_mobile' => 16, 'dni' => 16); 'other' => 300, 'phone' => 9, 'phone_mobile' => 9, 'dni' => 9); /* Validació DNI - FIN */ Y así solo permitiremos insertar 9 caracteres en el campo 'dni' (y de paso en los números de teléfono... jeje... ).Espero que a alguien le resulte de ayuda, ya que yo llevo toda la tarde peleándome con esto...Por cierto, podéis verlo funcionando en:>> http://www.elpalaciodelsexo.com (en construcción)Un saludo! Hola buenasHe estado viendo tu solucion para poner el DNI obligatorio en la 1.4, pero lamentablemente uso la 1.37 y esas opciones no me salen disponibles .Sabes si hay alguna solucción para mi version?Por cierto que modulo de redes sociales usas en tu página?Muchas Gracias Link to comment Share on other sites More sharing options...
Yoriel79 Posted May 11, 2011 Share Posted May 11, 2011 Hola.Funciona, pero lo que no hace es comprobar si es real ese numero de DNI o es inventado.Alguien sabe como se puede hacer para que lo verifique?Gracias Link to comment Share on other sites More sharing options...
logz05 Posted July 19, 2012 Share Posted July 19, 2012 (edited) Para España he encontrado una solución de validar el DNI. En /classes/Validate.php encuentra la función isDniLite aprox linea 912 en 1.4.8 y cambiarlo a lo siguiente: public static function isDniLite($dni) { //return empty($dni) OR (bool)preg_match('/^[0-9A-Za-z-.]{1,16}$/U', $dni); $numeros = substr($dni, 0, -1); $letra = substr($dni, -1, 1); if (substr("TRWAGMYFPDXBNJZSQVHLCKE",$numeros%23,1) == $letra) return true; else return false; } Ojo que eso usa el algoritmo de España entonces solo vale para tiendas que unicamente venden en España Edited July 19, 2012 by logz05 (see edit history) 1 Link to comment Share on other sites More sharing options...
wemade Posted August 21, 2012 Share Posted August 21, 2012 Para España he encontrado una solución de validar el DNI. En /classes/Validate.php encuentra la función isDniLite aprox linea 912 en 1.4.8 y cambiarlo a lo siguiente: public static function isDniLite($dni) { //return empty($dni) OR (bool)preg_match('/^[0-9A-Za-z-.]{1,16}$/U', $dni); $numeros = substr($dni, 0, -1); $letra = substr($dni, -1, 1); if (substr("TRWAGMYFPDXBNJZSQVHLCKE",$numeros%23,1) == $letra) return true; else return false; } Ojo que eso usa el algoritmo de España entonces solo vale para tiendas que unicamente venden en España Hola, he realizado ese proceso para validar el DNI en Chile (rut), pero modifico esa función, y después de guardar el archivo y subirlo al servidor, este muestra tanto el BO como el FO en blanco. Hiciste algo con las variables (las registraste en otro archivo o algo)? Saludos y gracias. Link to comment Share on other sites More sharing options...
logz05 Posted August 27, 2012 Share Posted August 27, 2012 Hola Wemade, No cambie nada más.....si tienes una página en blanco suena que has olvidado una terminación en la función cuando lo cambiaste.... Un saludo Link to comment Share on other sites More sharing options...
resplandor2010 Posted August 27, 2012 Share Posted August 27, 2012 Hola: He hecho la modificación aquí señalada, pero veo que no acaba de funcionar correctamente, por lo menos en mi caso. La cuestión, es que si pongo la letra del dni en minuscula, no lo acepta, con lo cual puede confundir a la persona que se está regsitrando. También si está mal en dni, a mi me salen 2 avisos dni es incorrecto número de identificación incorrecto o ya utilizado La verdad, es que me gustaría que funcionase correctamente, pues es algo muy útil. Un saludo. Link to comment Share on other sites More sharing options...
MarcusRB Posted September 9, 2012 Share Posted September 9, 2012 Hola: He hecho la modificación aquí señalada, pero veo que no acaba de funcionar correctamente, por lo menos en mi caso. La cuestión, es que si pongo la letra del dni en minuscula, no lo acepta, con lo cual puede confundir a la persona que se está regsitrando. También si está mal en dni, a mi me salen 2 avisos dni es incorrecto número de identificación incorrecto o ya utilizado La verdad, es que me gustaría que funcionase correctamente, pues es algo muy útil. Un saludo. Hay que utilizar un "input transform UpperCase" y la variable la llamas en php, así que todo lo transforma en mayúscula y funciona correctamente. Link to comment Share on other sites More sharing options...
logz05 Posted November 20, 2012 Share Posted November 20, 2012 Hola a Todos Para PS 1.5.2 para validar el DNI/CIF/NIF/NIE Hay que cambiar el function isDNILite (aprox. linea 846) en /classes/Validate.php por el código abajo. Ojo solo funciona para España public static function isDniLite($dni) { $cif = strtoupper($dni); for ($i = 0; $i < 9; $i ++) { $num[$i] = substr($cif, $i, 1); } //si no tiene un formato valido devuelve error if (!preg_match('/((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)/', $cif)) { return false; } //comprobacion de NIFs estandar if (preg_match('/(^[0-9]{8}[A-Z]{1}$)/', $cif)) { if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($cif, 0, 8) % 23, 1)) { return true; } else { return false; } } //algoritmo para comprobacion de codigos tipo CIF $suma = $num[2] + $num[4] + $num[6]; for ($i = 1; $i < 8; $i += 2) { $suma += substr((2 * $num[$i]),0,1) + substr((2 * $num[$i]), 1, 1); } $n = 10 - substr($suma, strlen($suma) - 1, 1); //comprobacion de NIFs especiales (se calculan como CIFs o como NIFs) if (preg_match('/^[KLM]{1}/', $cif)) { if ($num[8] == chr(64 + $n) || $num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($cif, 1, 8) % 23, 1)) { return true; } else { return false; } } //comprobacion de CIFs if (preg_match('/^[ABCDEFGHJNPQRSUVW]{1}/', $cif)) { if ($num[8] == chr(64 + $n) || $num[8] == substr($n, strlen($n) - 1, 1)) { return true; } else { return false; } } //comprobacion de NIEs //T if (preg_match('/^[T]{1}/', $cif)) { if ($num[8] == preg_match('/^[T]{1}[A-Z0-9]{8}$/', $cif)) { return true; } else { return false; } } //XYZ if (preg_match('/^[XYZ]{1}/', $cif)) { if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr(str_replace(array('X','Y','Z'), array('0','1','2'), $cif), 0, 8) % 23, 1)) { return true; } else { return false; } } //si todavia no se ha verificado devuelve error return false; } Este código funcionara en 1.4 tambien. Es mucho más exhaustivo del código anterior ya que comprueba todos los formatos. El código viene directamente desde http://bulma.net/bod...nIdNoticia=2248 Link to comment Share on other sites More sharing options...
logz05 Posted January 11, 2013 Share Posted January 11, 2013 This file is overwritten in the 1 - click upgrade and will need to be changed. Link to comment Share on other sites More sharing options...
Recommended Posts