Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2431 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Trier les valeurs d'un menu déroulant dans l'ordre ALPHA

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Trier les valeurs d'un menu déroulant dans l'ordre ALPHA

n°1968489
kameha
Posté le 23-02-2010 à 12:30:39  profilanswer
 

Bonjour à tous,
 
j'ai un menu déroulant dans une php que je fais remonter de cette manière :

<?php echo $this->getHtmlList('towns', $this->row->town_id) ?>


 
Je souhaite que les infos dans ce menu soient triées par ORDRE ALPHA.
Savez-vous comment faire cela svp? Je ne suis pas expert en dev. et j'ai un peu du mal à comprendre le fonctionnement de sort() s'il s'agit bien de cela.
 
Merci d'avance,


Message édité par kameha le 23-02-2010 à 18:22:05
mood
Publicité
Posté le 23-02-2010 à 12:30:39  profilanswer
 

n°1968490
Tirkyth
Posté le 23-02-2010 à 12:43:19  profilanswer
 

Salut,  
 
Peut-on avoir le code de la méthode getHtmlList ?

n°1968491
kameha
Posté le 23-02-2010 à 12:52:41  profilanswer
 

Tirkyth a écrit :

Salut,  
 
Peut-on avoir le code de la méthode getHtmlList ?


 
Le voici :

function getHtmlList($tableName, $default=0, $grid=false )
 {    
     static $lists = null;
     
     if (!is_array($lists)) {
   
   $t_department    = '- ' . JText::_( 'Department' ).' -' ;
      $t_condition     = '- ' . JText::_( 'Condition' ).' -' ;
      $t_area          = '- ' . JText::_( 'Area' ).' -' ;
      $t_slogan        = '- ' . JText::_( 'Slogan' ).' -' ;
      $t_town          = '- ' . JText::_( 'Town' ).' -' ;
      $t_property_type = '- ' . JText::_( 'Property type' ).' -' ;
      $t_heating_type  = '- ' . JText::_( 'Heating type' ).' -' ;
      $t_hotwater_type = '- ' . JText::_( 'Hot water type' ).' -' ;
       
      $lists = array( 'departments' => array( $t_department , 'department_id'),
                      'conditions' => array( $t_condition , 'condition_id' ),
                      'areas' => array( $t_area , 'area_id' ),
                      'slogans' => array( $t_slogan , 'slogan_id' ),
                      'towns' => array( $t_town , 'town_id' ),
                      'types' => array( $t_property_type , 'type_id' ),
                      'heatingtypes' => array( $t_heating_type , 'heating_type' ),
                      'hotwatertypes' => array( $t_hotwater_type , 'hot_water_type' ),
                    );
  }
     
  if ( isset($lists[$tableName]) ) {
   
   $onChange = $grid ? 'onchange="document.adminForm.submit();"' : '' ;
   $featuresModel =& $this->getModel('features');
      $featuresModel->setTableName( $tableName );
       
      return JHTML::_('select.genericlist',  
                      $featuresModel->getListForHtml($lists[$tableName][0]) ,  
                      $lists[$tableName][1],  
                      'class="inputbox" size="1" '.$onChange ,  
                      'value',  
                      'text',  
                      $default );
  }
   
  return 'list Error';  
 }

n°1968495
Tirkyth
Posté le 23-02-2010 à 13:18:59  profilanswer
 

Ah, du joomla !
 
Bon je te propose une solution pour commencer, c'est mettre un asort() de cette façon :
 

Code :
  1. return JHTML::_('select.genericlist',  
  2.                      asort($featuresModel->getListForHtml($lists[$tableName][0])) ,  
  3.                      $lists[$tableName][1],  
  4.                      'class="inputbox" size="1" '.$onChange ,  
  5.                      'value',  
  6.                      'text',  
  7.                      $default );


 
Si ça ne fonctionne pas, il va falloir me transmettre le code qui correspond à l'appel de

Code :
  1. $featuresModel->getListForHtml($lists[$tableName][0])

n°1968536
kameha
Posté le 23-02-2010 à 14:45:43  profilanswer
 

Tirkyth a écrit :

Ah, du joomla !
 
Bon je te propose une solution pour commencer, c'est mettre un asort() de cette façon :
 

Code :
  1. return JHTML::_('select.genericlist',  
  2.                      asort($featuresModel->getListForHtml($lists[$tableName][0])) ,  
  3.                      $lists[$tableName][1],  
  4.                      'class="inputbox" size="1" '.$onChange ,  
  5.                      'value',  
  6.                      'text',  
  7.                      $default );


 
Si ça ne fonctionne pas, il va falloir me transmettre le code qui correspond à l'appel de

Code :
  1. $featuresModel->getListForHtml($lists[$tableName][0])



 
Merci pour ton aide.
J'ai testé mais ça me génère une erreur sur l'ensemble de mes menus déroulants dans le CMS

Warning: Invalid argument supplied for foreach() in /homez.305/toto/www/joomla/libraries/joomla/html/html/select.php


 
Concernant la méthode getListForHtml, voici le code :

function getListForHtml( $first_txt='' ){
   
        $sql = 'SELECT `id` AS value ,`value` AS text FROM ' . $this->getSqlTableName() . ' ORDER BY ordering' ;
        $rows = $this->_getList( $sql );
 
        if ( $this->_db->getErrorNum() ) {
             
            JError::raiseWarning( 200, $this->_db->getErrorMsg() );
        }
   
  //unshift default option
  array_unshift($rows, JHTML::_('select.option', '0', $first_txt ));
   
  return $rows ;
 }

n°1968542
Tirkyth
Posté le 23-02-2010 à 15:25:50  profilanswer
 

OK, alors enlèves le asort.

 

Essaye, sur la première ligne de la dernière méthode getListForHtml, de mettre à la place :

Code :
  1. $sql = 'SELECT `id` AS value ,`value` AS text FROM ' . $this->getSqlTableName() . ' ORDER BY text' ;
 

Ca devrait marcher, par contre du coup c'est un peu dommage car je crois que dans ton interface d'administration normalement tu dois pouvoir ordonner tes entrées. Là le fait de trier par ordre alphabétique fait que tu perds la fonctionnalité d'ordonnancement personnalisé.

Message cité 2 fois
Message édité par Tirkyth le 23-02-2010 à 15:26:24
n°1968609
kameha
Posté le 23-02-2010 à 16:52:02  profilanswer
 

Tirkyth a écrit :

OK, alors enlèves le asort.
 
Essaye, sur la première ligne de la dernière méthode getListForHtml, de mettre à la place :

Code :
  1. $sql = 'SELECT `id` AS value ,`value` AS text FROM ' . $this->getSqlTableName() . ' ORDER BY text' ;


 
Ca devrait marcher, par contre du coup c'est un peu dommage car je crois que dans ton interface d'administration normalement tu dois pouvoir ordonner tes entrées. Là le fait de trier par ordre alphabétique fait que tu perds la fonctionnalité d'ordonnancement personnalisé.


 
Le top !
Un grand merci !

n°1968638
kameha
Posté le 23-02-2010 à 18:21:49  profilanswer
 

Tirkyth a écrit :

OK, alors enlèves le asort.
 
Essaye, sur la première ligne de la dernière méthode getListForHtml, de mettre à la place :

Code :
  1. $sql = 'SELECT `id` AS value ,`value` AS text FROM ' . $this->getSqlTableName() . ' ORDER BY text' ;


 
Ca devrait marcher, par contre du coup c'est un peu dommage car je crois que dans ton interface d'administration normalement tu dois pouvoir ordonner tes entrées. Là le fait de trier par ordre alphabétique fait que tu perds la fonctionnalité d'ordonnancement personnalisé.


 
Excuses-moi de prendre la tête mais je me permet de réouvrir ce topic sachant que c'est complètement lié.
Je souhaite faire la même opération en front dans un module qui fait remonter ces infos également dans un menu déroulant.
J'ai essayé de remplacer  

function getHtmlList($table, $title, $id ){
 
 $sql = "SELECT `id` AS value ,`value` AS text FROM {$table} ORDER BY ordering" ;
 
 $db = & JFactory::getDBO();
 $db->setQuery($sql);
 $rows = $db->loadObjectList();
 
 if ( $db->getErrorNum() ) {
  JError::raiseWarning( 200, $db->getErrorMsg() );
 }
 
 //unshift default option
 array_unshift($rows, JHTML::_('select.option', '0', $title ));
 
 return JHTML::_('select.genericlist', $rows , $id, 'class="inputbox" size="1" ' , 'value', 'text', 0);
}


 
par
 

function getHtmlList($table, $title, $id ){
 
 $sql = "SELECT `id` AS value ,`value` AS text FROM {$table} ORDER BY text" ;
 
 $db = & JFactory::getDBO();
 $db->setQuery($sql);
 $rows = $db->loadObjectList();
 
 if ( $db->getErrorNum() ) {
  JError::raiseWarning( 200, $db->getErrorMsg() );
 }
 
 //unshift default option
 array_unshift($rows, JHTML::_('select.option', '0', $title ));
 
 return JHTML::_('select.genericlist', $rows , $id, 'class="inputbox" size="1" ' , 'value', 'text', 0);
}


 
mais rien n'y fait...j'ai essayé également avec value pour info.
Le code devient comme "commenté" quand je change la valeur c'est assez étrange.

n°1968843
Tirkyth
Posté le 24-02-2010 à 11:38:56  profilanswer
 

Tu ne me prends pas la tête rassure toi ;)
 
Sauf que là je vais avoir un peu de mal à t'aider.
Tu as fait exactement ce qu'il faut faire, mais si ça ne fait rien peut-être que tu n'es pas dans le bon fichier ?
 
Si tu glisses tout au début de la méthode un

Code :
  1. die(var_dump($table, $title, $id));


Qu'obtiens-tu ?

n°1969009
kameha
Posté le 24-02-2010 à 19:34:06  profilanswer
 

Tirkyth a écrit :

Tu ne me prends pas la tête rassure toi ;)
 
Sauf que là je vais avoir un peu de mal à t'aider.
Tu as fait exactement ce qu'il faut faire, mais si ça ne fait rien peut-être que tu n'es pas dans le bon fichier ?
 
Si tu glisses tout au début de la méthode un

Code :
  1. die(var_dump($table, $title, $id));


Qu'obtiens-tu ?


 
Alors, si je le place juste avant la méthode :  
En front --> j'ai une page blanche avec NULL NULL NULL.
 
Et si je le met juste après "function getHtmlList($table, $title, $id ){"
En front --> il ne se passe rien de spécial.
 
Je ne sais pas si cela vient de mon éditeur (Dream) mais il se passe la même chose qu'en changeant la valeur de ORDER BY, la moitié du code de la méthode devient orangé "genre commenté".
 
Au cas où, voici le code entier de la page en question :

defined('_JEXEC') or die('Restricted access');
 
function getHtmlList($table, $title, $id ){
 
 $sql = "SELECT `id` AS value ,`value` AS text FROM {$table} ORDER BY ordering" ;
 
 $db = & JFactory::getDBO();
 $db->setQuery($sql);
 $rows = $db->loadObjectList();
 
 if ( $db->getErrorNum() ) {
  JError::raiseWarning( 200, $db->getErrorMsg() );
 }
 
 //unshift default option
 array_unshift($rows, JHTML::_('select.option', '0', $title ));
 
 return JHTML::_('select.genericlist', $rows , $id, 'class="inputbox" size="1" ' , 'value', 'text', 0);
}
 
//conflict between component searchform and module searchform because both use same id's
$conflict = JRequest::getVar('option') == 'com_jea' && JRequest::getVar('layout') == 'search' ;
 
if(!$conflict){
 require(JModuleHelper::getLayoutPath('mod_jea_search'));
}


 
Et le code de la page qui appel ce menu déroulant que je souhaite afficher en ordre alpha (type, department, area) :

<?php if ( $use_ajax ): ?>
    <p>
    <select id="type_id" name="type_id" onchange="updateList(this)" class="inputbox"><option value="0"> </option></select>
    <select id="department_id"  name="department_id" onchange="updateList(this)" class="inputbox" ><option value="0"> </option></select>
    <select id="area_id" name="area_id" onchange="updateList(this)" class="inputbox"><option value="0"><option value="0"> </option></select>
 </p>
 <p>
 <label for="budget_min"><?php echo JText::_('Prix minimum &euro;') ?> : </label>
    <input id="budget_min" type="text" name="budget_min" size="6" />
    </p>
 <p>
 <label for="budget_max"><?php echo JText::_('Prix maximum &euro;') ?> : </label>
    <input id="budget_max" type="text" name="budget_max" size="6" />
    </p>
<?php else: ?>


Merci

Message cité 1 fois
Message édité par kameha le 24-02-2010 à 19:38:57
mood
Publicité
Posté le 24-02-2010 à 19:34:06  profilanswer
 

n°1969422
Tirkyth
Posté le 25-02-2010 à 18:41:11  profilanswer
 

kameha a écrit :


 
Alors, si je le place juste avant la méthode :  
En front --> j'ai une page blanche avec NULL NULL NULL.
 
Et si je le met juste après "function getHtmlList($table, $title, $id ){"
En front --> il ne se passe rien de spécial.
 


Il faut le mettre juste après "function getHtmlList($table, $title, $id ){" en effet.
 
Cela dit c'est très étrange que ça ne fasse rien de spécial. J'avoue que là je n'ai pas trop d'autre idée :(

n°1969451
kameha
Posté le 25-02-2010 à 21:04:32  profilanswer
 

c'était censé faire quoi?

n°1969621
Tirkyth
Posté le 26-02-2010 à 11:13:10  profilanswer
 

Afficher le type et les valeurs des 3 variables qu'on passe en paramètre, et arrêter l'execution du script. Ce qui fait que si ta page s'est affichée correctement, je serais tenté de penser qu'il ne passe pas dans cette fonction.

 

Bon, et si tu mettais, juste au dessus du return :

Code :
  1. JError::raiseError(500, $sql); // A ajouter
  2.  
  3. return JHTML::_('select.genericlist', $rows , $id, 'class="inputbox" size="1" ' , 'value', 'text', 0);


Message édité par Tirkyth le 26-02-2010 à 11:13:20
n°1970983
kameha
Posté le 03-03-2010 à 21:14:29  profilanswer
 

Il ne se passe rien rien non plus :-(
 
Pour info si je supprime cette partie  

defined('_JEXEC') or die('Restricted access');
 
function getHtmlList($table, $title, $id ){
 
 $sql = "SELECT `id` AS value ,`value` AS text FROM {$table} ORDER BY ordering" ;
 
 $db = & JFactory::getDBO();
 $db->setQuery($sql);
 $rows = $db->loadObjectList();
 
 if ( $db->getErrorNum() ) {
  JError::raiseWarning( 200, $db->getErrorMsg() );
 }
 
 //unshift default option
 array_unshift($rows, JHTML::_('select.option', '0', $title ));
 
 return JHTML::_('select.genericlist', $rows , $id, 'class="inputbox" size="1" ' , 'value', 'text', 0);
}


...le module continue de fonctionner
 
Plus rien ne s'affiche par contre si je supprime la 2ème partie, à savoir :

//conflict between component searchform and module searchform because both use same id's
$conflict = JRequest::getVar('option') == 'com_jea' && JRequest::getVar('layout') == 'search' ;
 
if(!$conflict){
 require(JModuleHelper::getLayoutPath('mod_jea_search'));
}


Message édité par kameha le 03-03-2010 à 21:14:56
n°1971055
Tirkyth
Posté le 04-03-2010 à 09:17:40  profilanswer
 

Oui donc si en supprimant le code il continue à fonctionner, c'est qu'en effet il ne passe pas dedans. Mais alors là, pour t'aider sans avoir l'organisation des fichiers, sans voir le code, et sans avoir l'appli pour tester, je suis désolé mais j'en suis incapable :(


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Trier les valeurs d'un menu déroulant dans l'ordre ALPHA

 

Sujets relatifs
Aide pour menu déroulant JSRecherche script (menu déroulant spécial)
décalage de mon menu joomla sous IEMenu déroulant
Menu horizontal en CSScomparaison entre deux xml en ignorant l'ordre des éléments (java)
probleme IE - site EXTENSIBLE -- site d'archi 
Plus de sujets relatifs à : Trier les valeurs d'un menu déroulant dans l'ordre ALPHA


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR