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

Langage PHP Discussion :

Interface et paramétres


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Points : 549
    Points
    549
    Billets dans le blog
    1
    Par défaut Interface et paramétres
    Bonsoir, je cherche a offrir à mes utilisateurs le choix de paramétrer une vue que je créer avec CakePHP et DataTable pour ne citer qu'eux.

    Dans cette vue j'ai un tableau dont les colonnes correspondent aux champs d'une table dans ma BDD. Par défaut je n'affiche que 5 colonnes dont 4 qui correspondent à des champs de ma table.

    Mon objectif est de permettre a l'utilisateur d'ajouter ou de retirer des colonnes via une page de paramétrage puis d'enregistrer les paramétrages afin qu'ils deviennent persistant.

    Pour l'ajout et la suppression de colonnes j'y arrive en statique cependant, je cherche un procédé qui permettrais d'enregistrer dans ma BDD le paramétrage qu'un utilisateur a effectué.

    Déjà est ce que c'est possible ? La seule idée qui me viens a l'esprit serait de créer une table qui contiendrais l'ensemble des paramètres que contiens la page de paramétrage puis de définir les valeurs a "true" ou "false".

    Suis-je sur la bonne piste ?

    Ayant énormément de paramètres je trouve étrange d'agir de cette manière et je viens chercher des conseils avisées afin de continuer sereinement mon développement.

    D'avance merci.
    Je préfère fermer ma gueule et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    T'es sur la bonne voie à une exception près c'est que tu ne devrais pas t'embarquer dans une table avec une colonne par paramètre, t'imagine sa taille si tu dois gérer le paramétrage de plusieurs centaines de vues !!!

    Je procède autrement : chaque bloc vue de embarque une classe de paramétrage style BlockParam qui implémente l'interface \Serializable. Ainsi je paramètre au besoin la vue et rends persistant le paramétrage dans sa version sérialisée. Comme ça, j'ai tout le loisir d'adapter et de modifier mes vues au besoin sans avoir à toucher quoi que ce soit au mécanisme de persistance.

  3. #3
    Membre confirmé
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Points : 549
    Points
    549
    Billets dans le blog
    1
    Par défaut
    Oui c'est bien pour ça que je cherchais une solution bien moins dense que ça. Merci de ta réponse néanmoins je me noie un peu avec le BlockParam et l'interface Serializable... après quelques recherches (peux fructueuses), je n'ai pas trouvé de documentation claire et précise de la chose.

    Pourrais tu me diriger vers une doc ou m'expliquer rapidement les principes.

    D'avance merci.
    Je préfère fermer ma gueule et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    C'est pas compliqué :

    la doc pour serializable

    Ensuite le principe est facile : chaque bloc vue possède un système de paramétrage persistant basé pour des questions de souplesse sur sur la sérialisation.
    Tiens je te montre un bout de mon code
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    class BlockParam
    implements \Serializable
    {
        // ici tu gère tes paramètres sous forme de tableau, attributs...
     
        /**
         * Interface \Serializable
         *
         * Les paramètres qui ne doivent pas être serializés sont remis à leur valeur par défaut
         * N'affecte pas directement les propriétés de l'instance en cours d'utilisation
         *
         * @return string
         */
        public function serialize()
        {
            // on ne tient pas compte des paramètres déclarés non sérializables
            return serialize(
                [
                    $this->available_params,
                    array_diff_key($this->defined_params, $this->unserializable_params),
                    $this->unserializable_params,
                ]
            );
        }
     
        /**
         * Interface \Serializable
         * Déserialization des membres privés
         *
         * @param  string $p
         * @return BlockParam
         */
        public function unserialize($p)
        {
            list($this->available_params, $this->defined_params, $this->unserializable_params) = unserialize($p);
        }
    }
    Quand tu veux sauvegarder, il te suffit d'enregistrer ta classe sérialisée serialize($view_param); dans une colonne de type text dans ta base de données.
    Pour récupérer le paramétrage, tu extrais les données de ta table avec un simple SELECT puis il ne te reste à faire que $block_param = unserialize($row['view_param']); pour récupérer une instance de la classe de paramétrage et le tour est joué.

  5. #5
    Membre confirmé
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Points : 549
    Points
    549
    Billets dans le blog
    1
    Par défaut
    Ok je pense avoir une base correcte du système et j'ai déjà implémenté la sérialisation des différents paramètres d'une vue . Cependant j'aimerais savoir si, dans la limite du possible, il n'y aurait pas une façon d'agir plus simplement avec CakePHP.

    Actuellement je créer une classe qui ressemble trait pour trait a ton exemple. Cependant je me demande juste si il n'y a pas une solution plus efficace avec Cake afin de ne pas "sur-classé" mes contrôleurs ?

    De plus je me demande si il serait intelligent de ne créer qu'une classe pour le paramétrage d'un ensemble de vue ? Instinctivement j'en aurais créée une par vue mais ça serait redondant au final...

    Encore merci de ton aide.
    Je préfère fermer ma gueule et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Je ne connais pas Cake mais j'ai pris le temps de zieuter un peu leur moteur de template : c'est la classe ViewBlock et ses dérivées qui seraient concernées par le mécanisme de persistance que je t'ai décris auparavant.
    En particulier c'est le contenu de $this->_blocks qui sert de tableau de stockage des paramètres de la vue.

    Dans mon cas, le moteur de template développé par mes soins intègre nativement le système de persistance du paramétrage de chaque bloc vue. Je n'ai pas à m'en préoccuper, c'est standard et automatique.

Discussions similaires

  1. Passage d'une interface en paramètre de méthode COM
    Par sylvain.cool dans le forum C++
    Réponses: 11
    Dernier message: 18/04/2008, 14h15
  2. [Conception] Méthode avec interface en paramètre
    Par javamax dans le forum Langage
    Réponses: 9
    Dernier message: 21/10/2007, 22h57
  3. Passage de paramètre par une interface grahique
    Par vbbarent dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 23/04/2007, 23h35
  4. Réponses: 3
    Dernier message: 22/03/2007, 07h19
  5. [Tableaux] Interfaces et paramètres non obligatoires
    Par VincenzoR dans le forum Langage
    Réponses: 2
    Dernier message: 07/03/2005, 09h36

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