CopixList? : Les types de champs de recherche
Voici une liste non exhaustive des types de champs de recherche disponible dans CopixList?
- "like" : Like vous affiche un input type=text et effectue un like 'value%' dans l'appel du datasource
- "select" : Vous affiche une liste déroulante avec comme valeur possible le tableau passé en paramètres par arSelect
De plus vous pouvez, de vous meme créer des champs de recherche personalisés
Pour cela, il vous faut créer 2 méthodes, une qui fera un return du html que vous voulez afficher pour ce champ, et une qui ajoutera les conditions pour le datasource.
- La méthode générant le HTML prends 2 paramètres : le premier paramètre est le "$field", il représente un objet avec la propriété "field" qui est l'id du champs (le paramètre field dans notre balise smarty) et la propriété "value" qui est la valeur que l'utilisateur a rentré (si il en a rentré une)
le deuxième paramètre représente un tableau de tout les paramètres supplémentaires que l'on as passé à notre balises smarty
- La méthode gérant les conditions prends 2 paramètres : Le premier est le "field" (voir la paramètre field au dessus) Le deuxième représente le datasource (voir les datasources)
Quand ces 2 méthodes sont créé vous spécifier ce type dans le tag smarty, avec le format suivant type="mon_modules|ma_classe::methodeHTML@mon_modules|ma_classe::methodeCondition"
un exemple
Imaginons que vous vouliez rajouter une recherche de type liste déroulante (existe deja de base, mais c'est un exemple)
Nous pourrions faire comme ceci
Dans le template de notre list
{copixlist kind="field" id='my_list' field=caption type='mymodule|myclass::radioHTML@mymodule|myclass::radioCondition' arValue=$mytab}$mytab etant egal a array('id1'=>'value1','id2'=>'value2')
dans notre classe "myclass" (situé dans le module "mymodule")
public function radioHTML ($field,$pParams) {
if (isset($pParams['arValue])) {}
return _tag('select',array('values'=>$pParam['arValue'],'name'=>$field->field,'selected'=>$field->value));
}
}
public function radioCondition ($field,$datasource) {
$datasource->addCondition($field->field,'=',$field->value);
}
