Problématique

Bien souvent quand on manipule une floppée de données dans nos sites et applications Web on doit faire face à leur mise en forme. Et l'interaction entre l'utilisateur et ces données étant de plus en plus dans l'air du temps il faut être capable de contrôler ces données et donc de savoir qui est qui quand on clic...

Et sous Prado, cet exercice peut particulièrement être difficile quand on est dans un TRepeater par exemple. Car à moins de créer le bouton à la voler, on ne peut pas lui donner un paramètre, ou du moins pas toujours le plus simplement... et puis pour une image par exemple, comment lui attribuer un identifiant autre que l'ID pour récupérer son enregistrement dans la BDD, enfin bref... pouvoir attribuer une valeur à n'importe quel composant/contrôle de votre page...

Je ne veux pas m'étaler sur la problématique et les différents problèmes qui peuvent être rencontrés, tellement la solution est simple et passe partout.

La solution !

En fait, quand on observe la classe TControl de Prado, qui sera instanciée par tous les contrôles de votre page, on y découvre un setter et un getter intéressant, j'ai nommé CustomData.

Et ce qui est magique avec cette valeur c'est que Prado ne l'utilise jamais pour lui, donc vous en faite ce que vous voulez, c'est votre petite variable à vous pour chaque contrôle d'une page... de cette façon vous pouvez vous organiser et associer des clés primaires à vos contrôles, ou des évènements, des paramètres, ou que sais-je encore...

Mise en oeuvre

Un petit exemple pour mieux comprendre quand on a pas tout compris à ce que je dis ;-)

Par exemple, j'ai un tableau avec plusieurs colonnes, et je veux pouvoir trier les colonnes en cliquant sur le titre de la colonne, et ceci via un Callback (sans recharger la page). Et bien avec CustomData ça se fera aussi facilement que ceci :

<com:TActiveLinkButton OnCallback="Page.sortDataGrid" CustomData="Titre">

et pour la colonne à côté :

<com:TActiveLinkButton OnCallback="Page.sortDataGrid" CustomData="Date">

Vous avez compris ? Après dans sortDataGrid il suffit de tester la valeur de CustomData pour faire le tri, ce qu'on ferra tout simplement grâce à :

public function sortDataGrid($sender,$param) {
    $expression = $sender->CustomData;
    # [...]
}

Voilà un outil simple et efficace, comme je les aime !!!

Bon dev ;-)