[spip-dev] Modifs interface

Salut,

Modifs sur les fichiers suivants:
/ecrire/sites.php3
/ecrire/naviguer.php3
/ecrire/sites_edit.php3
/ecrire/inc.php3

- Pr=E9sentation des listes d'articles, le lien "Tout" de vient "Tout
afficher", et passe dans la colonne de droite.

- Modification du r=E9f=E9rencement des sites: le r=E9f=E9rencement
"automatis=E9" d'un site n'est plus propos=E9 dans la page "naviguer",
mais dans la page de cr=E9ation d'un site (on doit bien faire
"R=E9f=E9rencer un site" depuis la page de rubrique, comme pour tout
autre =E9l=E9ment du site), et quand on valide, =E7a affiche la page
d'information de ce site, histoire de pouvoir v=E9rifier ces
informations, et =E9ventuellement les corriger. De plus, quand on passe
en statut "A la poubelle", =E7a ne renvoit pas vers la page de
modification du site (c'=E9tait particuli=E8rement incoh=E9rent).

Evidemment, =E7a semble rallonger =E9norm=E9ment la cr=E9ation de liens. Mai=
s
apparemment seulement: en effet, le r=E9f=E9rencement automatis=E9 qui
renvoyait =E0 la page de rubrique obligeait =E0 cliquer sur le lien du
site (lequel avait-on ajout=E9, au passage?) pour v=E9rifier la validit=E9
des informations r=E9cup=E9r=E9es. Il me semble donc que cette nouvelle
fa=E7on, en plus d'=EAtre coh=E9rente avec les autres proc=E9dures du site,
ne rallonge pas r=E9ellement la proc=E9dure.

ARNO*

Salut,

Je suis en train de bosser sur une version _avec changement dans la
base_. Donc si vous travaillez ce soir sur SPIP, dites-le moi, qu'on
=E9vite les =E9crasement chiants.

En gros:
- ajout d'une "date" aux rubriques,
- ajout d'une "date_syndic" aux sites syndiqu=E9s, de fa=E7on =E0 pouvoir
g=E9rer une "date de r=E9f=E9rencement du site" pour les sites r=E9f=E9renc=
=E9s.

Ca devrait me prendre une heure environ... (il est actuellement 19h30 samedi=
).

ARNO*

Salut,

Je suis en train d'installer une version 1.3b5 (modif de la base de donn=E9e=
s).

Par rapport =E0 la pr=E9c=E9dente 1.3b4, =E7a concerne les fichiers:
/inc-calcul-squel.php3 (affichage de #DATE dans boucle SITES)
/ecrire/inc_base.php3 (modif de la base)
/ecrire/inc_version.php3 (passage =E0 1.3b5...)
/ecrire/sites.php3 (interface pour modifier la date de r=E9f=E9rencement)
/ecrire/inc_sites.php3 (la mise =E0 jour de la syndication utilise
"date_syndic" au lieu de "date").

Il s'agit de gestion des dates des sites r=E9f=E9renc=E9s, et des rubriques.

-> Pour l'instant, modif de la base pour les sites et les rubriques.

-> La gestion de la date de rubriques n'est pas encore faite (je m'y
mets illico, mais je crois qu'Antoine trouvera un truc beaucoup plus
efficace que moi).

-> Sauf erreur de ma part, la gestion des dates des r=E9f=E9rencements
est compl=E8te: =E0 la fois gestion dans l'espace priv=E9, dans la mise =E0
jour de la syndication ("date" devient dans ce cas "date_syndic"), et
dans l'espace public (on peut afficher une #DATE pour les sites
r=E9f=E9renc=E9s).

Je m'attaque =E0 la date des rubriques (ce sera enti=E8rement
automatique, pas d'intervention possible de la part du webmestre).

ARNO*

Salut, nouvelle modifs sur la 1.3b5, j'ai termin=E9 ce que je voulais
faire (ce qui signifie pas que c'est une version d=E9finitive, hein...)

/inc-calcul-squel.php3
/ecrire/inc.php3
/ecrire/sites.php3
/ecrire/breves_voir.php3
/ecrire/articles.php3

D=E9sormais, il y a une date attribu=E9 aux RUBRIQUES. On peut donc
afficher dans les squelettes une #DATE dans une boucle RUBRIQUES, et
=E9galement faire un classement {par date}.

Attention: la date des rubriques ne peut pas =EAtre modifi=E9e
manuellement par l'utilisateur: elle est calcul=E9e automatiquement par
SPIP. Cette date est la date de l'article, la br=E8ve ou le site
r=E9f=E9renc=E9 le plus r=E9cent contenu dans cette rubrique ou ses
sous-rubriques (r=E9cursif, donc).

Pour un site qui regroupe ses articles dans des rubriques
chronologiques (structure "par num=E9ro de magazine" plut=F4t que
th=E9matique), cette nouvelle fonction est tr=E8s pratique (auparavant,
pour avoir un classement coh=E9rent par num=E9ro chronologique, il
fallait obligatoirement num=E9roter les titres des rubriques).

Antoine, c'est fait dans une fonction calculer_dates_rubriques() dans
"inc.php3". Cette fonction est appel=E9e =E0 la fin de
calculer_rubriques_publiques, et directement quand on modifie la date
d'un article, d'une br=E8ve ou d'un site. Sauf erreur, cette fonction
donne le r=E9sultat escompt=E9, mais je crains qu'elle ne soit pas tr=E8s
optimis=E9e (je suis pas du tout dou=E9 avec les traitements
r=E9cursifs...).

ARNO*

Salut,

Pour ceux que ça intéresse, il y a un certain nombre
de compte-rendus et de commentaires sur la conf' PHP
qui s'est déroulée récemment à Paris, sur le site PHPIndex :
http://www.phpindex.com/news/news_index.php3

Une petite citation marrante dans les forums :

                          Ps : je regrette également les réactions d un site connu que je ne nomerais pas
                          qui a la facheuse habitude d'avoir un nombril trop gros et de ne voir que lui.
                          Je noterais juste que certaines responsables de ce site ont été invité (donc
                          gratuitement) et n'ont pas souhaité venir...
                          Pour quelle raison ?
                          Personnelement j'aurais tout fait pour venir ...

Je ne sais pas si c'est de nous que ça parle.... :slight_smile:

A part ça, il n'y a malheureusement pas de légende sous les
photos, donc pas la peine de chercher à reconnaître Nicolas !

a+

Antoine.

J'avais introduit un bug idiot dans inc_texte, et assez visible :
les intertitres n'étaient plus refermés en HTML, donc la fonte
gonflait, gonflait... Corrigé en urgence dans la 1.3b5, et sur uZine.

a+

Salut,

Modif sur:
/ecrire/inc_layer.php3

J'ai d=FB ajouter un: "global $HTTP_USER_AGENT", vu que je n'arrivais
plus =E0 le r=E9cup=E9rer d'aucune autre mani=E8re.

Du coup, est-ce que quelqu'un pourrait m'expliquer clairement et
simplement =E0 quoi servent toutes ces nouvelles trouvailles auxquelles
je ne bite rien du tout, sauf une chose: je pige de moins en moins
comment le bestiau est programm=E9 et tout ce que j'entreprends devient
excessivement compliqu=E9. Exemples: je veux bien ne plus utiliser de
variables globales, mais faut m'expliquer en mots simples ce que je
peux faire =E0 la place (et pourquoi la nouvelle m=E9thode est mieux
alors que chaque ligne de code prend les proportions d'un mammouth
ob=E8se); je veux bien ne plus faire de liens hypertextes, mais je fais
quoi =E0 la place; je veux bien programmer les formulaires autrement,
mais comment?

Je vous signale que l'effet imm=E9diat de ces modifs est de me fermer
purement et simplement la porte de SPIP au nez.

ARNO*

Salut,

J'ai dû ajouter un: "global $HTTP_USER_AGENT", vu que je n'arrivais
plus à le récupérer d'aucune autre manière.

Oui. Ca marche n'est-ce pas ? D'ailleurs c'est exactement ce que j'avais écrit
dans mon précédent mail : "Du coup, tous les includes (à part inc.php3
et inc_version.php3) doivent faire gaffe à appeler les variables globales
par $GLOBALS[]." $GLOBALS['HTTP_USER_AGENT'], donc, plutôt que directement
$HTTP_USER_AGENT. Tu es habitué à le faire dans les fonctions, pourquoi ça
t'embête en-dehors ?

Du coup, est-ce que quelqu'un pourrait m'expliquer clairement et
simplement à quoi servent toutes ces nouvelles trouvailles auxquelles
je ne bite rien du tout, sauf une chose: je pige de moins en moins
comment le bestiau est programmé et tout ce que j'entreprends devient
excessivement compliqué.

Au contraire, c'est fait pour rendre des choses intéressantes plus
simples à programmer (sans quoi un système d'onglets, ou tout autre
système nécessitant des variables persistantes, n'existera jamais
de façon utilisable sauf à stocker des dizaines de cookies sur l'ordi
de l'utilisateur. cf. le système actuel de dépliage de "blocks", qui
ne se souvient pas des réglages quand on clique sur un lien, ce qui
est peu pratique).

D'autre part, passer des "variables qui se baladent" est indispensable
pour faire une identification sans htaccess ni authentification PHP,
ce qu'il faudra bien se résoudre à entreprendre puisque c'est là le
problème de majeur de compatibilité et d'installation SPIP (ainsi que
l'objet de la moitié des docs et FAQs de la partie "premiers pas", et
d'une bonne part des questions de la liste SPIP). Quant à l'utilisation
obligatoire de cookies, ça m'embête parce que beaucoup d'utilisateurs
se méfient, parce que dans certains cas il faut les acceper au cas par cas,
et parce que les nouveaux navigateurs (Mozilla, IE 6) commencent à avoir
des réglages très restrictifs (genre il faut une "charte de vie privée" sur
le site pour le navigateur accepte le cookie).

Bien comprendre que ce système de liens gère automatiquement le passage
"silencieux" de variables, mais aussi les urlencode pour les URLs, les
htmlspecialchars pour les formulaires, etc. Ce qui permet de se délivrer
de pas mal de petits soucis, plus ou moins gros.

Un petit tour simple :

- d'abord les raccourcis :

// renvoie automatiquement le href=".." correspondant au lien filé en paramètre
echo newLinkHref('machin.php3?variable=truc&etc=2');
// renvoie simplement l'URL (sans les guillemets et le href autour donc)
echo newLinkUrl('bidule.php3');
// renvoie la valeur courante de la variable temporaire, dont le nom est une chaîne quelconque
$onglet_courant = getTmpVar('onglet config_precise');

- pour des besoins plus complexes, utiliser la classe elle-même :

Pour rester sur la page courante en modifiant une variable :

// crée un lien dans la variable $link à partir de l'URL de la page courante
$link = new Link;
// ajoute la variable modifier_site avec la valeur oui
$link->addVar('modifier_site', 'oui');

Pour passer à une autre page

$link = new Link('sites.php3?id_syndic=$id_syndic');
// éventuellement, ajouter des variables à la main
$link->addVar('titre', $titre);

Pour afficher le lien

// dans un bête href
echo $link->getHref();
// dans un formulaire : cela affiche le <form> suivi des entrées "hidden" correspondantes
echo $link->getForm('POST'); // on aurait pu mettre 'GET'
// ajouter éventuellement des champs à remplir
echo "<input type='text' name='url_site' value='http://'>";
// ajouter le submit et fermer le <form>
echo "<input type='submit' name='submit' value='Valider'>";
echo "</form>";

Il y a d'autres fonctions mais je ne détaille pas ici. Il n'est pas
interdit de consulter le code déjà écrit (édition des sites syndiqués,
par exemple, ou la fonction afficher_tranches() dans inc.php3), qui
ne doit pas être très dur à comprendre si on se donne la peine.

Evidemment, il y a sûrement un temps d'apprentissage. Aussi, pour
éviter d'apprendre à utiliser les fonctions, on peut mettre tout
le code au niveau global, en faisant des copier/coller si besoin
est. Au bout d'un moment, on ne gagne plus vraiment de temps en
faisant ainsi, et on n'avance plus qu'à coup de bidouilles.

Il y a sûrement aussi des faiblesses, auxquelles il est probablement
possible de remédier....

Quant au fait que ce soit une classe, c'est la seule façon propre
de faire pour ce genre de choses. Les classes et les objets, c'est
franchement pas dur à comprendre. Un objet, c'est comme une structure
dans un langage genre Pascal, mais à laquelle sont attachées des fonctions
en plus des variables. Point de vue utilisation, c'est bénin. Suffit
de penser à la flèche pour accéder aux champs et aux fonctions internes.

Exemples: je veux bien ne plus utiliser de
variables globales, mais faut m'expliquer en mots simples ce que je
peux faire à la place

Ce n'est pas qu'il ne faut pas utiliser de variables globales, c'est
qu'il ne faut pas s'étonner de ne plus les trouver accessibles sans
utiliser $GLOBALS[...] ou le mot-clé global. Du reste, le code au niveau
global est à éviter, pour des raisons de maintenabilité du code (c'est
toujours plus sûr de transporter une fonction d'un fichier à un autre,
que de transporter un bout de code exécuté directement lors de l'inclusion).
Il vaut mieux faire des fonctions, quitte à appeler ces fonctions
automatiquement lors de l'include (cf. les modifs que j'ai faites
dans inc_auth). Du reste, utiliser des variables de fonction permet
d'éviter les conflits éventuels entre variables globales (souvenirs
récents et mises en garde anciennes :-)).

J'ai été obligé d'introduire le include_local() pour résoudre le bug
récent des signatures de pétitions en PHP3, et tout autre bug lié
à l'inclusion, à l'intérieur d'une fonction, d'un include faisant
un return. Il était donc intéressant de généraliser le include_local(),
pour éviter au maximum d'autres ennuis de ce genre (sachant que pour
faire des inclusions de squelettes, il faudra passer une part du code
d'inc_public en fonctions, et que dans ces fonctions il y aura des
include, donc des include_local() pour éviter les pbs avec PHP3).

Je vous signale que l'effet immédiat de ces modifs est de me fermer
purement et simplement la porte de SPIP au nez.

Tout de suite les grands mots :-)) Non sérieux, une fois l'adaptation
faite, ce sera beaucoup plus facile au contraire. C'est très pratique de
pouvoir définir des variables persistentes sans avoir à chaque fois à se
palucher à la main le bidule qui va les gérer (cookies, etc.). Une fois
que la fonctionnalité est là, elle sera très intéressante à utiliser
pour rendre l'interface plus pratique (notamment, donc, pour les onglets
et les "blocks"). C'est très pratique aussi de ne pas se farcir les urlencode
et autres htmlspecialchars à la main. Surtout, le jour où on veut modifier
le comportement des liens, il y aura juste un endroit du code à modifier,
pas tout le HTML codé à la main dans l'espace privé comme c'est le cas
actuellement. C'est la même motivation que pour les fonctions du genre
debut_boite_info()....

a+

Antoine.

Hello,

Une petite citation marrante dans les forums :

Ps : je regrette également les réactions d un site connu que je ne
nomerais pas qui a la facheuse habitude d'avoir un nombril trop
gros et de ne voir que lui. Je noterais juste que certaines
responsables de ce site ont été invité (donc gratuitement) et n'ont
pas souhaité venir... Pour quelle raison ? Personnelement j'aurais
tout fait pour venir ...

Je ne sais pas si c'est de nous que ça parle.... :slight_smile:

Non, non, ce n'est pas de vous que ça parle. On a trouvé "pire" !!! :stuck_out_tongue:

A part ça, il n'y a malheureusement pas de légende sous les
photos, donc pas la peine de chercher à reconnaître Nicolas !

Les légendes devraient arriver, mais si vous insistez, je suis là :

http://manu.nerim.net/forum/photp_full-037.jpg
http://manu.nerim.net/forum/photp_full-040.jpg

Et vous, quand est-ce qu'on vous voit ??? :wink:

Nicolas.