Overlay party
Commented by Bernard on Mar. 26
Rv mercredi 26 mars 2008 à tous ceux qui veulent en savoir un peu plus sur la construction et l'utilisation des overlays dans Yacs.
Mar. 26 2008
En attendant, ceux qui le souhaitent peuvent déjà consulter ces quelques lieux :
RV donc mercredi 26/03/08, ici même, de 21h à 23, heure de Paris. Les discussions seront essentiellement en français, mais les anglophones sont les bienvenus - on trouve toujours moyen de se comprendre
- Un overlay ? c'est quoi ?. La base.
- les scripts : entrez simplement dans les spécificités de chaque script de référence. Naviguez dans la page jusqu'au module "overlays".
- une recherche sur le mot overlay, et une autre avec le pluriels : overlays, pour avoir une idée de tout ce que yetanothercommunitysytem a en stock à ce propos.
RV donc mercredi 26/03/08, ici même, de 21h à 23, heure de Paris. Les discussions seront essentiellement en français, mais les anglophones sont les bienvenus - on trouve toujours moyen de se comprendre

Salut Agnès on Mar. 26
reste à ajouter le fait de mettre en forme la balise de titre et le tri sur les données de l'overlay on Mar. 26
forms) permet d'agencer un masque de saisie interactivement (merci AJAX) et, ensuite, de capturer les données saisies et les fichiers attachés dans un article "normal" de YACS. on Mar. 26Donc en résumé, si vous voulez créer un formulaire de saisie, plutôt sans programmation, alors le nouveau module est pour vous. Sinon, c'est plutôt overlay et les mains dans le code PHP...
Donc ce soir je m'adresse seulement aux développeurs PHP avertis, bien entendu
Or en pratique, on a souvent besoin de conserver cette structure de base, mais en la complétant avec quelques champs. C'est là que l'overlay intervient.
YACS fournit en standard un champ générique pour chaque article, dans lequel il peut ranger plusieurs informations si besoin.
Pour ranger les données additionnelles, ou pour les retrouver, il appelle des fonctions bien précises décrites dans le script overlays/overlay.php.
Par défaut, ce script ne fait pas grand-chose, mais il sert de structure de base pour d'autres scripts plus évolués.
Pour écrire un nouvel overlay, il faut créer un script qui surcharge les fonctions de overlays/overlay.php, en leur faisant faire quelque chose "pour de vrai".
Prenons un premier exemple classique, celui des recettes de cuisine, avec l'overlay overlays/recipe.php.
Ce script rajoute quelques champs à la saisie d'un article standard, pour noter séparément des informations importantes, comme le nombre de convives, la durée de cuisson, la liste des ingrédients.
Ces champs apparaissent lors de la saisie d'une nouvelle recette lorsque YACS appelle la fonction
get_fields(), qui permet à l'overlay d'ajouter de nouveaux champs de saisie à la page.Après la saisie, lorsque l'usager clique sur le bouton d'envoi, les données sont transmises à YACS, qui appelle alors la fonction
parse_fields()pour que l'overlay puisse extraire de ce flot les données qui l'intéresse.La nouvelle version de la recette, y compris les données spécifiques de l'overlay, est ensuite rangée dans la base de données.
Pour cela, YACS "plie" ces données (les informaticiens parlent de "sérialisation") pour les faire entrer, toutes ensemble, dans le champ prévu à cet effet dans la table des articles. on Mar. 26
L'overlay possède cinq parties distinctes (dont celles dont tu viens de parler. Peux-tu les schématiser pour nous ? À quels types d'action bien spécifiques chaque partie est-elle dévolue ?
(php avertie mais pas comme langue courante :p) on Mar. 26
Pour restituer ces données à l'écran, YACS appelle la fonction de l'overlay
get_text(), en précisant le contexte d'affichage des données.Par exemple, dans le panneau d'affichage principal d'un article, yacs appelera
get_text('view'), alors que pour l'intégration dans une liste d'articles il appeleraget_text('list').Ainsi, l'overlay a le moyen de générer plus ou moins de texte, en fonction de la place dont il dispose à l'écran.
Dans la page d'affichage d'une recette, vous noterez que le champ de description habituel est intitulé 'Etapes de préparation'. C'est parce que yacs utilise la fonction
get_label()pour permettre à l'overlay de personnaliser certains libellés de la page générée. Important dans certains cas, moins dans d'autres.Et puis, comme Christian le sait déjà, il y a aussi la possibilité d'intervenir sur le titre d'une page dans une liste ou ailleurs, avec la fonction
get_live_title(). C'est par ce biais que l'overlay overlays/issue.php ajoute une information d'état sur l'avancement des problèmes (en cours, résolu, etc.) sans modification du titre initial.Avec ces trois fonctions supplémentaires on gère plus ou moins le rendu visuel des données spécifiques à l'overlay. Ca va jusque là ? on Mar. 26
Lorsque yacs intervient sur une page, il appelle la fonction de l'overlay
remember()pour lui signaler l'opération en cours. Lors de la création de la page, c'estremember('insert')qui est utilisé.Lors d'une modification, l'appel est
remember('update')et, très logiquement,remember('delete')lors d'une suppression de page.Pour synchroniser une ou plusieurs tables de la base de données avec un overlay, il faut lancer les directives "qui vont bien" dans la fonction
remember().Les commandes SQL typiques sont
INSERTpour créer un enregistrement surremember('insert'),UPDATEpour modifier un enregistrement surremember('update'), etDELETEpour supprimer un enregistrement surremember('delete').Dans yacs, même le choix des noms est simple...
Pour reprendre l'exemple de overlays/day.php, les mises à jour portent sur la table
yacs_dates, qui contient un enregistrement par événement géré.Et pour overlays/contact.php, c'est la table
yacs_contactsqui contient les données spécifiques à l'annuaire des contacts.Notez que dans ce dernier cas, les informations rangées dans la table sont un mélange des données spécifiques à l'overlay, et de celles de l'article initial. En effet, le titre de page est le nom du contact, et il est inutile de prévoir un champ séparé pour le saisir.
Ca va toujours ? on Mar. 26
Donc, l'identifiant de la date associée à l'article numéro 123, c'est ... 123 aussi ! on Mar. 26
Hello Nick
La création et la maintenance des tables additionnelles peuvent aussi être incluses dans l'overlay. Regarder la fonction
setup()à la fin de overlays/contact.php pour la définition de la table. on Mar. 26setup()pour un overlay non-standard, il faut ajouter une extension ("hook" en anglais) à l'événementcontrol/setup.php, sur le modèle fourni dans agents/browsers_hook.php par exemple. Le cas échéant, le script d'extension (dont le nom se termine par_hook.php) ne sera pas placé dans le répertoireoverlays, mais dans un sous-répertoire portant le même nom que l'overlay associé. on Mar. 26Salut LeToto on Mar. 26
Là, Christian va poser quelque question ? on Mar. 26
(Je me rappelle tes mésaventures Christian
Christian, en termes de design, pour gérer un document de type facture, il faut deux tables en plus dans la base de données, l'une pour les en-têtes de document, et l'autre pour les lignes de détail. La fonction
get_fields()devra fournir une interface de saisie pour l'ensemble. La fonctionparse_fields()sauvera tout ça en mémoire. Et la fonctionremember()mettra les tables à jour en fonction des saisies effectuées.Du lourd quoi, quelques centaines de lignes de code dans un seul overlay au bas mot... on Mar. 26
Christian, pour ton problème de titre, ce devrait être dans codes/codes.php, à la fonction
beautify_title().Cette fonction a été introduite récemment pour les titres en lieu et place de
beautify(), réservé au corps principal des pages.Les traitements sont minimaux, et le temps de traitement aussi.
Mais l'effet de bord, c'est que la plupart des balises HTML et des codes YACS sont supprimés dans les titres...
on Mar. 26
beautify_title()pour l'instant. Si tu m'indiques les balises qu'il faudrait rajouter à minima, je le fais tout de suite, et ça sera dans la 8.3... on Mar. 26strong, etbetuetiaussi ? on Mar. 26ttau cas où... on Mar. 26Et puis zou,
emaussi, pour le même prix... on Mar. 26pour le tri j'ai trouvé la fonction list_for_anchor_by dans articles.php on Mar. 26
Le champ de rangement des données de l'overlay est indexé par YACS, et ceci convient pour les recherches plein texte.
Mais pour la requête multi-critère, rien ne vaut la table séparée à mon avis... on Mar. 26
Comment sont gérés ces champs ? on Mar. 26
Lors de la création ou de la modification d'une page, yacs appelle la fonction
get_id()de l'overlay pour obtenir une chaîne de caractères.Voir un exemple dans overlays/day.php.
Cette information est sauvée avec les autres attributs de la page dans la table des articles. Le champ correspondant est indexé, donc permet des recherches ou des tris par SQL.
Ce champ est appelé
overlay_iddans la tableyacs_articles. on Mar. 26Je ne connais pas trop les layout mais peut-on s'en servir pour arriver à nos fins ? on Mar. 26
SELECT id, title FROM yacs_articles WHERE overlay_id = 'truc1234'pour trouver les articles qui ont l'overlay_id positionné à 'truc1234', si tu vois le genre...Les layouts, c'est plutôt pour la mise en forme du résultat d'une requête. En gros, la mécanique standard de yacs pour lister des éléments de la base de données, c'est d'exécuter une requête SQL par
SQL::query(), et de passer le résultat à un layout, pour obtenir, le plus souvent, une chaîne de caractères insérée dans la page web retournée au navigateur.##SQL::query()## ->
$layout->layout()->$context['text']-> HTMLC'est peut-être un peu trop simplifié là, non ? on Mar. 26
est-ce qu'on peut par exemple sans servir pour créer un bridge pour l'authentification des utilisateur...
Si bernard peu répondre à ceci, merci on Mar. 26
Et pour l'authentification des usagers, c'est pas du tout les overlays, mais les extensions côté utilisateurs. Voir le contenu de
users/authenticators. on Mar. 26pour les extensions côté utilisateurs, y a un manuel sur le site ? de la doc ? agnes
Nuxwin, pas de problème, le but de cette soirée est de répondre aux questions, justement...
Pour l'authentification des utilisateurs, il y a une interface standard, users/authenticator.php, et des scripts qui l'implémentent. Tout comme pour l'interface overlays/overlay.php, mais avec des objectifs et des moyens différents.
Tof a réalisé un script d'authentification de type bridge par ce moyen il me semble... on Mar. 26
Articles::list_for_anchor_by(). on Mar. 26Christian, envoie-moi ta modification que je regarde s'il te plait
Nuxwin ce soir, il a décidé d'être vilain, bête et méchant alors faites z'attention à vos fesses ! on Mar. 26
heu quels testes ?, concernant quoi ? on Mar. 26
Retour à la page de Bernard
impossible de transmettre votre message à Bernard. on Mar. 26
sorry, i'm very tired ! on Mar. 26
Nuxwin propose l'architecture MVC...
Agnès, ton avis sur les prochaines sessions ? on Mar. 26
Je note les date lol on Mar. 26
Merci à tous pour cette excellente soirée en votre compagnie. on Mar. 26
Pour les formulaires, si personne ne tranche ce soir, on en reparlera on Mar. 26
Encore merci à tous, et à bientôt pour de nouvelles aventures yacsiennes. Ce n'est que le début de notre conquête planétaire
3...
2...
1...
Verrou ! on Mar. 26