Dev /

Le système de thème de DTC:

Avant la version 0.25, la plupart des formulaires étaient écrit à la main en HTML, directement dans le code PHP. C'était ennuyeux d'éditer à chaque fois, et pouvait générer des erreurs. Donc depuis, tout à été réécrit en un système de thème plus puissant.

Le but premier de cette réécriture était d'avoir une intégration plus rapide des interfaces graphiques et des feuilles de styles CSS, en attendant un nouveau graphisme. Le deuxième but était de permettre l'écriture plus rapide et de retirer la possibilité d'avoir des entrées utilisateur sans validation d'.

A présent, il y a 3 thèmes principaux en place, voici comment cela fonctionne.

1. Idée générale:

Le principe de base est de d'écrire ce que vous voulez éditer, et l'envoyer aux fonctions du thème. Ces fonctions manipulent alors le reste: l'édition de formulaires HTML utilisant les styles du thème (CSS) et la connexion SQL. Ce que j'appelle décrire est la plupart du temps les tables de SQL. Vous allez mieux comprendre avec cet exemple.

2. Fonction dtcDatagrid()

Souvent, nous avons besoins de représentez les valeurs SQL comme une grille ou un tableau de valeurs. Chaque ligne de la table insérée dans le formulaire HTML représente une ligne dans la table SQL. Chacune de celle-ci peut être éditée ou effacée, il est également possible de créer de nouvelle valeurs.

Disons que nous avons une table SQL appelée my_table comme celle-ci:

    id | login  | fruit  | couleur | like_it
    --------------------------
    1  | alex   | apple  | green | yes
    2  | alex   | grapes | black | no
    3  | roger  | apple  | green | yes
    4  | roger  | grapes | black | no

Et que vous voulez l'afficher comme cela:

    Les fruits que vous aimez:
    ---------------------

    Fruit          Couleur          Aimez-vous cela?    Action
    --------------------------------------------------------------------
    [Apple......]  [Green....]\/  [X] Yes [ ] No     [ Save ] [ Delete ]
    [Grapes.....]  [Black....]\/  [ ] Yes [X] No     [ Save ] [ Delete ]
    [...........]  [Blue.....]\/  [X] Yes [ ] No     [ New ]

Avec un contrôle effectuer comme cela (difficile d'afficher en texte si je n'explique pas): texte d'entrée, pop-up, bouton type radio et ensuite le bouton de validation.

Donc le code est simplement comme cela:

    $dsc = array(
           "title" => "Les fruits que vous aimez:",
           "table_name" => "my_table",
           "action" => "fruits_editor",
           "forward" => array("login"),
           "where_condition" => "login='alex'",
           "cols" => array(
                     "id" => array(
                             "type" => "id",
                             "display" => "no",
                             "legend" => "id")
                     "fruit" => array(
                             "type" => "text",
                             "legend" => "Fruit",
                     "couleur" => array(
                             "type" => "popup",
                             "values" => array("blue","green","black"),
                             "display_replace" => array("Blue","Green","Black"),
                             "legend" => "Fruit"),
                     "like_it" => array(
                             "type" => "radio",
                             "values" => array("yes","no"),
                              "legend" => "Aimez-vous cela?")));
    $my_fruit_editor = dtcDatagrid($dsc);

Je n'irais trop loin dans les explications, c'est assez simple à comprendre.

  • "table_name" est le nom de la table SQL.
  • "action" sera écrit comme commande HTML type entrée caché vous pouvez donc utiliser la fonction dtcDatagrid() plus d'une fois dans un formulaire simple.
  • "forward" est une simple variable qui sera envoyée comme commande d'entrée cachée donc vous l'benez aprés le clique sur le bouton et c'est optionnel.
  • "where_condition" sera utiliser comme un WHERE fermé dans toutes les requétes SQL pour les données SQL: SELECT, INSERT et UPDATE. c'est optionnel.
  • "cols" Décrit toutes les colonnes SQL que vous voulez afficher et éditer. Chaque élément de ce tableau est le nom du champ SQL à utiliser.

Donc chacun des types de contrôles que vous utiliser sont des options que vous pouvez sélectionner. Au minimum type et legend (le texte qui doit étre affiché pour l'utilisateur sache ce qu'il fait comme par exemple "Couleur") doivent étre remplis.

Certains types ont des paramètres mandataires comme pop-ups et boutons type radio qui DOIVENT avoir au moins values pour configurer les valeurs alloués, avec display_replace contenant les valeurs à afficher sur le HTML au lieu des valeurs dans SQL (dans cet exemple, c'est utilisé pour avoir la première lettre des couleurs en majuscule).

Notez que toutes les tables SQL que vos voulez éditer avec cette fonction doivent étre auto-incrémentées pour qu'il soit possible au système de thême d'identifier la valeur qui doit être modifiée ou supprimée.

3. Fonction dtcListItemsEdit()

Cette fonction est utilisée principalement (mais pas seulement) par l'interface client, par exemple pour les sous-domaines, emails, ssh, ou comptes ftp. Cela fonctionne presque comme dtcDatagrid() mais avec d'autres champs que vous aurez besoins de remplir (principalement pour les titres).

Ainsi, si vous voulez utiliser cette fonction dans l'interface client, vous devez paramétrer une option "where_list" ce qui définit qu'un utilisateur ne peut éditer les valeurs d'un autre admin virtuel. Elle est aussi mandatée pour vérifier ce paramètre. Pour l'éditeur de sous-domaines par exemple, on appel:

   checkLoginPassAndDomain($adm_login,$adm_pass,$domain["name"]);

ce qui vérifie que l'utilisateur enregistré posséde le domaine qu'il édite, ensuite l'option suivante est ajoutée:

                "where_list" => array(
                        "domain_name" => $domain["name"]),

4. configEditorTemplate()

De la même façon, cette fonction édite les valeur de la table de configuration. C'est utilisé seulement dans admin/inc/dtc_config.php (et c'est également l'endroit ou se trouve cette fonction actuellement). Rien de spécial à dire à ce propos, cela fonctionne de la même façon, méme si, de façon interne, c'est légèrement différent. J'ajouterais tout de même qu'il n'y a pas de "table_name" dedans vu que cela édite uniquement la table de config.

. Validation des champs

Si vous utilisez une fenêtre, un bouton radio ou une case à cocher, le système de thème contrôlera les valeurs permises. Si elles sont incorrectes, le SQL ne sera pas envoyé. Si vous utilisez un texte, zone texte ou mot de passe, alors l'appel sur addslashes() sera ajouté pour protéger les variables. L'utilisation de ces fonctions est donc sécurisée.

D'ailleurs, il est possible d'ajouter les contrôle suivant sur le format de chaque variable:

  • subdomain: un sous-domaine valide
  • subdomain_or_ip: un sous-domaine ou une adresse IP valide
  • ip_addr: une adresse IP
  • domain_or_ip: un nom de domaine valide ou une adresse IP
  • dtc_login: une connexion via le système de DTC (qui est: 4 à 16 caractères avec seuelemnt des chiffres, lettres, et le caractère - (moins))
  • dtc_login_or_email: une connexion via le système de DTC ou un email
  • dtc_pass: une validation de mot de passe via le système de DTC
  • email: une adresse email
  • number: un nombre valide (composé des caractères de 0 à 9 uniquement)

Utilisez juste "check" => "subdomain" par exemple, si vous voulez ajouter ce type de contrôle.

Quelques changements réalisés le 28.03.2007:

N'étant pas certain de savoir ou écrire cela j'ai décidé d'en parler ici. J'ai ajouté un nouveau type readonly qui va créer une zone texte en lecture seule. J'ai également ajouté de nouveaux paramètres qui seront utilisés par le texte, lecture seule et mot de passe mais qui ont étés uniquement testés avec la lecture seule. [hide_create] => "yes" -> Peut être utilisé pour caché un champ en mode création, il sera affiché uniquement en mode édition.

[callback] -> Cette routine sera appellé pour obtenir d'autres données qu'il devra afficher. L'id (autoinc) sera passée à la routine et l'on prévoit qu'un tableau sera retourné en contenant 2 valeurs:

      array(
              "value" => $value,
              "happen" => $happen);
Page last modified on September 18, 2009, at 12:35 PM EST