création de plugin avec tables personelles

Bonjour tout le monde,
Je suis entrain de faire un plugin pour un site Web. Donc une partie privée dans l’admin et une partie publique. Ce plugin n’as pas de tables communes avec spip il a ses propres tables :
une table nommée « skill » :
int id
varchar name_fr
varchar name_en
int elite

une table nommée « chapter » :
int id
varchar name
une table de liaison « skill_chapter » :
int id_skill
int id_chapter
La partie admin du plugin a été simple à faire et rapide. Mais par contre la partie client je lutte.
Ce que je veux faire : L’utilisateur arrive sur la page. Il se trouve devant un filtre composé d’une case a cocher nommée « elite » et un menu déroulant nommé « chapter » contenant tous les chapitres de la bdd. Le but étant de fournir a l’utilisateur les skill contenu correspondant un chapitre. Style l’utilisateur choisit le chapitre 1 (qui a dans la table chapter l’id 1) que je ressorte avec tout les informations sur les skills du chapitre 1 et si il coche aussi elite en plus de la sélection du chapitre, bah tous les skills ou il ya un 1 dans la colonne élite. Bref un filtre tout bête que j’ai déjà fait en php et 2-3 mouvements. Quand je dis toutes les information sur le skill ça comprend le nom du chapitre du skill. Le filtre est un formulaire tout bête des que j’appuie sur valider il me renvois sur la même page avec les données du formulaire dans l’url.
Donc les soucis qui me bloquent :

1- Comment faire pour que quand l’utilisateur arrive pour la première fois sur la page qu’il n’y ai que le filtre d’affiché et que dès que l’utilisateur valide bah que j’affiche en début de page le filtre et plus bas le résultat. En d’autres termes : est il possible de faire style : if ( !#ENV*‹ chap ›) ne rien afficher ie qu’il n’y a pas de variable « chap » dans l’url donc l’utilisateur est a sa première visite.
2- Comment je peux dire a une boucle va me trouver les skills du chapitre sélectionné. J’ai tenté de faire un nouveau critère mais je n’y arrive pas :confused: l’idéal serait de faire du style : _chapitre == #ENV
’chap’ et donc chercher dans la table liaison et ressortir les skills que l’utilisateur veut.*_
Merci bien pour les réponses. Si vous avez besoin de plus de détails dites le ^^
Moky


Soyez parmi les premiers à essayer Windows Live Mail. Windows Live Mail.

bonjour

voila comment je fait

dans mon répertoire "Plugins/monplugins" j'ai créé un répertoire "base"
dans ce répertoire j'ai créé un fichier "monplugin_bases" contenant le
code suivant

<?php
// -----------------------------------------------------------------------------
// Declaration des tables album photo
// creation 22/11/2006 pour SPIP 1.9.1

global $tables_principales;
global $tables_auxiliaires;

//-- Table photoalbum ------------------------------------------
$photoalbum_albums= array(
  "id_album"=> "bigint(21) NOT NULL auto_increment",
  "titre" => "text NOT NULL",
  "id_rubrique"=> "bigint(21) NOT NULL default '0'",
  "descriptif"=>"text NOT NULL",
  "date"=> "datetime NOT NULL default '0000-00-00 00:00:00'",
  "statut"=> "varchar(10) NOT NULL default '0'",
  "id_secteur"=>"bigint(21) NOT NULL default '0'",
  "maj"=>"timestamp NOT NULL default CURRENT_TIMESTAMP on update
                  CURRENT_TIMESTAMP",
  "date_redac"=> "datetime NOT NULL default '0000-00-00 00:00:00'",
  "date_modif"=> "datetime NOT NULL default '0000-00-00 00:00:00'",
  "visites"=> "int(11) NOT NULL default '0'",
  "referers "=> "int(11) NOT NULL default '0'",
  "popularite"=> "double NOT NULL default '0'",
  "nom_site"=>"varchar(255) NOT NULL",
  "url_site"=> "varchar(255) NOT NULL",
  );

$photoalbum_albums_key = array(
  "PRIMARY KEY" => "id_album",
  "KEY id_rubrique"=> "id_rubrique",
  "KEY id_secteur"=>"id_secteur",
  "KEY statut"=>"statut",
  "KEY date_modif"=> "date_modif",
  "KEY url_site" => "url_site",
  "KEY nom_site" => "nom_site"
  );
$tables_principales['photoalbum_photos'] = array(
    'field' => &$photoalbum_photos,
    'key' => &$photoalbum_photos_key);
    
$tables_principales['photoalbum_albums'] = array(
      'field' => &$photoalbum_albums,
      'key' => &$photoalbum_albums_key);
    
$tables_principales['photoalbum_auteurs_albums'] = array(
      'field' => &$photoalbum_auteurs_albums,
      'key' => &$photoalbum_auteurs_albums_key);

// 'spip_' dans l'index de $tables_principales
global $table_des_tables;
$table_des_tables['photoalbum_albums']='photoalbum_albums';
$table_des_tables['photoalbum_auteurs_albums']='photoalbum_auteurs_albums';
$table_des_tables['photoalbum_photos']='photoalbum_photos';

?>

pour définir les champs et les clés de la nouvelle table
j'ai pas réussis à leur faire obtenir le préfixe "spip_"
elle sont donc créé sans préfixe.

Ensuite, j'ai créé une fonction contenant le code suivant

function photoalbum_creer_table(){
           include_spip('base/create');
           include_spip('base/abstract_sql');
      include_spip('base/photoalbum_distant.php');
           
      $nom = 'photoalbum_photos';
           $champs = $GLOBALS['tables_principales'][$nom]['field'];
           $cles = $GLOBALS['tables_principales'][$nom]['key'];
           spip_create_table($nom, $champs, $cles, false, false);
      
           $nom = 'photoalbum_albums';
           $champs = $GLOBALS['tables_principales'][$nom]['field'];
           $cles = $GLOBALS['tables_principales'][$nom]['key'];
           spip_create_table($nom, $champs, $cles, false, false);
      
      $nom = 'photoalbum_auteurs_albums';
           $champs = $GLOBALS['tables_principales'][$nom]['field'];
           $cles = $GLOBALS['tables_principales'][$nom]['key'];
           spip_create_table($nom, $champs, $cles, false, false);
   }
que j'appelle depuis la page admin de mon plugin en
mettant une meta de vérification pour m'assurer par la suite que les
tables ont été créé et sont dans la bonne version.
Il te faut inclure bien sur les fichier pour l'appel des fonctions

la fonction "spip_create_table" n'ecrase pas les tables si elle existe
déjà. Pour créer des tables temporaire, mettre le 5eme paramètre à true.

voila si j'ai pas été assez clair dit moi le :slight_smile:
Il y a peut être mieux mais je débute en PHP

claude

Je viens d'essayer le méthode décrite ci-dessous par Claude et cela ne fonctionne pas ici.
J'ai tenté plusieurs exemples pris sur divers plugins, mais avec moi ça ne veux pas!
Mes tables testées et installées à la main sous PhpMyAdmin sont correctes.
Que puis-je oublier de faire?
J'ai un dossier base dans le plugin avec son fichier.php
J'ai un autre fichier avec la fonction creer_table et les includes nécessaires!
Je suis paumé
Il y a quelque chose de plus à ajouter?

Bernard

claude a écrit :

bonjour

voila comment je fait

dans mon répertoire "Plugins/monplugins" j'ai créé un répertoire "base"
dans ce répertoire j'ai créé un fichier "monplugin_bases" contenant le
code suivant

<?php
// -----------------------------------------------------------------------------
// Declaration des tables album photo
// creation 22/11/2006 pour SPIP 1.9.1

global $tables_principales;
global $tables_auxiliaires;

//-- Table photoalbum ------------------------------------------
$photoalbum_albums= array(
  "id_album"=> "bigint(21) NOT NULL auto_increment",
  "titre" => "text NOT NULL",
  "id_rubrique"=> "bigint(21) NOT NULL default '0'",
  "descriptif"=>"text NOT NULL",
  "date"=> "datetime NOT NULL default '0000-00-00 00:00:00'",
  "statut"=> "varchar(10) NOT NULL default '0'",
  "id_secteur"=>"bigint(21) NOT NULL default '0'",
  "maj"=>"timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP",
  "date_redac"=> "datetime NOT NULL default '0000-00-00 00:00:00'",
  "date_modif"=> "datetime NOT NULL default '0000-00-00 00:00:00'",
  "visites"=> "int(11) NOT NULL default '0'",
  "referers "=> "int(11) NOT NULL default '0'",
  "popularite"=> "double NOT NULL default '0'",
  "nom_site"=>"varchar(255) NOT NULL",
  "url_site"=> "varchar(255) NOT NULL",
  );

$photoalbum_albums_key = array(
  "PRIMARY KEY" => "id_album",
  "KEY id_rubrique"=> "id_rubrique",
  "KEY id_secteur"=>"id_secteur",
  "KEY statut"=>"statut",
  "KEY date_modif"=> "date_modif",
  "KEY url_site" => "url_site",
  "KEY nom_site" => "nom_site"
  );
$tables_principales['photoalbum_photos'] = array(
    'field' => &$photoalbum_photos, 'key' => &$photoalbum_photos_key);
    
$tables_principales['photoalbum_albums'] = array(
      'field' => &$photoalbum_albums,
      'key' => &$photoalbum_albums_key);
    
$tables_principales['photoalbum_auteurs_albums'] = array(
      'field' => &$photoalbum_auteurs_albums,
      'key' => &$photoalbum_auteurs_albums_key);

// 'spip_' dans l'index de $tables_principales
global $table_des_tables;
$table_des_tables['photoalbum_albums']='photoalbum_albums';
$table_des_tables['photoalbum_auteurs_albums']='photoalbum_auteurs_albums';
$table_des_tables['photoalbum_photos']='photoalbum_photos';

?>

pour définir les champs et les clés de la nouvelle table
j'ai pas réussis à leur faire obtenir le préfixe "spip_"
elle sont donc créé sans préfixe.

Ensuite, j'ai créé une fonction contenant le code suivant

function photoalbum_creer_table(){
           include_spip('base/create');
           include_spip('base/abstract_sql');
      include_spip('base/photoalbum_distant.php');
                 $nom = 'photoalbum_photos';
           $champs = $GLOBALS['tables_principales'][$nom]['field'];
           $cles = $GLOBALS['tables_principales'][$nom]['key'];
           spip_create_table($nom, $champs, $cles, false, false);
      
           $nom = 'photoalbum_albums';
           $champs = $GLOBALS['tables_principales'][$nom]['field'];
           $cles = $GLOBALS['tables_principales'][$nom]['key'];
           spip_create_table($nom, $champs, $cles, false, false);
      
      $nom = 'photoalbum_auteurs_albums';
           $champs = $GLOBALS['tables_principales'][$nom]['field'];
           $cles = $GLOBALS['tables_principales'][$nom]['key'];
           spip_create_table($nom, $champs, $cles, false, false);
   }
que j'appelle depuis la page admin de mon plugin en
mettant une meta de vérification pour m'assurer par la suite que les
tables ont été créé et sont dans la bonne version.
Il te faut inclure bien sur les fichier pour l'appel des fonctions

la fonction "spip_create_table" n'ecrase pas les tables si elle existe
déjà. Pour créer des tables temporaire, mettre le 5eme paramètre à true.

voila si j'ai pas été assez clair dit moi le :slight_smile:
Il y a peut être mieux mais je débute en PHP

claude

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : http://www.spip-contrib.net/spikini/FaQ