Comme ils n'auront pas d'url propre, le plus simple reste de leur donner un nom ne pouvant pas faire office de slug. Mais un nom un minimum intelligible quand même quitte à faire.
Pour l'histoire des false/true, ça permettrait de gagner en performances, non ? En effet, comme l'introduction et la conclusion sont facultatives, il faudra bien vérifier leur présence à un moment ou à un autre. Autant que ça se fasse en O(1).
Je suis d'accord aussi ici avec Talus. Pourquoi a-ton besoin du slug dans un extrait ? Puisque au final le slug ne sert que pour le chemin physique, on a quelque chose comme ça :
1
2
3
4
5
6
{type:"extract",title:"titre de mon extrait",slug:"titre-de-mon-extrait",text:"titre-de-mon-chapitre/titre-de-mon-extrait.md"},
le slug fait donc doublon ici car on le retrouve déjà dans la valeur de la clé "text". ça ne fait que rajouter des trucs à modifier pour l'auteur qui aura besoin de passer par l’extérieur.
L'url d'un extrait (comme aujourd'hui) est la même que l'url de son chapitre associé à une ancre. Par exemple, l'url associé à l'extrait "Et un peu de code" est la suivante tutoriels/399/creez-un-navigateur-web-en-net/#4-et-un-peu-de-code
Pourquoi a-ton besoin du slug dans un extrait ? Puisque au final le slug ne sert que pour le chemin physique.
Ouais, mais si vous commencez comme ça, l'argument tient aussi pour un conteneur, non ?
J'admet ceci dit que c'est redondant dans le manifest.json. Je dis et je martèle qu'on en a besoin par ailleurs. À préciser également que ce nom de fichier DOIT se conformer aux règles de formation d'un slug pour ces mêmes raisons.
Et si vous me dite encore "non, va mourrir avec ton slug pour les extraits", alors vous devez me présenter un morceau de code qui fait pas de isfile() et qui assure que le nom du fichier de l'extrait est bien unique.
oui c'est le slug, mais lui il n'a pas besoin d'être dans le fichier manifest puisqu'on peut le déduire depuis text : "titre-de-mon-chapitre/titre-de-mon-extrait.md"
J'aimerai bien savoir ou (vraie question), car je ne le vois pas.
Imaginons qu'on ait plus que :
1
2
3
4
5
{type:"extract",title:"titre de mon extrait",text:"titre-de-mon-chapitre/titre-de-mon-extrait.md"},
pour connaitre le slug, il te suffit d'avoir une fonction du genre :
Ah oui, donc tu rajouterais le compteur dans le champ text (enfin, il doit déjà y être : tu devrais compléter l'exemple de manifest.json du premier message) ?
Et la contrainte d'avoir un slug unique dans le contenu, c'est juste au cas où on souhaiterait déplacer un extrait/conteneur dans un conteneur ayant déjà un objet portant ce titre ?
@astragis : quels en seraient les avantages ? Pour mettre le slug en clé du dictionnaire plutôt que dans un champ slug ?
(sachant qu'autant l'accès à un dico est en $\mathcal{O}(1)$, autant faire un crawl systématique sur des clés dessus est plus coûteux quand on lit le fichier json, en $\mathcal{O}(2n)$ ou un truc du genre).
EDIT: Ouais, m'enfin faut commencer à gerer place-in-parent, à refuser des manifests quand ils sont la même valeur pour ce champ … Et ça oblige à préciser le slug, tout compte fait, faudrait savoir.
on a le droit à path.exists()?
Nan. Pas de lecture disque inutile, un max dans le manifest.
ce n'est qu'une proposition. Au moins on a retourné le problème dans tous les sens, histoire que notre choix soit fait en connaissance de cause et qu'on doive pas faire une ZEP 42 qui revient sur le boulot de la ZEP12
Je n'ai pas dit qu'il fallait le générer a tort et a travers… A la rigueur, si le fichier introduction (resp conclusion) existe pas, soit on utilise celui-ci. Sinon un hash ; en gros, on ne râle pas si ça existe déjà. A la rigueur, la solution de pierre, mais bon, c'est le même bordel avec ou sans (quand viendra la zep-8 - oui je l'ai toujours en tête celle-là, même s'il en est pas question ici), alors qu'un hash généré, il y a encore moins de chance d'avoir un même nom de fichier (rien que pour 5 caractères générés, on a une chance sur 9765625… alors qu'un #intro, intro, … vu que c'est mot intelligible, y'a déjà plus de proba de tomber dessus !)
Et comme c'est déjà une chance minime d'avoir deux fois introductionau sein d'un même container` (et encore, je parle d'enfant directs !), le truc des hash risque de se produire une fois sur - disons - 1000, la première solution devrait convenir la plupart du temps. Et encore, ce genre de calculs ne devrait être fait que si on utilise l'éditeur du site et que* lors de l'écriture du dit tuto !
Quoiqu'il se passe si on bouge un extrait ou un conteneur ?
des gens
On lui recrée un slug (forcément unique, "tout les slugs sont uniques au sein du même contenu") et on l'enregistre avec celui-ci. Ce qui vous à l'air insurmontable me semble d'une simplicité effarante. J'ai raté un truc ? (edit: et on fait ça de manière récursive pour tout enfant s'il s'agit d'un conteneur).
PS: nan, artragis, je veux pas de / dans mes slugs. Tout simplement parce qu'on en a pas besoin. Il suffit d'un
1
2
3
4
5
6
try:chapter=tutorial.children_dic[slug_part].children_dic[slug_chap]exceptKeyError:raiseHttp404# opérations sur `chapter`
Yup yup yup. Unicité non pas vis à vis du container root, mais du container parent (juste), toussa toussa. C'est ce que j'ai déjà dit à plusieurs reprises.
Pourquoi donner un slug à un extrait
Talus
T'as un soucis avec le fait que slug + ".md" → nom de fichier pour enregistrer l'extrait, décidément ? (voir remarque plus haut sur "pourquoi des slugs")
Pourquoi le slug n'est pas unique de manière globale ?
Talus (je crois)
Par définition, pour qu'un slug soit "globalement unique", il faut deux chose : une liste de tout les slugs des conteneur et extrait du site. Qu'on doit maintenir dans un fichier (moche) ou dans une base de donnée (optimisé). Mais alors, on revient à la situation de départ : pour chaque nouveau slug, il faut demander à la BDD si le slug existe déjà, puis créer le nouveau en fonction. On perd donc tout l'avantage de l'édition externe (mais c'est peut-être que mon point de vue).
je demande justement le contraire : pourquoi le slug est-il unique de manière globale et non pas juste par rapport à son parent direct ?
Après tout, une introduction n'est qu'un extrait, non ?
Vayel
Oui. A cette différence qu'une intro/conclu n'as pas de titre et qu'elle est facultative. De deux choses l'une : on ne peut pas assumer que le premier extrait d'un conteneur est son introduction et le dernier sa conclusion, et on ne peut pas leur donner pour titre "introduction" et "conclusion", sinon on va avoir des collisions.
Alors soit on appelle les fichiers d'une manière qui est forcément unique (Introduction.md si ça vous amuse), soit on bloque les deux slugs en question. Soit on appelle une intruction cuugfhgf-hgff.md, une conclusion jugufu-yyy.md et le container /gutre-ytr/. Et l'url pour y accéder sera zestedesavoir.com/tutoriel/ygugugf-hgff/ufyrd/gutre-ytr/.
Non malheureux ! Le but de cette propriété est (toujours en adéquation avec la zep-8, travail a part, etc, …) de pouvoir indiquer où trouver le fichier et ne pas contraindre une orga !
@artragis : C'est déjà ce que je fini par faire, j'ai children qui est une liste pour quand j'ai besoin de faire des for dessus (faire une màj, deviner un sommaire, toussa) et children_dic pour les accès en $\mathcal{O}(1)$ sur un enfant bien précis (résoudre une url, toussa). L'un ou l'autre ne me pose pas de problème, sauf que ta fonction deserialize_json() retourne un dico. Ok, mais à un moment, faut le faire rentrer dans un objet, et faire un
1
2
forchildinobj['children'].keys():# opération moins rapide que sur la liste correspondante, dixit la doccontainer=child# c'est plus complexe que ça, évidement ^^
Sachant qu'un manifest se lit souvent … Une liste me semble appropriée.
@Talus: Raaaaaaaaaah, je te comprend toujours de travers Hum. Bon.
Je résume: pour toi, une introduction ou n'importe quel extrait devrait s'apeller par un hash, c'est ça ? (commence par répondre par oui ou par non, s'il te plait, tes réponses sont super ambigues )
Pour le slug unique par rapport à quoi, artragis a répondu.
Oui mais ça pose des contraintes. Y'a t-il une vraie raison pour ça ? Il faut penser "utilisateur" par forcément "developpeur" ici. Car c'est l'utilisateur qu'il faut satisfaire
À priori, je n'ai pas trouvé de raison valable pour que le slug ne soit pas unique uniquement de manière locale, d'autant si on fait du children[key].children[key].children[key]. Je cherche ceci dit pour être sur.
@Talus: Raaaaaaaaaah, je te comprend toujours de travers Hum. Bon.
Je résume: pour toi, une introduction ou n'importe quel extrait devrait s'apeller par un hash, c'est ça ? (commence par répondre par oui ou par non, s'il te plait, tes réponses sont super ambigues )
Bah ya deux cas: Soit le contenu est créé online et c'est notre tambouille invisible pour l' utilisateur qui se fait donc autant que les dev disent ce qui marche le mieux.
Soit c'est écrit offline puis importé et je ne vois pas ce qui nous empêche de faire des modif pour la compatibilité.
Non. Il devrait pouvoir s'appeler par un hash, si le nom / slug est déjà pris.
Talus
Il peut s’appeler comme il veut en même temps. Pourquoi un hash et pas introduction-1.md, par contre ? (sachant que chronologiquement, l'introduction est créé avant le texte, donc c'est lui qui à la primauté).
Non. Il devrait pouvoir s'appeler par un hash, si le nom / slug est déjà pris.
Talus
Il peut s’appeler comme il veut en même temps. Pourquoi un hash et pas introduction-1.md, par contre ? (sachant que chronologiquement, l'introduction est créé avant le texte, donc c'est lui qui à la primauté).
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte