
Recherche avancée
Autres articles (90)
-
Le profil des utilisateurs
12 avril 2011, parChaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...) -
Configurer la prise en compte des langues
15 novembre 2010, parAccéder à la configuration et ajouter des langues prises en compte
Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...) -
XMP PHP
13 mai 2011, parDixit Wikipedia, XMP signifie :
Extensible Metadata Platform ou XMP est un format de métadonnées basé sur XML utilisé dans les applications PDF, de photographie et de graphisme. Il a été lancé par Adobe Systems en avril 2001 en étant intégré à la version 5.0 d’Adobe Acrobat.
Étant basé sur XML, il gère un ensemble de tags dynamiques pour l’utilisation dans le cadre du Web sémantique.
XMP permet d’enregistrer sous forme d’un document XML des informations relatives à un fichier : titre, auteur, historique (...)
Sur d’autres sites (11198)
-
Evolution #3361 : Tri par défaut des entrées des menus du bandeau de l’espace privé
6 décembre 2014, par tcharlss (*´_ゝ`)Voilà ma petite proposition de patch et mes explications (un peu verbeuses, mais ça m’aide à retenir).
Dans http://core.spip.org/projects/spip/repository/entry/spip/prive/squelettes/inclure/barre-nav.html#L46, c’est la boucle
, ligne 46, qui affiche les entrées.
Tel quel, on ne peut pas faire de tri au moyen de{par xxx}
, car la chaîne de langue n’est pas contenue dans#VALEUR{menu}
, juste le nom de l’entrée i18n associé :array (size=6) ’auteurs’ => object(Bouton)[301] public ’icone’ => string ’’ (length=0) public ’libelle’ => string ’icone_auteurs’ (length=13) public ’url’ => null public ’urlArg’ => null public ’url2’ => null public ’target’ => null public ’sousmenu’ => null ’rubriques’ => ...
(Note : dans la boucle DATA, l’objet « Bouton » est traité comme un tableau associatif).
Pour faire le tri alphabétique, il y a juste 2 points à traiter :- Rajouter la chaîne de langue dans les valeurs. Les premières lettres suffiront pour le tri.
- Faire en sorte que cette paire clé/valeur soit au début du tableau. Anéfé, dans une boucle DATA, quand les
#VALEUR
sont des tableaux associatifs,{par valeur/toto}
ne fonctionne pas. En revanche, on peut faire{par valeur}
tout court et ça va prendre en compte la valeur associée à la première clé du tableau.
Donc concrètement, en ajoutant
'tri' => 'chaine de langue'
au début du tableau de chaque entrée, on peut faire{par valeur}
dans la boucle et le tour est joué.
Je propose 2 patchs, au choix :Patch A¶
Dans le squelette
barre_nav.html
: juste avant la boucle DATA qui affiche les entrées, on fait une boucle qui modifie le tableau qui l’alimente (dans le patch, on fait gaffe au espaces blancs, mais là c’est pour la lisibilité).[(#REM) prépare les données des entrées ] #SETsousmenu,#ARRAY
#SETentree,#ARRAY#CLE,#ARRAY
tri,#VAL#VALEURlibelle|_T|replace’\s+’,’’|substr0,3|strtolower,
icone,#VALEURicone,
libelle,#VALEURlibelle,
url,#VALEURlibelle,url,
urlArg,#VALEURurlArg,
url2,#VALEURurl2,
target,#VALEURtarget,
sousmenu,#VALEURsousmenu
#SETsousmenu,#GETsousmenu|array_merge#GETentree[(#REM) Affiche les entrées ]
- ...
Patch B¶
Dans
boutons.php
, on ajoute$this->tri = strtolower(substr(preg_replace('/\s+/','',_T($libelle)),0,3));
à la classeBouton
et on fait en sorte que ce soit la première donnée renvoyée.
Du coup dans le squelettebarre_nav.html
il suffit de rajouter{par valeur}
. -
Roadmap #3844 : Gérer la parenté dans la déclaration d’un objet éditorial.
12 mars 2018, par RastaPopoulos ♥J’ai continué dans la réflexion, ayant besoin de parent et enfants dans le plugin Duplicator. J’ai expliqué différents problèmes dans la liste Zone, mais pour pas le perdre, je vais copier ça dans ce ticket.
Proposition de deux fonctions d’API génériques¶
À mon avis il faut aller stable et plus abstrait que juste la déclaration dans l’objet, car
1) ça peut éventuellement changer
2) il faudrait pouvoir prendre en compte les cas courants magiquement même quand ya pas eu de déclaration explicite (id_rubrique, id_parent…)
3) ça donne le parent d’un type d’objet pour remonter, mais ça ne donne pas l’inverse, les enfantsDonc dans tous les cas il faudrait sûrement une fonction du genre
array objet_info_parent($objet)
dont l’algorithme serait :
- s’il y a une déclaration explicite, c’est ça qu’on utilise
- s’il y a un champ id_rubrique, on fait comme si ça avait été déclaré avec la rubrique array(type=>rubrique, champ=>id_rubrique)
- s’il y a un champ id_parent, on considère que l’objet est arborescent de lui-même, et donc comme si ça avait été déclaré comme ça array(type=$objet, champ=>id_parent)Mais je pense aussi une fonction cette fois un peu plus longue, qui donnerait l’ensemble des enfants directs qu’on a réussi à trouver
array objet_info_enfants($objet)
dont l’algorithme serait :
- un tableau de résultats en static pour toujours faire qu’une fois par hit
- si $enfants[$objet] déjà rempli en renvoie
- sinon on boucle sur tous les objets déclarés
- pour chaque, si on trouve que l’objet peut avoir comme parent direct le $objet qu’on cherche, alors on l’ajoute à son tableau des enfants possibles
- donc soit si dans sa clé "parent" ya $objet, soit s’il a un id_rubrique et qu’on cherchait pour "rubrique", soit s’il a un id_parent et qu’on cherchait pour son typeUn parent direct dont l’objet n’est pas fixe¶
Encore autre chose, je ne sais pas si c’est prévu, mais il faudrait pouvoir gérer les cas où le parent direct (on parle bien toujours de parentée directe, pas de liens multiples) peut être n’importe quel objet. Dans ce cas, il y a les champs objet et id_objet directement dans la table de l’objet.
Un parent encore plus compliqué avec deux cas à tester pour le même contenu¶
Mais il y a encore plus compliqué, et c’est le cas pour mes Chapitres, mais aussi le cas pour les Forums fournit par SPIP : le parent direct
peut être
- SOIT l’objet lui-même car il est arborescent avec un id_parent
- SOIT n’importe quel autre contenu SI ET SEULEMENT SI le champ id_parent=0 !C’est bien le cas pour les forums :
- le premier forum d’un fil a pour parent un objet SPIP, avec objet et id_objet remplis dans sa table ET id_parent=0
- les sous-forums ont AUSSI gardé en mémoire objet et id_objet du forum racine, mais avec id_parent rempli avec l’identifiant id_forum de leur parentDans ce cas on ne peut pas se baser uniquement sur le fait que objet et id_objet sont remplis. Le parent est un objet SPIP quelconque si objet et id_objet remplis ET id_parent=0. Et dès que id_parent>0 alors le parent direct est le même objet (forum, chapitre ou autre).
Bref ya des cas comme ça qui sont plus complexes, mais pourtant légitimes, et en plus fournis dans la dist, maintenus par le core, donc il faut savoir les gérer aussi.
Du coup pour conclure, j’ai pas forcément de solution directe pour la déclaration générique qui doit intégrer le noyau au final, mais c’est pour expliquer pourquoi peut-être, possiblement, il y aurait besoin d’un pipeline dédié dans Duplicator pour gérer ces enfantillages compliqués tant que dans l’API de parent c’est pas encore résolu.
En tout cas ça fait avancer la réflexion :)
-
Anomalie #4849 (Nouveau) : Lisibilité du tableau des statistiques
12 juillet 2021, par JLuc -#2693 a été fermé suite à la correction du code, mais la présentation du tableau de résultat n’a pas évolué et pour le comprendre, il a fallu que j’étudie le code. Du coup j’ai compris qu’il y a un petit problème de conception que je signale ici, ainsi que le manque de clarté dans un énoncé.
La colonne de gauche présente 2 listes à la suite.
Ces 2 listes sont séparées par un intertitre centré "..." qui indique qu’il y a une forme d’interruption dans la continuité d’une même liste.
Or ce n’est pas le cas puisque l’analyse du code révèle que :
- la première liste présente les 30 articles les plus populaires
- la 2eme liste présente la popularité des 10 articles les plus récents (classés du plus récent au plus ancien)
L’ordonnancement étant totalement différent, il s’agit bien de 2 listes qui devraient être perçues comme totalement différentes...
MAIS
- il y a quand même une interférence entre ces 2 listes puisque les articles présents dans la première (les articles populaires) sont exclus de la seconde.
- il n’y a qu’un seul titre pour ces 2 listes, qui reflète l’ambigüité du mélange (malheureusement sans l’éclairer) : « Afficher les visites pour les articles les plus populaires et pour les derniers articles publiés : « Afficher les visites pour les articles les plus populaires et pour les derniers articles publiés : »
Mais ce n’est pas possible, de même qu’il n’est pas possible de lister dans une même liste des voitures triées par vitesse maximale et des pommes triées par teneur en sucre.Donc il faudrait
- avoir un titre différent pour chacune de ces listes
- à mon avis aussi retirer le doublon qui rend difficile la lecture de la 2eme liste car autant il est simple de dire "c’est la popularité des articles les plus récents" (et intéressant d’avoir une telle liste), autant il est complexe d’expliquer et de comprendre "C’est la popularité des articles les plus récents sauf s’ils font partie des 30 plus populaires du site" (et difficile à utiliser une telle information circonluée).
- ne pas avoir de séparateur "[...]" entre ces 2 listes. Ce ne sera pas utile avec le 2eme intertitre.Par ailleurs le texte explicatif "Comment lire ce tableau" en bas de la colonne de droite contient une explication de ce qu’est la "popularité de l’article : (une estimation du nombre de visites quotidiennes qu’il recevra si le rythme actuel de consultation se maintient)". L’emploi du futur + l’hypothèse "si le rythme actuel de consultation se maintient" donnent des pistes incomplètes et ne permettent pas de comprendre ce que c’est.
- Spontanément j’avais retenu le futur et compris que c’était le nombre total final de visite de cet article, à supposer que sa fréquentation s’épuise mais sur quelle durée ? ça ne voulait rien dire.
- Maintenant je comprend que c’est une estimation du nombre de visite quotidienne à partir d’une "moyenne instantannée" de fréquentation. Mais sur quelle durée se fait cette moyenne instantanée ? La fréquentation estimée se fait elle aussi sur la base d’une moyenne instantanée pour les articles ayant plus d’une journée d’âge ou bien c’est la fréquentation de la veille qui est prise dans ce cas ? Ça ne veut pas dire grand chose encore...
En bref : ça en dit trop ou pas assez. On peut en dire moins avec simplement "une estimation du nombre de visites quotidiennes". Mais pour en dire plus et être plus précis... faudrait donner les infos manquantes.