Jump to content

[Résolu] Forcer les majuscules


Recommended Posts

Merci pour ta réponse.

J'ai essayé mais il subsiste le nom et le prénom de l'adresse qui restent en minuscule.

/* adresses */
div.addresses {
   border: 1px solid #B34A35;
   background: #FFFFFF /*url('../img/form_bg.jpg') repeat-x top left*/;
   padding: 0.6em 0.6em 1.5em 0.6em;
   margin-left: 1em;
   position:relative;
   width:544px;
   text-transform:uppercase;
}
div.addresses h3 { margin: 0; }
div.addresses p.checkbox input{
   margin-top:0!important;
   margin-top:-3px;
   text-transform:uppercase;
}
ul.address {
   background-color:white;
   float:left;
   list-style-image:none;
   list-style-position:outside;
   list-style-type:none;
   margin-left:1.7em;
   padding-bottom:0.6em;
   margin-bottom:1em;
   position:relative;
   width:262px;
   text-transform:uppercase;
}

ul.address li {
   padding-left: 1.4em;
   margin-top: 0.6em;
   text-transform:uppercase;
}
li.address_title {
   margin-top: 0!important;
   background-color: #d0d1d5;
   color: #374853;
   font-weight: bold;
   height: 27px;
   font-size: 1.2em;
   line-height: 1.9em;
   text-transform:uppercase;
}
ul.item li.address_title { background-image: url('../img/address_alias_left.gif'); }
ul.alternate_item li.address_title { background-image: url('../img/address_alias_right.gif'); }
li.address_name, li.address_update a, li.address_delete a { color: #B14632; text-transform:uppercase; }
li.address_name, li.address_company { font-weight: bold;  text-transform:uppercase; }
li.address_update, li.address_delete {
   background: transparent url('../img/bullet_myaccount.gif') no-repeat 0 0.5em!important;
   background: transparent url('../img/bullet_myaccount.gif') no-repeat 0 0.4em;
   margin-left: 1.4em;



Pourtant tous les autre champs marchent en ayant rajouter comme dans l'exemple suivant un uppercase dans le champs concerné des tpl adresses, authentification et identity.

            {l s='SOCIETE'}

           <input type="text" class="text" id="societe" name="societe" value="{if isset($smarty.post.societe)}{$smarty.post.societe}{/if}">
*




Il y a peut-être une erreur dans mon code car ce que je copie entre les balises code de ce message ne passe pas.

En principe le code que j'ai mis est cela :

voir la pièce jointe


Mais le nom et le prénom ne veulent pas obtempérer.

35491_TRLce7NddwhqNIkNs1IP_t

Link to comment
Share on other sites

La modification de la CSS permet de faire que l'affichage soit en majuscule, mais pas l'enregistrement dans la BDD.
Donc si tu tiens vraiment a avoir la string avec la première lettre en Màj dans ta BDD tu as 2 solutions :

a) modifier l'enregistrement à la bdd fait par le core PS. C'est lourd et cela t'empêche les updates future (ou du moins ca les complexifies largement).
B) utiliser jQuery par example pour modifier, l'or du focus sur le boutton du formulaire, les champs texte spécifier .
Ex : remplacer "toto" par "Toto" => http://plugins.jquery.com/plugin-tags/uppercase (Google est ton meilleur ami).

Mais en même temps c'est pas vraiment nécessaire que les string soit en Maj. dans la BDD, du moment que tes affichages force la Maj. soit à travers la template de ton theme, soit à travers la css.

En espèrent que cela t'aide.
mike

Link to comment
Share on other sites

  • 5 months later...

Bonjour,

J'ai enfin trouvé et je vous le fait partager.

Il faut faire fi de tous les Uppercase précédemment cités, ils ne produisent pas de résultats optimums dans la BDD.

Il faut tout simplement modifier dans le fichier : /classes/Customer.php

dans : public function getFields() ligne 95 environ

$fields['lastname'] = pSQL($this->lastname);



par

$fields['lastname'] = pSQL(Tools::strtoupper($this->lastname));



et refaire la même chose avec tous les champs que l'on veut uppercaser ;-P

Et pour les adresses, c'est dans : /classes/Address.php

Voila c'est tout

  • Like 3
Link to comment
Share on other sites

  • 5 months later...
  • 10 months later...
  • 1 month later...

Bonjour, je viens de finaliser pour 1.5

 

N'ayant pas trouver dans les classes, je me suis concentré sur authentication.tpl et adress.tpl.

 

Et ça marche vraiment bien.

 

Il faut insérer un script, avant ou après le script en haut de page des tpl.

 

<script type="text/javascript">
function formatValue(element) {
element.value = element.value.toUpperCase();
}
</script>

 

Puis derrière chaque champs désiré en majuscule, il faut rajouter ceci.

 

 onkeyup="formatValue(this)" />

 

Une particularité toutefois dans authentication.tpl, il faut changer les deux champs nom et prénom qui contiennent déjà un enkeyup comme suit.

 

Remplacer :

 

<input onkeyup="$('#lastname').val(this.value);" type="text" class="text" id="customer_lastname" name="customer_lastname" value="{if isset($smarty.post.customer_lastname)}{$smarty.post.customer_lastname}{/if}" />

 

par

 

<input onkeyup= "formatValue(this)" "$('#lastname').val(this.value);" type="text" class="text" id="customer_lastname" name="customer_lastname" value="{if isset($smarty.post.customer_lastname)}{$smarty.post.customer_lastname}{/if}" />

 

et pareil pour le champs prénom.

Edited by Shogun Distribution (see edit history)
  • Like 1
Link to comment
Share on other sites

Bonjour!

 

Etrange, je n'ai pas apercu la notification dans mes emails que vous aviez répondu...

 

Merci Beaucoups SHOGUN! VOus confirmez bien que ceci force en majuscule dans la base de donnée quand un client écrit en minuscule son nom??

 

Merci beaucoup! ^^

Link to comment
Share on other sites

  • 3 weeks later...
  • 3 weeks later...

Bonjour,

 

J'ai enfin trouvé et je vous le fait partager.

 

Il faut faire fi de tous les Uppercase précédemment cités, ils ne produisent pas de résultats optimums dans la BDD.

 

Il faut tout simplement modifier dans le fichier : /classes/Customer.php

 

dans : public function getFields() ligne 95 environ

 

$fields['lastname'] = pSQL($this->lastname);

 

par

 

$fields['lastname'] = pSQL(Tools::strtoupper($this->lastname));

 

et refaire la même chose avec tous les champs que l'on veut uppercaser ;-P

 

Et pour les adresses, c'est dans : /classes/Address.php

 

Voila c'est tout

 

Opération effectuée sur 1.4.7.3. et tant pis pour la migration 1.5.x

Merci. C'était dans ma TODOList depuis des mois et ça me fait le même effet qu'un bruit gênant qui vient de s'arrêter....

Link to comment
Share on other sites

  • 5 weeks later...

Merci à m-Facilities.com pour tes compliments.

 

Je reviens vers vous chers co-commerçants...à vos souhaits :)

 

Après avoir eu coup sur coup deux inscriptions où l'adresse m'est revenue en minuscule, je me suis à nouveau penché hier sur cette problématique de presta 1.5.

 

Je n'ai malheureusement pas trouvé dans quel fichier PHP de presta je pouvais introduire ce fameux strtoupper. Mais je connais le langage PHP comme un touriste en pays étranger avec une méthode Assimil des années 70 pour s'exprimer dans la langue du pays visité.

Je suis donc partie en direction de la planète Google avec ma petite méthode en poche afin de glaner çà et là quelques infos et bouts de codes utiles.

 

Il est d'ailleurs surprenant qu'un développeur ne nous ai jamais donné un petit coup de pouce.

 

Et j'ai trouvé une solution qui contourne ce problème.

 

Cette méthode est archaïque en comparaison du script presta mais elle a l'avantage de pouvoir ignorer les manipulations sur les fichiers TPL précédemment cités dans les messages précédents et de plus nul besoin de s'inquiéter lors d'une mise à jour presta car il n'y a pas de fichier presta modifié.

 

J'ai créé un script php indépendant et dépendant d'une tache cron.

 

<?php
/*																		    */
/* Titre		  : Mettre en majuscule les champs désirés   */
/*																		    */
/* Auteur		 : Shogun Distribution												   */
/* Date édition   : 26 Janvier 2013											  */
/*																		    */


$sql_serveur = "....."; // Serveur mySQL
$sql_base = "...."; // Base de données mySQL
$sql_login = "...."; // Login de connection a mySQL
$sql_password = "...."; // Mot de passe pour mySQL

$lk = @mysql_connect($sql_serveur, $sql_login, $sql_password) OR die(mysql_error
());
@mysql_select_db($sql_base, $lk) OR die(mysql_error());

$requete1 = mysql_query("UPDATE ps_address SET alias = UPPER(alias)") OR die(
mysql_error());
$requete2 = mysql_query("UPDATE ps_address SET company = UPPER(company)") OR die(
mysql_error());
$requete3 = mysql_query("UPDATE ps_address SET lastname = UPPER(lastname)") OR die(
mysql_error());
$requete4 = mysql_query("UPDATE ps_address SET firstname = UPPER(firstname)") OR die(
mysql_error());
$requete5 = mysql_query("UPDATE ps_address SET address1 = UPPER(address1)") OR die(
mysql_error());
$requete6 = mysql_query("UPDATE ps_address SET address2 = UPPER(address2)") OR die(
mysql_error());
$requete6 = mysql_query("UPDATE ps_address SET city = UPPER(city)") OR die(
mysql_error());
$requete7 = mysql_query("UPDATE ps_customer SET company = UPPER(company)") OR die(
mysql_error());
$requete8 = mysql_query("UPDATE ps_customer SET lastname = UPPER(lastname)") OR die(
mysql_error());
$requete8 = mysql_query("UPDATE ps_customer SET firstname = UPPER(firstname)") OR die(
mysql_error());
?>

 

Remplacer les ..... par vos coordonnées de connexion.

 

On peut rajouter ou enlever autant de requêtes que l'on veut.

 

Si vous voulez tout en minuscule, remplacer les UPPER par des LOWER.

 

Pour la première lettre des noms en majuscule et le reste en minuscule, je n'ai pas encore trouvé la requête adéquate.

 

Nommez ce fichier php : uppercase.php et placez le à la racine de votre presta.

 

Éditer une tâche cron sur l'adresse http://www.monsite.com/uppercase.php à l'aide de crontab pour PrestaShop par exemple et avec une exécution toutes les minutes.

 

Voilà, toutes les minutes, les champs concernés vont se mettre en majuscule dans la base de données.

Même si un client s'inscrit tout en minuscule, le temps de traiter cette commande, tout aura été mis en majuscule.

Edited by Shogun Distribution (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Bonjour,

 

J'utilise la version 1.5.2 de Prestashop et j'aimerais aussi savoir comment faire en sorte que les noms et prénoms s'enregistrent dans la base de données avec la première lettre en majuscule et le reste en minuscule.

 

Si quelqu'un a la moindre idée, je le remercie d'avance de nous la faire partager.

Link to comment
Share on other sites

  • 2 months later...

Bien que marqué résolu, j'apporte un complément.

 

Je voulais aussi les prénoms en minuscules mais Tools:ucfirst(Tools::strtolower()) ne permet pas d'agir sur les prénoms composés comme Jean-Paul (qui reste Jean-paul, etc...)

 

Et donc tant qu'a modifier les sources, j'ai ajouté une méthode ucwords à la classe Tools en utilisant preg et une call back.

Ainsi, dans classes/Tools.php ligne 1183 (v1.4.7.3) en dessous de Tools:ucfirst j'ai ajouté le script ci dessous pris en partie sur le forum PHPFrance (ici)

 

 

// MF 22/05/2013: ajout de ucwords avec prise en charge des prenoms composes {
	static function ucwords($txt)
	{
			return preg_replace_callback('#\\W\\w#', 'Tools::_ucwords_callback', ucfirst(strtolower($txt)));
	}
	static function _ucwords_callback($m)
	{
			return strtoupper($m[0]);
	}
// MF 22/05/2013 }

 

Et dans /classes/Customer.php et /classes/Address.php

 

$fields['firstname'] = pSQL(Tools::ucwords($this->firstname));

 

Maintenant, il me reste la reprise des données en base ... que j'ajoute à ma TODOList ;)

Edited by m-Facilities.com (see edit history)
Link to comment
Share on other sites

  • 1 year later...
  • 1 month later...

Bien que marqué résolu, j'apporte un complément.

 

Je voulais aussi les prénoms en minuscules mais Tools:ucfirst(Tools::strtolower()) ne permet pas d'agir sur les prénoms composés comme Jean-Paul (qui reste Jean-paul, etc...)

 

Et donc tant qu'a modifier les sources, j'ai ajouté une méthode ucwords à la classe Tools en utilisant preg et une call back.

Ainsi, dans classes/Tools.php ligne 1183 (v1.4.7.3) en dessous de Tools:ucfirst j'ai ajouté le script ci dessous pris en partie sur le forum PHPFrance (ici)

 

 

// MF 22/05/2013: ajout de ucwords avec prise en charge des prenoms composes {
		static function ucwords($txt)
		{
				return preg_replace_callback('#\\W\\w#', 'Tools::_ucwords_callback', ucfirst(strtolower($txt)));
		}
		static function _ucwords_callback($m)
		{
				return strtoupper($m[0]);
		}
// MF 22/05/2013 }
Et dans /classes/Customer.php et /classes/Address.php

 

$fields['firstname'] = pSQL(Tools::ucwords($this->firstname));
Maintenant, il me reste la reprise des données en base ... que j'ajoute à ma TODOList ;)

 

Pourquoi  ajouter une commande dans Tools ?

 

Ça ne fonctionnerait pas directement dans les classes ?

 

 

J'ai tenté de modifier le UPPER par INITCAP mais cela ne fonctionne pas pour le SQL, je ne comprends pas pourquoi.

 

Je pense qu'il faudrait partir sur un override des fichiers concernés (dixit m-Facilities.com) avec l'intégration d'un code style :

ucfirst(strtolower($firstname));

je ne sait si la ligne est correcte mais à mon avis que c'est la seule solution pour PS 1.5.x

 

Après il faudrait tester avec ucwords à la place d'ucfirst (surtout pour les prénoms composés).

Link to comment
Share on other sites

  • 2 months later...

Bonjour,

 

J'ai enfin trouvé et je vous le fait partager.

 

Il faut faire fi de tous les Uppercase précédemment cités, ils ne produisent pas de résultats optimums dans la BDD.

 

Il faut tout simplement modifier dans le fichier : /classes/Customer.php

 

dans : public function getFields() ligne 95 environ

 

$fields['lastname'] = pSQL($this->lastname);
par

 

$fields['lastname'] = pSQL(Tools::strtoupper($this->lastname));
et refaire la même chose avec tous les champs que l'on veut uppercaser ;-P

 

Et pour les adresses, c'est dans : /classes/Address.php

 

Voila c'est tout

 

Merci pour l'astuce  ;)

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...