IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Plugins PHP Discussion :

Test d'un plugin générateur de liste (en alpha)


Sujet :

Plugins PHP

  1. #1
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut Test d'un plugin générateur de liste (en alpha)
    Salut à tous,

    J'en parle depuis plusieurs mois, j'ai trouvé du temps pour avancer, j'ai maintenant besoins de quelques béta testeur pour vérifier la validité de ce qui existe et proposer des améliorations que je n'aurais pas vues.

    Attention, le plugin est en version Alpha et l'installation est 'à la hussarde'. Il est possible (probable) qu'il évolue.

    Ce qu'il sait faire :
    • afficher une liste d'enregistrement en provenance de tables (une principale).
    • Afficher cette liste en mode 'pager' avec les affichages automatique des pages.
    • Trier la liste sur les champs qui auront été autorisé au tris.


    Comment installer le plugin Alpha (avec le hussard) :
    • Décompacter le contenu de l'archive jointe dans le dossier lib/plugins soit de votre symfony, soit de votre projet.
    • Modifier le mrListPlugin


    Comment mettre en œuvre :
    1) Créer un dossier lib/list dans votre application.

    2) on va partir sur le fait que vous aller utiliser une table simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MaTable:
      Columns:
        nom: string(40)
        prenom: string(40)
        service: string(40)
    volontairement simpliste, mais cela marche avec des tables plus compliquées...

    3) dans le dossier créé, vous allez créer un fichier :
    MaTableList.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    class MaTableList extends mrList
    {
     
        public function configure()
        {
            $querry = Doctrine_Query::create()->
                            from( 'MaTable' );
            $this->setQuery( $querry );
     
            $this->setFilterObjectName( 'MaTableFormFilter' ); // pas utilisé pour cette version
            $this->setReturnRoute( '@MaTable' );
     
            $this->setWidget( 'nom', new mrListWidgetString( array(
                        'title' => 'Nom',
                        'sortable' => true
                            ), array( ) ) );
            $this->setWidget( 'prenom', new mrListWidgetString( array(
                        'title' => 'Prénom',
                        'sortable' => true
                            ), array( ) ) );
            $this->setWidget('service', new mrListWidgetString(array('title'=>'Service'), array()));
     
            $this->setSortDefault('nom', 'ASC');
        }
     
    }
    4) Un petit coup de route
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MaTable:
      url: /test
      options:
        with_wildcard_routes: true
      param:
        module: test
        action: index
    5) Créer un module test "symfony generate:module"
    La méthode index
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        public function executeIndex( sfWebRequest $request )
        {
            // Instance de la liste
            $this->test = new newTestList();
     
            // Permet de lier l'objet créé avec la réponse et de le préparer pour la prohain affichage.
            $this->test->setWebRequestAndBind($request);
        }
    6) Le template
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php use_stylesheet( 'mrList') ?>
    <h1>essai</h1>
    <?php echo $test->render() ?>
    7) récupérer le fichier mrList.css dans le dossier du plugin et copier le dans votre dossier web/css

    8) Lancer le test et "have fun".


    Ce que le module ne sais pas (encore) faire :
    • Gérer les filtres
    • Afficher et traiter autre chose que des champs string
    • Pouvoir lier les lignes à des enregistrements, mettre des boutons supprimer
    • Des case à cocher dans la liste pour un traitement globale ?
    • Tous ce que vous allez suggérer et que je n'ai pas encore envisager (peut-être).


    Si vous souhaitez aider, il y a deux class a écrire :
    • mrListWidgetDate pour afficher les dates
    • mrListWidgetNumber pour afficher les chiffres


    J'attends vos remarques avec impatience et crainte.

    Attention, c'est une version Alpha, il est possible que certaines fonctions change encore d'une manière importante, donc à ne pas utiliser dans des versions autres que des versions de test.
    Fichiers attachés Fichiers attachés
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Je vais regarder ton plugin, je te donne mes retours asap.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je viens de faire mes premiers essai, et pour une application de gestion, ton plugin est une excellente idée.

    Je pense qu'on a tous mis au point une solution pour afficher des tableaux paginés et sortables (la mienne est à base de partials et de paginators personnalisés... un beau bordel), mais la tienne a l'avantage d'être très simple à mettre en place et surtout parfaitement dans l'esprit de symfony.

    Le principe de mettre les crtières de tris en session vis à vis du paginator est une très bonne idée ( que je risque de te voler ), plutôt que de les passer à chaque fois dans les url. Il faudrait peut être prévoir un moyen de réinitialiser le tri ( si je réouvre mon module, l'ancien ordre de tri est encore utilisé, ça risque d'être embêtant suivant la situation).

    Tu as par ailleurs pensé à rajouter des classes sur les éléments du tableau ( header, odd/even, sortable, pager ... ), très bonne initiative.

    Il es sûr que la version finale devra contenir un moyen d'ajouter des actions sur chaque ligne ( éditer/supprimer/autre ), pourquoi pas en se basant sur les directives segment_names et objet_actions des doctrineCollectionRoute.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    personne:
      class:    sfDoctrineRouteCollection
      options:
        model:  Personne
        module: personne
        object_actions:
          stats: get
          compte: [get, post, put]
        segment_names: {edit: modifier, new: nouveau}
    Le fait de pouvoir faire des traitements en lot est un plus, mais pas indispensable à mes yeux.

    Une option devrait aussi être ajoutée au mrListWidget qui permettrait de rajouter un lien vers l'objet. ( comme le '=' sur l'admin generator )

    Une idée pour gagner du temps, mais qui pourrait passer pour une fonctionnalité bricolage : en partant du principe qu'il sera impossible de prévoir un widget pour chaque type de données ( données métiers incluses ), et compte tenu du temps nécessaire pour créer un widget à chaque fois, il serait envisageable de créer un widget libre, qui permettrait de configurer en option le rendu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     $this->setWidget( 'titre', new mrListWidgetCustom( array(
                      'title' => 'Coordonnée GPS',
                      'sortable' => true, // A voir comment gérer ça !
                      'display' => '<span class="long">%longitude%</span><span class="latitude">%latitude%</span>'
                          ), array( ) ) );
    Bon après c'est sûr que niveau factorisation c'est loin d'être une bonne pratique... A peser le pour le le contre

    Et pour finir, mon caprice de développeur : A plusieurs reprise j'ai du afficher dans un tableau 2 colonnes agrégées et gérer un tri sur 2 (ou plus) éléments. Le cas typique est d'afficher dans une seule colonne 'Nom Prénom' et de pouvoir trier dessus (Nom ASC, Prenom ASC <=> Nom DESC, Prenom DESC). Si tu as une idée pour permettre de comportement de façon élégante, ce serait parfait !

    Quelques petites remarques secondaires :
    • Dans ton explication sur le code 5), tu as écris new newTestList(); ( un new de trop )
    • J'ai vu plusieurs fois écris querry (avec un seul r c'est mieux)

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Heureux que cela te plaise.

    Il est destiné à devenir un plugin sur le site officiel, dés qu'il aura quitté le statut d'alpha...

    Merci pour toutes les remarques constructives que j'essayerais de prendre en compte.

    L'idée de mettre les critères de tris et de filtre aussi en session n'est pas de moi, c'est ainsi que le générator d'admin procède, donc copie !!!

    L'idée de pouvoir réinitialiser le tris et les filtres aussi, c'est simple à mettre en œuvre, une méthode simple à implémenter. Je vais retenir.

    Pour les actions je pensais plutôt à une série de widgetAction à mettre dans une collection particulière. Plus souple à configurer et rien n'empêche d'utiliser les nom des actions par défaut. Pour la gestion d'un lien sur un champ, c'est un peu compliquer à gérer, mais je pense ajouter simplement des options dans le tableau d'options... Ainsi, on devrait pouvoir avoir le nom qui pointe vers la fiche du nom et le service vers celle du service. C'est en étude mais dans un troisième temps.

    Les colonnes sont gérées par des widgets, donc simple à rajouter. Maintenant j'ai dans l'idée un widget qui ferait appel à un partial pour générer son affichage. Reste à voir si je peux lui envoyer tous les champs de la ligne, ce qui n'est pas évident vu la structure actuel. Avec celui-là, il serait possible d'afficher ce que l'on veut.

    Et on arrive à la chose à laquel j'avais déjà songé, l'agrégat des colonnes (qui serait géré par le widget si dessus) et la gestion de colonnes fantômes, avec des colspam... et CA, je ne vois pas comment l'intégrer simplement dans la structure des widget. J'y ai déjà réfléchi, mais je n'ai trouvé aucune solution simple et efficace.

    Maintenant, il devra être possible, dans le tableau des attribut, de passer un colspam à une colonne données (pas entièrement implémenté, mais la structure de base y est), mais comment masquer les colonnes que l'on ne veux pas voir ? On risque vite de friser l'usine atomique Ukrainienne.

    Je vais déjà y intégrer les filtres et les liens. C'est le premier objectif.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/01/2012, 19h46
  2. Lancer JUnit tests d'un plugin via Ant
    Par DaveShot dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 26/02/2010, 16h28
  3. [Test] Proposition de Benchmark Hashtable/ArrayList/List ?
    Par Mose dans le forum Framework .NET
    Réponses: 10
    Dernier message: 12/08/2006, 17h05
  4. [ plugin ][ extension point ] liste des points d'extension
    Par Satch dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 19/03/2004, 09h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo