Carnet Wiki

Autre Table Non Spip

Voir la doc : Accés SPIP aux tables non-SPIP et jointures

Voir aussi : Jonctions Entre Tables

Nouvelle version de cette doc

Il semblerait que cette doc ne soit vraiment pas à jour.
Je (djakoni) vais tenter d’en rédiger une plus à jour : voir en bas

Aide bienvenue !

Déclarer une nouvelle table (non spip, par ex. Spikini) dans SPIP

Ce qui est dit sur la page AutreTableSpip pour une table « spip_machin » est aussi vrai pour des tables non Spip, ne commençant pas par spip_. Par exemple pour les tables ayant le préfixe Wikini_ (ou celui choisi à l’installation du wiki), tables créées lors de cette installation de Spikini.

Il suffit alors de créer un fichier mes_fonctions.php3 et de le mettre à la racine du site (ou de compléter ce fichier, s’il est déjà créé), contenant les instructions ci-dessous, pour faire reconnaître à Spip tous les champs Wikini_ et donc tout le contenu du Wiki.

Il est par exemple possible de publier un article (Spip) reprenant le contenu d’une page Wiki, donc modifiable par les lecteurs. Ce qui est une autre façon, complémentaire du mode Forum, de faire des commentaires par rapport à un article, l’avantage étant de « consolider » l’information au fur et à mesure que les échanges se poursuivent

Les instructions ci-dessous permettent de déclarer à Spip toutes les tables créées par l’installation de Spikini, pour y accéder depuis Spip, y compris par des boucles Spip. Il n’est probablement pas nécessaire de déclarer tout ceci, selon votre usage.

include ('ecrire/inc_serialbase.php3');
global $tables_principales;

$wikini_acls = array(
		"page_tag"	=> "varchar(50) NOT NULL",
		"privilege"	=> "varchar(20) NOT NULL",
		"list"		=> "text NOT NULL");

$wikini_acls_key = array(
		"PRIMARY KEY"	=> "page_tag,privilege");


$wikini_links = array(
		"from_tag"		=> "char(50) NOT NULL",
		"to_tag"		=> "char(50) NOT NULL");

$wikini_links_key = array(
		"UNIQUE from_tag"=> "from_tag, to_tag",
		"KEY idx_from"		=> "from_tag",
		"KEY idx_to"		=> "to_tag");	

$wikini_pages = array(
		"id"			=> "int(10) unsigned NOT NULL",
		"tag"			=> "varchar(50) NOT NULL",
		"time"		=> "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
		"body"		=> "text NOT NULL",
		"body_r"		=> "text NOT NULL",
		"owner"		=> "VARCHAR(50) NOT NULL",
		"user"		=> "VARCHAR(50) NOT NULL",
		"latest"		=> "ENUM('Y', 'N') DEFAULT 'N' NOT NULL",
		"handler"		=> "VARCHAR(30) DEFAULT 'page' NOT NULL",
		"comment_on"	=> "VARCHAR(50) NOT NULL");

$wikini_pages_key = array(
		"PRIMARY KEY"		=> "id",
		"KEY idx_tag"		=> "tag",
		"KEY idx_time"		=> "time",
		"KEY idx_latest"		=> "latest",
		"KEY idx_comment_on"	=> "comment_on",
		"FULLTEXT tag"		=> "tag, body");

$wikini_referrers = array(
		"page_tag"		=> "char(50) NOT NULL",
		"referrer"		=> "CHAR(150) NOT NULL",
		"time"		=> "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL");

$wikini_referrers_key = array(
		"KEY idx_page_tag"	=> "page_tag",
		"KEY idx_time"		=> "time");
		
		
$wikini_users = array(
		"name"		=> "varchar(80) NOT NULL",
		"password"		=> "VARCHAR(32) NOT NULL",
		"email"		=> "VARCHAR(50) NOT NULL",
		"motto"		=> "text NOT NULL",
		"revisioncount"	=> "int(10) unsigned DEFAULT '20' NOT NULL",
		"changescount"	=> "int(10) unsigned DEFAULT '50' NOT NULL",
		"doubleclickedit"	=> "ENUM('Y', 'N') DEFAULT 'Y' NOT NULL",
		"signuptime"	=> "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
		"show_comments"	=> "ENUM('Y', 'N') DEFAULT 'N' NOT NULL");

$wikini_users_key = array(
		"PRIMARY KEY"		=> "name",
		"KEY idx_name"		=> "name",
		"KEY idx_signuptime"	=> "signuptime");

$tables_principales['wikini_acls']	=
	array('field' => &$wikini_acls, 'key' 		=> &$wikini_acls_key);
$tables_principales['wikini_links'] =
	array('field' => &$wikini_links, 'key' 		=> &$wikini_links_key);
$tables_principales['wikini_pages']	=
	array('field' => &$wikini_pages, 'key' 		=> &$wikini_pages_key);
$tables_principales['wikini_referrers'] =
	array('field' => &$wikini_referrers, 'key' 	=> &$wikini_referrers_key);
$tables_principales['wikini_users'] =
	array('field' => &$wikini_users, 'key' 		=> &$wikini_users_key);

Le fichier mes_fonctions.php3 ainsi créé ou modifié va permettre de mettre à jour le fichier ecrire/inc_serialbase.php3, ce qui a pour effet de donner accès à ces tables depuis tout squelette de Spip.


Nouvelle version de cette doc

Je (djakoni) souhaite utiliser la possibilité qu’offre SPIP à s’interfacer avec des tables non spip afin de :

  1. Afficher un tableau HTML qui représente le contenu d’une table non SPIP dans l’espace public
  2. Concevoir une interface de modification/alimentation de table non spip dans l’espace privé (pour cela j’ai créé un plugin à 3 francs 6 cents)

N’hésitez pas à m’aider à écrire la nouvelle version de cette doc. J’utilise SPIP 1.9.2 (pour l’instant beta3)
Mes points de départ :
-  un fichier exec/inserere.php à placer dans son répertoire ecrire/exec dans spip 1.9.2
-  le plugin Forms&Tables
-  le plugin Champs Homo (d’après Booz ça va me servir)

D’après ce que m’ont raconté Booz, kent1 et cy_altern sur l’irc, je vais utiliser ceci :

  1. <BOUCLE_truc(nom_table_externe}{critère tri}> (puis #NOM_CHAMP)
  2. voir dans le répertoire base/* du plugin Forms&Tables

La suite demain matin, merci pour votre attention

- Mise à jour :27 mars 2011 à 12h35min