Fork me on GitHub






Zones de texte dynamiques dans les formulaires.
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Par défaut, la taille en largeur des zones de texte dans un formulaire est prédéfinie. Une petite astuce pour la rendre dynamique (sa largeur s'ajuste automatiquement à la taille de la fenêtre):

Le principe est d'encapsuler l'élément textarea du formulaire dans une div et d'appliquer une classe css à celle-ci.
Exemple pour l'élément formdhtmltextarea mais adaptable aussi facilement à l'élément formtextarea.

Editer le fichier /class/xoopsform/formdhtmltextarea.php
Dans la fonction render(), remplacer la ligne 158 (pour Xoops 2.5.6):

$ret .= "<textarea id='" $this->getName() . "' name='" $this->getName() . "' title='"$this->getTitle() . "' onselect="xoopsSavePosition('" . $this->getName() . "');" onclick="xoopsSavePosition('" . $this->getName() . "');" onkeyup="xoopsSavePosition('" . $this->getName() . "');" cols='" $this->getCols() . "' rows='" $this->getRows() . "'" $this->getExtra() . ">" $this->getValue() . "</textarea><br />n";

par:
$ret .= "<div class='textwrapper'><textarea id='" $this->getName() . "' name='" $this->getName() . "' title='"$this->getTitle() . "' onselect="xoopsSavePosition('" . $this->getName() . "');" onclick="xoopsSavePosition('" . $this->getName() . "');" onkeyup="xoopsSavePosition('" . $this->getName() . "');" cols='" $this->getCols() . "' rows='" $this->getRows() . "'" $this->getExtra() . ">" $this->getValue() . "</textarea></div><br />n";

Dans le fichier style.css de votre thème ou (directement dans xoops.css) rajouter les lignes suivantes pour définir les classes nécessaires (à adapter éventuellement selon le théme utilisé):
textarea width:100%;}
.
textwrapper border:0pxmargin-right:10pxpadding:1px;}

NB: Tous les formulaires n'étant pas forcément écrits de la même façon, vérifiez dans le code de celui-ci que la taille de l'élément 'zone de texte' n'est pas fixée à une certaine valeur (exemple ci-dessous 50)
$tx = new XoopsFormDhtmlTextArea'','tx'$tx,15,50);
Le cas échéant, la modifier comme suit:
$tx = new XoopsFormDhtmlTextArea'','tx'$tx,15,'100%');

Et voilà! vos zones de texte se redimensionnement maintenant automatiquement.

Posté le : 18/04/2014 18:22

Open in new window

Xoops 2.5.7.2 - Debian 8.2 - Apache 2.4.10 - MySQL 5.5.47 - Php 5.6.17
Partager Twitter Partagez cette article sur GG+
Re: Zones de texte dynamiques dans les formulaires.
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
Pour info, le '50' que tu remplace par '100%' correspond au nombre de caractères sur une ligne. L'attribut "cols" doit être un entier supérieur à 0.

Donc ceci provoque une erreur HTML (4 et 5), suivant le DOCTYPE utilisé dans le thème (et a fortiori le navigateur) les comportements d'affichage seront différents.
Si vous le voulez dynamique, il faut intervenir sur le '50' donc plutôt comme ceci :

Au lieu d'utiliser ce modèle pour créer un textarea
$tx = new XoopsFormDhtmlTextArea'','tx'$tx,15,50);


utilise cet exemple
$tx = new XoopsFormDhtmlTextArea'','tx'$tx,15,$width_textarea);


et dans le fichier ./header.php ou ./admin/admin_header (pour le coté admin)
tu rajoute la ligne suivante :
$width_textarea 70;


De cette façon tu peux régler la largeur dynamiquement.
Ceci est la méthode la plus simple, sinon jQuery fonctionne aussi très bien.

Posté le : 18/04/2014 19:52
Partager Twitter Partagez cette article sur GG+
Re: Zones de texte dynamiques dans les formulaires.
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Merci montuy337513 pour ton explication.
Citation :
Donc ceci provoque une erreur HTML (4 et 5), suivant le DOCTYPE utilisé dans le thème
Je me suis demandé pourquoi cela n'avait pas l'air de gêner les navigateurs (sauf IE que je n'ai pas essayé). En examinant le code source de la page, il s’avère apparemment que ceux-ci ignorent tout simplement le signe %.
J'ai donc essayé avec 100 puis 1000 et ça fonctionne ... J'en ai conclu que la zone de texte devait être définie plus grande que la div qui la contient au départ, ensuite, elle se cale toute seule sur la dimension de la div au chargement de la page.
Donc avec:
$tx = new XoopsFormDhtmlTextArea'','tx'$tx,15,'1000');
pas de risque d'erreur.

Merci également pour ta solution, je vais la tester de ce pas

Posté le : 18/04/2014 21:34

Open in new window

Xoops 2.5.7.2 - Debian 8.2 - Apache 2.4.10 - MySQL 5.5.47 - Php 5.6.17
Partager Twitter Partagez cette article sur GG+
Re: Zones de texte dynamiques dans les formulaires.
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
un
textarea{width100%;}

ou
textarea{width200px;}

dans le css devrai fonctionner tout aussi bien sans devoir modifier le fichier class (la deuxième fonctionne sans problème, je l'utilise)

Posté le : 18/04/2014 21:38
Partager Twitter Partagez cette article sur GG+
Re: Zones de texte dynamiques dans les formulaires.
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
J'ai essayé les deux, chez moi cela ne fonctionne pas (sauf le premier à condition que la taille du textarea dans l'élément de formulaire soit plus grande que la div.

Posté le : 18/04/2014 21:44

Open in new window

Xoops 2.5.7.2 - Debian 8.2 - Apache 2.4.10 - MySQL 5.5.47 - Php 5.6.17
Partager Twitter Partagez cette article sur GG+
Re: Zones de texte dynamiques dans les formulaires.
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
oui la priorité est le nombre de caractères par ligne (attribut cols) ensuite la largeur en pixels.

j'ai pas essayé, mais min-width au lieu de width devrai peut-être prioritaire. Ton thème doit être impérativement en HTML5 donc choix du DOCTYPE très important, donc ne fonctionne pas avec le thème par défaut de Xoops.

Posté le : 18/04/2014 21:56
Partager Twitter Partagez cette article sur GG+
Re: Zones de texte dynamiques dans les formulaires.
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Citation :
j'ai pas essayé, mais min-width au lieu de width devrai peut-être prioritaire
Je vais faire un test.
Citation :
Ton thème doit être impérativement en HTML5 donc choix du DOCTYPE très important, donc ne fonctionne pas avec le thème par défaut de Xoops.
Mon truc fonctionne bien aussi avec le thème par défaut.

Posté le : 18/04/2014 22:02

Open in new window

Xoops 2.5.7.2 - Debian 8.2 - Apache 2.4.10 - MySQL 5.5.47 - Php 5.6.17
Partager Twitter Partagez cette article sur GG+
Re: Zones de texte dynamiques dans les formulaires.
Régulier
Inscrit: 10/09/2007 11:51
Messages: 476
Salut

Mille fois merci ça fait des heures que j'essayais de réduire la largeur du textarea qui dépassait de mon theme sans succés,évidement moi je changeais la valeur width et rien ne se passait,j'ai chercher dans les css,les fichier php du module,la misére. et grace à ton message j'ai changé la valeur cols et miracle ça fonctionne.

Encore merci,j'ai perdu assez de temps avec ça!!

Posté le : 23/05/2014 13:11
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

25 Personne(s) en ligne (18 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 25 | Plus ...