2015-10-10 1 views
-1

Besoin de votre conseil - comment montrer dans la chapelure chemin complet de l'article ou de la page? J'ai le code obtenu:Comment afficher dans django cms breadcrumbs?

{% for ance in ancestors %} 
    <li> 
     {% if not forloop.last %} 
     <a href="{{ ance.get_absolute_url }}">{{ ance.get_menu_title }}</a> 
    {% else %} 
     <span class="active">{{ ance.get_menu_title }}</span> 
    {% endif %} 
    </li> 
{% endfor %} 

, mais il ne montre que "Home" et la page en cours. Comment le modifier pour montrer le chemin complet dans la chapelure?

J'ai trouvé dans le fichier menu_tags.py quelque chose qui pourrait être un code qui appelle les ancêtres. Au moins il y a une ShowBreadcrumbs de classe:

class ShowBreadcrumb(InclusionTag): 
    """ 
    Shows the breadcrumb from the node that has the same url as the current request 

    - start level: after which level should the breadcrumb start? 0=home 
    - template: template used to render the breadcrumb 
    """ 
    name = 'show_breadcrumb' 
    template = 'menu/dummy.html' 

    options = Options(
     Argument('start_level', default=0, required=False), 
     Argument('template', default='menu/breadcrumb.html', required=False), 
     Argument('only_visible', default=True, required=False), 
    ) 

    def get_context(self, context, start_level, template, only_visible): 
     try: 
      # If there's an exception (500), default context_processors may not be called. 
      request = context['request'] 
     except KeyError: 
      return {'template': 'cms/content.html'} 
     if not (isinstance(start_level, int) or start_level.isdigit()): 
      only_visible = template 
      template = start_level 
      start_level = 0 
     try: 
      only_visible = bool(int(only_visible)) 
     except: 
      only_visible = bool(only_visible) 
     ancestors = [] 
     nodes = menu_pool.get_nodes(request, breadcrumb=True) 

     # Find home 
     home = None 
     root_url = unquote(reverse("pages-root")) 
     home = next((node for node in nodes if node.get_absolute_url() == root_url), None) 

     # Find selected 
     selected = None 
     selected = next((node for node in nodes if node.selected), None) 

     if selected and selected != home: 
      node = selected 
      while node: 
       if node.visible or not only_visible: 
        ancestors.append(node) 
       node = node.parent 
     if not ancestors or (ancestors and ancestors[-1] != home) and home: 
      ancestors.append(home) 
     ancestors.reverse() 
     if len(ancestors) >= start_level: 
      ancestors = ancestors[start_level:] 
     else: 
      ancestors = [] 
     context['ancestors'] = ancestors 
     context['template'] = template 
     return context 


register.tag(ShowBreadcrumb) 


def _raw_language_marker(language, lang_code): 
    return language 


def _native_language_marker(language, lang_code): 
    with force_language(lang_code): 
     return force_text(ugettext(language)) 


def _current_language_marker(language, lang_code): 
    return force_text(ugettext(language)) 


def _short_language_marker(language, lang_code): 
    return lang_code 


MARKERS = { 
    'raw': _raw_language_marker, 
    'native': _native_language_marker, 
    'current': _current_language_marker, 
    'short': _short_language_marker, 
} 
+0

À quoi ressemble la structure? Avez-vous une chose de type 'Home> Child Page> Current page'? –

+0

Oui, par exemple: Accueil> À propos de moi> Mes livres, mais montre seulement Accueil> Mes livres. La première et la dernière instance. –

+0

Vous pourriez être mieux servi pour inclure, dans votre question, le code utilisé pour obtenir les 'ancêtres 'itérables. – orokusaki

Répondre

1

Ce modèle est le même que je précise d'ariane utiliser pour y parvenir, aussi longtemps que la structure de votre page est similaire à;

Home 
    Child 
    Grandchild 
    Child 
    Grandchild 

Vous avez juste besoin de charger ce modèle avec les balises de menu comme; {% show_breadcrumb 0 "partials/breadcrumb.html" 0 %}

Les docs sur les balises de menu sont here

Ne pas oublier, que si vous avez des pages cachées des menus, ils ne seront pas affichés dans les miettes de pain, soit parce qu'ils sont créés par le menu tags en utilisant l'arbre de la page.

+0

Le code de la mine est avec des zéros, mais ne charge toujours pas :( –

+0

@StPavel vous n'avez pas de pages avec l'option de menu désactivée est-ce que vous? –

+0

Parlez-vous des pages qui sont cachées dans le menu de navigation? –

0

Merci à tous pour vos conseils, en particulier makrsweb. J'ai découvert que la raison en était que les pages n'étaient pas liées les unes aux autres. J'ai la maison, mes livres, Book1, Book2 etc. sous forme de pages autonomes, quand je les liaient, faisant ressembler à la structure:

Home 
    |My Books 
      |Book1 
      |Book2 
      |... 

(Parent avec Childs et grandchilds) tout a commencé aux travaux normalement. Le problème n'était pas dans le code, mais dans mon inattention.