Projet

Général

Profil

Development #38899

pour la sélection de la page "modèle", en cas de match exact, prendre le dernier

Ajouté par Frédéric Péters il y a plus de 4 ans. Mis à jour il y a plus de 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
11 janvier 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Révision f1755325 (diff)
Ajouté par Frédéric Péters il y a plus de 4 ans

misc: prefer latest match when looking for skeleton (#38899)

Historique

#1

Mis à jour par Frédéric Péters il y a plus de 4 ans

#3

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
#4

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 »).

#5

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 ?

#6

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.

#7

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.

#8

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)
#9

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

Formats disponibles : Atom PDF