Development #38899
pour la sélection de la page "modèle", en cas de match exact, prendre le dernier
0%
Description
Mettons une page avec une redirection https://../categorie/formulaire/ tapée en sous-page pour construire un carrousel. Et une autre https://../categorie/formulaire/ créée pour servir de modèle de page (genre image de bandeau).
Aujourd'hui c'est la première page qui sera prise mais dans la construction des pages on va se trouver avec la page d'accueil en premier, et donc un carrousel de la page d'accueil en presque premier, et donc la page devant servir de modèle derrière. Aussi, même si on ne parle pas de page d'accueil, je trouve plus clair de réunir les pages modèles en fin de liste des pages.
Je serais donc pour appliquer comme règle que ça soit la dernière occurence exacte qui soit prise, plutôt que la première. (et que cette règle devienne quelque chose d'attendu plutôt qu'un comportement qui a lieu par hasard).
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Fichier 0001-misc-prefer-latest-match-when-looking-for-skeleton-3.patch 0001-misc-prefer-latest-match-when-looking-for-skeleton-3.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Nicolas Roche il y a plus de 4 ans
cf https://docs.djangoproject.com/fr/1.11/ref/models/querysets/#order-by
Par défaut, les résultats renvoyés par un QuerySet sont triés selon le tuple de tri défini par l’option ordering de la classe Meta du modèle.
class Meta: ordering = ['order']
Donc oui, se sera la dernière page de redirection listée dans l'IHM qui sera prise en compte.
Je note cependant que cette correction concerne uniquement la représentation de la démarche elle même. Sa représentation dans le carrousel quand a elle, sera toujours obtenue depuis la page de redirection définie pour le carrousel (quel que soit son placement).
Aussi, afin d'obtenir un comportement plus déterministe, on pourrait peut-être également ignorer la page issue du carrousel dans le cas où exactement la même URL est redéfinie plusieurs fois. Par exemple :
def is_menu_item(page): for cell in CellBase.get_cells(): if type(cell) != MenuCell: continue if cell.root_page_id == page.parent_id: return True return False if (selected_page is None or len(redirect_url) > len(selected_page.get_redirect_url()) or (len(redirect_url) == len(selected_page.get_redirect_url()) and not is_menu_item(page))): selected_page = page
Mis à jour par Frédéric Péters il y a plus de 4 ans
Je note cependant que cette correction concerne uniquement la représentation de la démarche elle même. Sa représentation dans le carrousel quand a elle, sera toujours obtenue depuis la page de redirection définie pour le carrousel (quel que soit son placement).
Oui c'est ce qui est souhaité/souhaitable, le carrousel prend les pages filles.
Aussi, afin d'obtenir un comportement plus déterministe, on pourrait peut-être également ignorer la page issue du carrousel dans le cas où exactement la même URL est redéfinie plusieurs fois. Par exemple :
Le comportement proposé par le patch est déterministe et offre un comportement tout à fait explicable (aucune question à se poser quant à ce qui se trouve dans les menus et pour l'utilisation en modèle de page c'est la dernière plus spécifique qui est prise), alors que je ne comprends même pas ta proposition (il me semble que ce que tu veux c'est « la même chose sauf que si jamais une des pages est reprise dans un menu, mais bien sûr seulement un sous-menu direct et bien sûr sans prêter attention aux cellules héritées et oui c'est pas juste carrousel c'est tous les menus »).
Mis à jour par Nicolas Roche il y a plus de 4 ans
il me semble que ce que tu veux c'est « la même chose sauf que si jamais une des pages est reprise dans un menu
oui, c'était bien mon idée
mais bien sûr seulement un sous-menu direct et bien sûr sans prêter attention aux cellules héritées et oui c'est pas juste carrousel c'est tous les menus
en fait je ne connais pas assez bien pour proposer quoi que ce soit d'arrêté,
et je suis effectivement parti sur le items d'un menu de niveau 1.
- Ai-je bon pour les sous menus en général (je veux dire, est-ce que j'aurais raison d'ignorer aussi les pages de redirections issues d'un menu) ?
- Il s'agirait donc de prendre aussi en charge les éventuelle cellules héritées : isinstance(cell, MenuCell) ?
- ainsi que de faire en sorte que ce tests s'applique récursivement (parents de niveaux x) ?
Est-ce que ça vaut le coup que je propose un patch en ce sens, ou je laisse tomber ?
Mis à jour par Frédéric Péters il y a plus de 4 ans
Est-ce que ça vaut le coup que je propose un patch en ce sens, ou je laisse tomber ?
Mon commentaire au-dessus voulait pointer la complexité de l'explication du fonctionnement que tu souhaiterais, et voulait y dire non.
Mis à jour par Nicolas Roche il y a plus de 4 ans
- Statut changé de Solution proposée à Solution validée
ok, désolé d'avoir embrouillé ce ticket, que je valide.
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit f17553257ce2e769f9b5292fc20c973875145a4d Author: Frédéric Péters <fpeters@entrouvert.com> Date: Sat Jan 11 14:27:07 2020 +0100 misc: prefer latest match when looking for skeleton (#38899)
Mis à jour par Frédéric Péters il y a plus de 4 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: prefer latest match when looking for skeleton (#38899)