[spip-dev] Re: Referers des jours précédents

(Je reviens sur la liste spip-dev)

Bon, j'ai retrouvé ma mémoire : les données ne figurant pas dans la base,
tu ne peux pas faire la page "les referers de la veille".

En effet, ce qui est dans la base, c'est :

visites_jour: nombre de visites aujourd'hui sur ce referer (remis à zéro à
        minuit)

visites: total des visites depuis le début de l'existence de ce referer

date: date de la première apparition de ce referer.

Ce qu'il faudrait, pour que ça marche, ce serait ajouter des champs
visites_jour1, visites_jour2, visites_jour3 avec un mécanisme de déplacement
des infos d'aujoourd'hui vers hier. Je pense que ça n'en vaut pas la peine.

Par contre, on peut imaginer améliorer la page des référers, en classant
ceux-ci "par ordre d'apparition", et plus seulement "par nombre de hits/par
nom d'hôte".

@ Webmaster <catchall@pyrat.net> :

Salut Fil,

Je viens de terminer les modifs pour gérer les referers des jours
précédents.
C'est internationalisé avec _L
J'ai essayé de respecter les API de SPIP.

Il y a des refferers à J-1 et J-3

Remarque: si le champ spip_referers.visite_jour n'est pas utilisé par
ailleurs, il ne sert plus à rien.

@+
Jacques

-- Fil

Fil wrote:

Ce qu'il faudrait, pour que ça marche, ce serait ajouter des champs
visites_jour1, visites_jour2, visites_jour3 avec un mécanisme de déplacement
des infos d'aujoourd'hui vers hier. Je pense que ça n'en vaut pas la peine.

Pour ma part, j'apprécierais,
car là, à moins de tester après 22h,
on a pas vraiment une vue fidèle de ce qui se passe.

Un truc que j'apprécierais bien, et que je n'ai vu nulle part,
c'est les principales évolutions des visites,
des pages (article, rubriques)
et des recherches par motclé.

Afficher la liste et la progression des principales évolutions :
- les pages/rubriques/motclés qui montent
- les pages/rubriques/motclés qui descendent
(moyennées sur 2 ou 3 jours)

Je me dis que parceque c'est trop innovant, et pas trivial,
c'est trop spécialisé pour spip,
mais néanmoins,
je pense que ça intéresserait plein de monde ...
et que ça serait un réel +.

JL

Fil wrote:

(Je reviens sur la liste spip-dev)

Bon, j'ai retrouvé ma mémoire : les données ne figurant pas dans la
base, tu ne peux pas faire la page "les referers de la veille".

Pas cool ça...

En effet, ce qui est dans la base, c'est :

visites_jour: nombre de visites aujourd'hui sur ce referer (remis à
        zéro à minuit)

visites: total des visites depuis le début de l'existence de ce
referer

date: date de la première apparition de ce referer.

Ce qu'il faudrait, pour que ça marche, ce serait ajouter des champs
visites_jour1, visites_jour2, visites_jour3 avec un mécanisme de
déplacement des infos d'aujoourd'hui vers hier. Je pense que ça n'en
vaut pas la peine.

Et en plus, d'un point de vue modèle de donnée, c'est pas propre du tout.
Par contre, une table supplémentaire avec :
- id_referer_date (clef primaire de la table)
- ref_id_referer (référence à la clef primaire de la table referers
- date_visites : date des visites
- visites : nombres de visites

Ferait parfaitement l'affaire.

Mais ça implique de changer plusieurs fonctions dans spip :
- supprimer_referers
- celle qui fait le ménage (mise à 0) ==> lui rajouter une mise à jour de la
nouvelle table (de bêtes Insert)
- l'affichage des stats

Est-ce que je m'en charge ?

Par contre, on peut imaginer améliorer la page des référers, en
classant ceux-ci "par ordre d'apparition", et plus seulement "par
nombre de hits/par nom d'hôte".

Plutôt par date d'apparition dans ce cas là.

Mais il me semble que ça ne serait pas clair pour le commun des mortels...

Je me dis que parceque c'est trop innovant, et pas trivial,
c'est trop spécialisé pour spip,

Non, pourquoi ? Si quelqu'un programme un truc chouette de ce point de vue,
il n'y a pas de raison de penser que c'est trop spécialisé.

La "popularité" déjà est un outil censé donner des tendances ; quand une
page commence à recevoir plus de visites, sa popularité augmente en flèche.

Si évidemment on ne va pas conserver un historique complet de toutes les
popularités, on pourrait peut-être mémoriser "la popularité d'il y a une
heure", et classer les articles par ordre décroissant de "popularité
actuelle - (moins) popularité d'il y a une heure" : là, ceux qui "montent"
se verraient très bien (la popularité est plus réactive en "montée" qu'en
"descente"). A voir si quelqu'un veut s'amuser avec ça.

Je comprends aussi qu'on veuille consulter "les référers de la veille" ;
mais je comprends déjà moins le besoin des "référers d'avant-hier", ou sur
l'ensemble de la semaine.

-- Fil

Et en plus, d'un point de vue modèle de donnée, c'est pas propre du tout.
Par contre, une table supplémentaire avec :
- id_referer_date (clef primaire de la table)
- ref_id_referer (référence à la clef primaire de la table referers
- date_visites : date des visites
- visites : nombres de visites

Ferait parfaitement l'affaire.

Mais ça implique de changer plusieurs fonctions dans spip :
- supprimer_referers
- celle qui fait le ménage (mise à 0) ==> lui rajouter une mise à jour de la
nouvelle table (de bêtes Insert)
- l'affichage des stats

Euh, non, à mon avis on ne doit pas ajouter une table pour ça.

Est-ce que je m'en charge ?

Je ne comprends pas la question ? SPIP fonctionne selon le bon principe
"bidouille ce que tu veux, tu nous diras les résultats", et spip-contrib est
là pour ça. Comme je viens d'expliquer j'ai un gros doute sur le rapport
intérêt du dév/quantité de gaz dans les tuyaux.

-- Fil

Fil wrote:

Et en plus, d'un point de vue modèle de donnée, c'est pas propre du
tout. Par contre, une table supplémentaire avec :
- id_referer_date (clef primaire de la table)
- ref_id_referer (référence à la clef primaire de la table referers
- date_visites : date des visites
- visites : nombres de visites

Ferait parfaitement l'affaire.

Mais ça implique de changer plusieurs fonctions dans spip :
- supprimer_referers
- celle qui fait le ménage (mise à 0) ==> lui rajouter une mise à
jour de la nouvelle table (de bêtes Insert)
- l'affichage des stats

Euh, non, à mon avis on ne doit pas ajouter une table pour ça.

OK, même si ça serait plus propre.
Donc, seulement rajouter un champ : visites_veille qui prend à minuit la
valeur de visites_jour
Donc, dans inc_cron.php3
spip_query("UPDATE spip_referers SET visites_jour=0");
deviendrait
spip_query("UPDATE spip_referers SET visites_veille=visites_jour,
visites_jour=0");
C'est bon comme principe ?

Bien sûr, dans ce cas, ça ne gère que les referers de la veille en plus de
ceux du jour, mais après tout, c'est ce qui avait été souhaité au départ...

Est-ce que je m'en charge ?

Je ne comprends pas la question ? SPIP fonctionne selon le bon
principe "bidouille ce que tu veux, tu nous diras les résultats", et
spip-contrib est là pour ça. Comme je viens d'expliquer j'ai un gros
doute sur le rapport intérêt du dév/quantité de gaz dans les tuyaux.

OK pour l'esprit SPIP-contrib.
Là, j'étais plutôt dans l'esprit : «Gestion de projet : le chef de projet
Fil accepte que je fasse quelque chose en vue de son intégration dans SPIP
parce que ça correspond à l'esprit SPIP».
Spip-contrib, c'est bien, mais toutes les modifs du noyau se retrouvent dans
la zone «cachée» ce qui est pour le moins peu motivant :frowning:

Donc, seulement rajouter un champ : visites_veille qui prend à minuit la
valeur de visites_jour
Donc, dans inc_cron.php3
spip_query("UPDATE spip_referers SET visites_jour=0");
deviendrait
spip_query("UPDATE spip_referers SET visites_veille=visites_jour,
visites_jour=0");
C'est bon comme principe ?

Oui, je pense.

OK pour l'esprit SPIP-contrib.

spip-contrib ou spip-dev, hein, pas de différence.

Là, j'étais plutôt dans l'esprit : «Gestion de projet : le chef de projet
Fil accepte que je fasse quelque chose en vue de son intégration dans SPIP
parce que ça correspond à l'esprit SPIP».

Euh, raté. Je ne suis pas "chef de projet" et je n'entends pas le devenir.

Si pour te motiver il te faut un "chef", il vaut mieux que tu te mettes en
quête d'un projet moins libertaire :slight_smile:

Spip-contrib, c'est bien, mais toutes les modifs du noyau se retrouvent dans
la zone «cachée» ce qui est pour le moins peu motivant :frowning:

Tu n'as pas idée du nombre de trucs qu'Arno, Antoine ou moi avons développé
autour de SPIP et qui ont fini à la poubelle, parce que ça n'était pas mûr,
ou pas bon, ou pas générique, ou trop lourd, etc. J'ai un douloureux
souvenir de toute une interface de gestion de mailing-lists, par exemple.

-- Fil

Fil wrote:

Donc, seulement rajouter un champ : visites_veille qui prend à
minuit la valeur de visites_jour
Donc, dans inc_cron.php3
spip_query("UPDATE spip_referers SET visites_jour=0");
deviendrait
spip_query("UPDATE spip_referers SET visites_veille=visites_jour,
visites_jour=0");
C'est bon comme principe ?

Oui, je pense.

Je t'envois hors liste les fichiers modifiés.
ALTER TABLE `spip_referers` ADD `visites_veille` INT(10) UNSIGNED DEFAULT
"0" AFTER `visites_jour`

Dans inc_cron.php3 :

                        spip_query("UPDATE spip_referers SET
visites_veille=visites_jour, visites_jour=0");

à la place de

                        spip_query("UPDATE spip_referers SET
visites_jour=0");

Et pas quelques modifs dans statistiques_referers.php3

OK pour l'esprit SPIP-contrib.

spip-contrib ou spip-dev, hein, pas de différence.

Là, j'étais plutôt dans l'esprit : «Gestion de projet : le chef de
projet Fil accepte que je fasse quelque chose en vue de son
intégration dans SPIP parce que ça correspond à l'esprit SPIP».

Euh, raté. Je ne suis pas "chef de projet" et je n'entends pas le
devenir.

Si pour te motiver il te faut un "chef", il vaut mieux que tu te
mettes en quête d'un projet moins libertaire :slight_smile:

Je m'étais mal exprimé. C'est pas d'un chef en tant qu'autorité, mais d'une
direction en tant que vers où aller.
En cela, je ne fais que traduire une requête dejà exprimée sur cette liste :
avoir une roadmap pour SPIP.
SPIP est un projet merveilleux.
Il fait presque tout (sauf le café).
Et en même temps, en tant que projet, il en fait toujours plus/mieux.
Sans tomber dans le vaporware à la m$, une idée de ce que vous les dev, vous
souhaiteriez/étidiez dans SPIP nous permettrais à nous, les utilisateurs de
savoir un peu mieux où nous allons.

Spip-contrib, c'est bien, mais toutes les modifs du noyau se
retrouvent dans la zone «cachée» ce qui est pour le moins peu
motivant :frowning:

Tu n'as pas idée du nombre de trucs qu'Arno, Antoine ou moi avons
développé autour de SPIP et qui ont fini à la poubelle, parce que ça
n'était pas mûr, ou pas bon, ou pas générique, ou trop lourd, etc.
J'ai un douloureux souvenir de toute une interface de gestion de
mailing-lists, par exemple.

Voilà une info qu'elle est intéressante.
Un petit (gros) coup de skikini pour lister ces projets avortés, et pourquoi
serait très enrichissant pour tous.

Donc, tu as essayé de gérer une mailing liste avec SPIP sans y arriver.
Il y 2 contrib là dessus : WaNewsLetter et BloogLetter (+ CleverMail avec
AGORA, mais là, c'est pô gagné pour l'intégrer)
Est-ce que l'une d'elle pourrait être intégrée dans le core ?

Cordialement,

Sans tomber dans le vaporware à la m$, une idée de ce que vous les dev,
vous souhaiteriez/étidiez dans SPIP nous permettrais à nous, les
utilisateurs de savoir un peu mieux où nous allons.

Hum, il y a les discussions sur spip-dev, et puis aussi ce qui figure dans
la TODO... dont personne ne semble faire usage ! La dernière fois que j'ai
révisé cette TODO, j'y ai passé 5 heures. Pour au final pas beaucoup de
retours...

Un petit (gros) coup de skikini pour lister ces projets avortés, et
pourquoi serait très enrichissant pour tous.

Quand les journées auront 36 h j'y penserai. Mais tu peux fouiller les
archives aussi.

Donc, tu as essayé de gérer une mailing liste avec SPIP sans y arriver. Il
y 2 contrib là dessus : WaNewsLetter et BloogLetter (+ CleverMail avec
AGORA, mais là, c'est pô gagné pour l'intégrer) Est-ce que l'une d'elle
pourrait être intégrée dans le core ?

Non, puisque la conclusion de tout ça était qu'on n'avait pas de méthode
satisfaisante, et que ça devrait rester des contribs.

-- Fil

Jacques PYRAT a écrit :

Spip-contrib, c'est bien, mais toutes les modifs du noyau se
retrouvent dans la zone «cachée» ce qui est pour le moins peu
motivant :frowning:

Mais si, c'est très motivant de rester dans la partie cachée, parfois un an, en recevant les commentaires réguliers des utilisateurs confirmés.

Et puis parfois, cet incubateur permet de produire une contrib prete à etre intégrée dans le noyau, le compilo de spip 1.8 est un bon exemple.

Donc, Jacques, code tout ce qu'il te semble utile, les utilisateurs trancheront.

Donc, tu as essayé de gérer une mailing liste avec SPIP sans y arriver.
Il y 2 contrib là dessus : WaNewsLetter et BloogLetter (+ CleverMail avec
AGORA, mais là, c'est pô gagné pour l'intégrer)
Est-ce que l'une d'elle pourrait être intégrée dans le core ?

Pas la peine, la bloogletter 4 s'installera en deux secondes avec ses listes plurielles :o).

@+
BoOz

Bon, alors voici ou va le dernier commit qui précède ce message.
C'est encore expérimental et sujet à révision mais ça semble fonctionner.

Il est à présent possible, non seulement de lire d'autres tables SQL que celles propres à Spip,
mais également d'aller lire des tables présentes sur d'autres serveurs, typiquement d'autres sites sous SPIP
mais pas seulement.

Pour ce faire, la syntaxe des types de boucles est étendue avec la notation suivante:

<BOUCLE_EXT(site-annexe:ARTICLES)>#TITRE</BOUCLE_EXT>
qui va lister tous les titres de la table article du serveur site-annexe

<BOUCLE_AUTREXEMPLE(site-pas-mal-non-plus:CATALOGUE)>
</BOUCLE_AUTREXEMPLE>
<br>#TOTAL_BOUCLE au catalogue
</B_AUTREXEMPLE>

qui va ramener le nombre d'entrées de la table CATALOGUE du server "site-pas-mal-non-plus".

Pour arriver à ce résultat il faut toutefois déclarer les nouveaux serveurs avec leur identifiant de connexion.
Chacun est déclaré dans un fichier portant son nom, préfixé par "inc_connect-" et suffixé par ".php3",
le fichier étant placé dans ecrire (donc ci-dessus, il faut ecrire/inc_connect-site-annexe.php3).
Ce fichier doit contenir 4 fonctions (où NOM est à nouveau le nom du serveur):

function spip_NOM_fetch($res, $serveur) équivalente à spip_fetch_array (i.e. mysql_fetch_array)dans le serveur usuel
function spip_NOM_count($res, $serveur) équivalente à spip_num_rows (i.e. mysql_num_rows) dans le serveur usuel
function spip_NOM_free($res, $serveur) équivalente à spip_free_result (i.e. mysql_free_result) dans le serveur usuel
function spip_pgsql_select($select, $from, $where,
         $groupby, $orderby, $limit,
         $sousrequete, $cpt,
         $table, $id, $serveur)
equivalente à spip_mysql_select dans le serveur actuel (i.e. mysql_query après un pré-traitement non négligeable).

Les 4 fonctions du serveur usuel figurent dans ecrire/inc_db_mysql.php3 et il faut évidemment s'en inspirer
pour écrire les 4 nouvelles, ainsi que de inc-connect.php3 pour la gestion des identifiants de connexion.

Ce fichier sera lu à l'exécution de la première boucle référençant ce serveur, et ne sera plus lu par la suite;
on peut donc y placer l'ouverture de la connexion.

Si le site annexe est sous un Spip de meme numéro de version, cela doit suffire car la description des tables
dans le inc_serialbase du serveur principal servira à interroger celles du serveur distant.

En revanche, si l'on veut en plus accéder à des tables spécifiques, il faut les ajouter à la globale
$tables_principales, par exemple comme je le disais tout à l'heure ainsi:

$spip_title = array(
    "id" => "bigint(21) NOT NULL",
    "title" => "text NOT NULL"
);
$spip_title_key = array(
    "PRIMARY KEY" => "id"
);
$GLOBALS['tables_principales']['title']=
  array('field' => &$spip_title, 'key' => &$spip_title_key);

Comme il n'est pas question de placer cette affectation directement dans le fichier inc_serialbase
qui ne doit décrire que les tables locales d'une part, et qu'on ne peut indéfiniment charger mes_fonctions.php3
avec des déclarations qui ne sont pas systématiquement utiles, Spip procède à présent à la lecture d'un
fichier spécifique à chaque squelette: si le squellette s'appelle S, Spip lira le fichier S_fonctions.php3
avant chaque éxécution du squelette compilé (et juste avant sa compilation éventuelle).
On peut donc mettre dans ce fichier la description des tables comme ci-dessus, ainsi que les filtres spécifiques
au squelette si l'on veut soulager mes_fonctions.php3 (qui reste lu au départ néanmoins).

Ce qui ne marche pas encore :

Coucou

Je suis très réservé sur la nomenclature proposée et les emplacements des
fichiers, cf. remarques ci-dessous ; mais à part ça, sur le fond et les
possibilités que ça ouvre, c'est tout simplement GÉANT :slight_smile:

Chacun est déclaré dans un fichier portant son nom, préfixé par
"inc_connect-" et suffixé par ".php3",

Les remarques :

- Pourquoi mélanger des - et des _ ? Pourquoi l'appeler inc_.... si ce sont
des fichiers non-spip ?

- Pourquoi ne pas mettre tous les descripteurs de la base annexe dans un seul
fichier connect_annexe.php3, avec une fonction de connexion (qu ne la
réalise pas si ce n'est pas nécessaire) et la description des champs et des
tables ?

- Peut-on alors étendre ce principe à la descirption des champs et
tables supplémaentaires de la base principale ?

- Pourquoi devoir recopier les fonctions de connexion/interrogation mysql (si
on travaille sur une base annexe gérée par mysql) ? La partie système
devrait être séparée de la partie "descripteurs".

- Pourquoi lier la description des bases annexes au squelette ?

- Enfin, pour revenir à $tables_principales, on ne peut pas dire non plus que
dans la version actuelle ça soit hyper facile à utiliser/modifier.

-- Fil

Déesse A. wrote:

Sans tomber dans le vaporware à la m$, une idée de ce que vous les
dev, vous
souhaiteriez/étidiez dans SPIP nous permettrais à nous, les
utilisateurs de
savoir un peu mieux où nous allons.

Bon, alors voici ou va le dernier commit qui précède ce message.
C'est encore expérimental et sujet à révision mais ça semble
fonctionner.

Si je traduis ça en langage de décideur :
1. SPIP va permettre de puiser les données (textes) qu'il affiche dans les
pages dans plusieurs base de données MySQL différentes
2. De plus, une reflexion est menée (depuis plusieurs mois) en vue d'ouvrir
SPIP à d'autres SGBDR (Posgress...)

C'est bon ?

Sur le 1., je suis comme Fil : je trouve ça GÉANT !
Sur le 2., c'est plus marketing qu'urgent.

PS : pour Emmanuel : Est-ce que tu as étudié le fonctionnement multi-SGBDR
de ADOdb (http://adodb.sourceforge.net/) ? En particulier pour la
portabilité du code : Cell Phone Tracker App - Track Mobile Phone Location Free

Bonjour,

Ces perspectives sont superbes, et je serai très content de disposer de ces
fonctionnalités bientôt.
Simplement, l'éventail est très vaste et mériterait une dénomination 2.0

Les réflexions concrètes que cela m'inspire, du point de vue du
"consommateur" que je suis : je ne peux malheureusement pas passer beaucoup
de temps à ces activités, et donc encore moins aux (nombreux) tests
nécessaires à la mise au point (et je pense que je ne suis pas le seul),
surtout si ces fonctionnalités sont si étendues :

Pourquoi ne pas essayer de stabiliser une version 1.8, sans ces
fonctionnalités (superbes) d'accès à d'autres tables, d'autres sites
(j'imagine que c'est un des endroits qui supposent de nombreux remaniements
du code actuel et tests, mais peut-être que la ligne de partage pourrait se
faire ailleurs) et de repousser à 2.0 les fonctionnalités plus avancées ?

Cela aurait plusieurs avantages, au niveau des utilisateurs, mais peut-être
même au niveau des développeurs et des testeurs :
- utilisateurs : disposer plus vite d'une version 1.8, qui sera testée aussi
plus vite assez largement
- développeurs et testeurs : avoir des points de repères supplémentaires,
qui complèteraient ceux qui existent déjà grâce aux fonctionnalités que je
pressens de "CVS". Un bug qui apparaît avec la "2.0 cvs" pourrait être
constaté ou non sur la "1.8 cvs", ce qui pourrait faciliter son débogage ?

Cela complexifie en apparence les développements, mais peut-être pas tant
que cela, et même peut-être cela apporterait des avantages significatifs ?

Sans tomber dans le vaporware à la m$, une idée de ce que vous les
dev, vous
souhaiteriez/étidiez dans SPIP nous permettrais à nous, les
utilisateurs de
savoir un peu mieux où nous allons.

Bon, alors voici ou va le dernier commit qui précède ce message.
C'est encore expérimental et sujet à révision mais ça semble
fonctionner.

Il est à présent possible, non seulement de lire d'autres tables SQL
que celles propres à Spip,
mais également d'aller lire des tables présentes sur d'autres serveurs,
typiquement d'autres sites sous SPIP
mais pas seulement.

Pour ce faire, la syntaxe des types de boucles est étendue avec la
notation suivante:

<BOUCLE_EXT(site-annexe:ARTICLES)>#TITRE</BOUCLE_EXT>
qui va lister tous les titres de la table article du serveur site-annexe

<BOUCLE_AUTREXEMPLE(site-pas-mal-non-plus:CATALOGUE)>
</BOUCLE_AUTREXEMPLE>
<br>#TOTAL_BOUCLE au catalogue
</B_AUTREXEMPLE>

qui va ramener le nombre d'entrées de la table CATALOGUE du server
"site-pas-mal-non-plus".

Pour arriver à ce résultat il faut toutefois déclarer les nouveaux
serveurs avec leur identifiant de connexion.
Chacun est déclaré dans un fichier portant son nom, préfixé par
"inc_connect-" et suffixé par ".php3",
le fichier étant placé dans ecrire (donc ci-dessus, il faut
ecrire/inc_connect-site-annexe.php3).
Ce fichier doit contenir 4 fonctions (où NOM est à nouveau le nom du
serveur):

function spip_NOM_fetch($res, $serveur) équivalente à spip_fetch_array
(i.e. mysql_fetch_array)dans le serveur usuel
function spip_NOM_count($res, $serveur) équivalente à spip_num_rows
(i.e. mysql_num_rows) dans le serveur usuel
function spip_NOM_free($res, $serveur) équivalente à spip_free_result
(i.e. mysql_free_result) dans le serveur usuel
function spip_pgsql_select($select, $from, $where,
   $groupby, $orderby, $limit,
   $sousrequete, $cpt,
   $table, $id, $serveur)
equivalente à spip_mysql_select dans le serveur actuel (i.e.
mysql_query après un pré-traitement non négligeable).

Les 4 fonctions du serveur usuel figurent dans ecrire/inc_db_mysql.php3
et il faut évidemment s'en inspirer
pour écrire les 4 nouvelles, ainsi que de inc-connect.php3 pour la
gestion des identifiants de connexion.

Ce fichier sera lu à l'exécution de la première boucle référençant ce
serveur, et ne sera plus lu par la suite;
on peut donc y placer l'ouverture de la connexion.

Si le site annexe est sous un Spip de meme numéro de version, cela doit
suffire car la description des tables
dans le inc_serialbase du serveur principal servira à interroger celles
du serveur distant.

En revanche, si l'on veut en plus accéder à des tables spécifiques, il
faut les ajouter à la globale
$tables_principales, par exemple comme je le disais tout à l'heure
ainsi:

$spip_title = array(
"id" => "bigint(21) NOT NULL",
"title" => "text NOT NULL"
);
$spip_title_key = array(
"PRIMARY KEY" => "id"
);
$GLOBALS['tables_principales']['title']=
  array('field' => &$spip_title, 'key' => &$spip_title_key);

Comme il n'est pas question de placer cette affectation directement
dans le fichier inc_serialbase
qui ne doit décrire que les tables locales d'une part, et qu'on ne peut
indéfiniment charger mes_fonctions.php3
avec des déclarations qui ne sont pas systématiquement utiles, Spip
procède à présent à la lecture d'un
fichier spécifique à chaque squelette: si le squellette s'appelle S,
Spip lira le fichier S_fonctions.php3
avant chaque éxécution du squelette compilé (et juste avant sa
compilation éventuelle).
On peut donc mettre dans ce fichier la description des tables comme
ci-dessus, ainsi que les filtres spécifiques
au squelette si l'on veut soulager mes_fonctions.php3 (qui reste lu au
départ néanmoins).

Ce qui ne marche pas encore :

- Pourquoi mélanger des - et des _ ? Pourquoi l'appeler inc_.... si ce sont
des fichiers non-spip ?

Je n'ai jamais capté la logique de nommage des fichiers Spip,
je suis donc totalement ouvert sur le renommage des miens.

- Pourquoi ne pas mettre tous les descripteurs de la base annexe dans un seul
fichier connect_annexe.php3, avec une fonction de connexion (qu ne la
réalise pas si ce n'est pas nécessaire) et la description des champs et des
tables ?

Spip standard a lui-meme plusieurs fichiers pour décrire son serveur MySQL:
- inc_connect, qui contient les données sensibles que sont ses identifiants de connexion;
- inc_db, qui instancie les fonctions abstraites à leur définition effective;
- inc_*base* qui décrivent les tables et les mettent à jour.

les memes arguments qui sont à l'origine de ça sont à l'origine de mon choix:
1 les informations privées doivent etre séparées des diffusables
  (pour éviter les risques de divulgation);
2 les fonctions doivent etre séparées des données
   (les unes et les autres peuvent etre réemployées indépendamment dans d'autres contextes)

Pour le point 2, on aura par exemple besoin des fonctions si on veut passer tout le site
dans un autre SGBD (cf par exemple: http://article.gmane.org/gmane.comp.web.spip.devel/16515)
mais ce serait idiot de recharger la description des tables à chaque fois.
Inversement, on peut avoir besoin de la description des tables sans consulter la base
(par un exemple un script générant un formulaire à partir d'une description).

Donc, 3 fichiers me semble le minimum, mais encore une fois les noms m'indiffèrent,
et on peut aussi en faire plus que 3.

- Peut-on alors étendre ce principe à la descirption des champs et
tables supplémaentaires de la base principale ?

Je ne comprends pas: c'est ce qui est fait non ?

- Pourquoi devoir recopier les fonctions de connexion/interrogation mysql (si
on travaille sur une base annexe gérée par mysql) ? La partie système
devrait être séparée de la partie "descripteurs".

Oui on devrait pouvoir mais il faut faire attention:
1. à la compatibilité ascendante (notamment le pb du préfixe des tables)
2. à des versions *SQL* ou PHP différentes
Partant, j'ai préféré dire que chaque fichier redéclarait tout.

- Pourquoi lier la description des bases annexes au squelette ?

C'est un premier jet dont j'ai voulu m'assurer de l'opérationnalité,
donc le plus simple était d'associer un fichier au squelette,
car il n'y a pas de raison de charger la description de TOUTES les tables d'un serveur.
Mais bon, je repete que je suis ouvert au pb des noms.

- Enfin, pour revenir à $tables_principales, on ne peut pas dire non plus que
dans la version actuelle ça soit hyper facile à utiliser/modifier.

Si tu as mieux....

      Emmanuel

Si je traduis ça en langage de décideur :
1. SPIP va permettre de puiser les données (textes) qu'il affiche dans les
pages dans plusieurs base de données MySQL différentes
2. De plus, une reflexion est menée (depuis plusieurs mois) en vue d'ouvrir
SPIP à d'autres SGBDR (Posgress...)

C'est bon ?

Sur le 1., je suis comme Fil : je trouve ça GÉANT !

Doucement, c'est encore expérimental.

Sur le 2., c'est plus marketing qu'urgent.

Chacun ses priorités: il se trouve que j'ai une BD sous postgres accessible seulement en lecture
et que j'ai besoin de la consulter à partir de Spip pour assurer ma rentrée universitaire;
à la date qu'il est, il y a urgence de mon point de vue.

PS : pour Emmanuel : Est-ce que tu as étudié le fonctionnement multi-SGBDR
de ADOdb (http://adodb.sourceforge.net/) ? En particulier pour la
portabilité du code : Cell Phone Tracker App - Track Mobile Phone Location Free

oui, j'avais jeté un coup d'oeil et trouvé intéressant.
Mais merci de redonner cet info.

      Emmanuel

Déesse A. wrote:

- Pourquoi mélanger des - et des _ ? Pourquoi l'appeler inc_.... si
ce sont
des fichiers non-spip ?

Je n'ai jamais capté la logique de nommage des fichiers Spip,
je suis donc totalement ouvert sur le renommage des miens.

Il y a des indications ici : Contribuer au développement de SPIP - SPIP
En particulier :
Pour des raisons historiques, les fichiers à inclure dans l'espace public
seront appelés inc-fichier.php3. Dans l'espace privé, ce sera
ecrire/inc_fichier.php3 (noter le tiret bas à la place du tiret normal). Les
fichiers de l'espace public appelés par redirection HTTP depuis l'espace
privé sont appelés spip_fichier.php3. Tous les autres fichiers ont un nom
qui ne commence ni par "inc", ni par "spip".

Paradoxalement, il n'y a pas beaucoup de remaniements à faire et je préférerais
terminer ça pour bétonner l'interface avec le nouveau compilateur:
je ne pense pas souhaitable que les utilisateurs développent du code sur la base
d'une interface mono-base, et que dans quelque temps on leur dise de tout recommencer
parce que l'interface a changé. On leur a déjà fait le coup entre la version de ma contrib
et celle du CVS, il vaut mieux ne pas recommencer.

      Emmanuel

Pourquoi ne pas essayer de stabiliser une version 1.8, sans ces
fonctionnalités (superbes) d'accès à d'autres tables, d'autres sites
(j'imagine que c'est un des endroits qui supposent de nombreux
remaniements
du code actuel et tests, mais peut-être que la ligne de partage
pourrait se
faire ailleurs) et de repousser à 2.0 les fonctionnalités plus
avancées ?

Paradoxalement, il n'y a pas beaucoup de remaniements à faire et je
préférerais
terminer ça pour bétonner l'interface avec le nouveau compilateur:
je ne pense pas souhaitable que les utilisateurs développent du code
sur la base
d'une interface mono-base, et que dans quelque temps on leur dise de
tout recommencer
parce que l'interface a changé. On leur a déjà fait le coup entre la
version de ma contrib
et celle du CVS, il vaut mieux ne pas recommencer.

Emmanuel

argument qui a beaucoup de poids, assurément !

Mais ma remarque est plus générale, n'y a t il pas des développements
"stables", qui pourraient faire l'objet d'une 1.8, et d'autres qui doivent
pour les raisons que tu exposes être dans une version 2.0 ??

Franck

En fait, il faut absolument trouver mieux: je disais que si on interroge un site
SPIP distant, on profite de la description des tables du serveur local pour
comprendre celle du distant, mais si justement le distant a une table homonyme
mais structurée différemment (un spip de version différente ou tout autre chose)
ca va faire n'importe quoi.

Je cherchais un exemple montrant qu'il faut finir l'aspect multi-BD avant d'officialiser
l'interface du nouveau compilo, il est on ne peut plus trouvé !

      Emmanuel