Enlaces de navegación superior personalizados

:discourse2: Summary Custom Top Navigation Links allows you to add links to Discourse top navigation.
:eyeglasses: Preview Preview on Discourse Theme Creator
:hammer_and_wrench: Repository Link https://github.com/discourse/Discourse-nav-links-component
:open_book: New to Discourse Themes? Beginner’s guide to using Discourse Themes

Install this theme component

Features

Desktop

Mobile

Settings:

Name Descriptions
Nav links Semicolon delimited in this order: display name;description;URL
Hide dropdowns Hide category and tag dropdowns
Hide default links Hide the default links on both mobile and desktop.
  • Nav links — these need 3 parts:

    • Name
    • Description
    • Path or URL

    Name is the text for the link that shows up on the menu. Description shows up when you hover the name like this:

    Path/URL is where you want the link to go.

    You can add links as semicolon delimited values in theme settings following this order

    name;description;URL

    URL can also be relative like

    /c/staff, /t/232, /groups/plugin_authors, /about, /tags/official

  • Hide dropdowns

    Hides the default category and tag dropdowns

    Screenshot 2023-05-11 at 3.10.55 PM

  • Hide default links

    Hides the default links in this section

    Screenshot 2023-05-11 at 3.11.29 PM


:discourse2: Hosted by us? Theme components are available to use on our Standard, Business, and Enterprise plans.

Last edited by @JammyDodger 2024-06-11T23:40:05Z

Check documentPerform check on document:
64 Me gusta
Categories in "top menu"?
Add /groups to top nav
How to add breadcrumb?
What about adding tags in the top menu?
How to make some categories like Bugs and Features here visible in top menu?
What is the proper way to extend categories route and filter topics?
Link to find all deleted posts by all users in a particular period
Adding link to blog on main page
Create a Tag filter like 'Make & Model' on community.cartalk.com
How can I add a menu item
A playful approach to category moderation
Simple Unread List
Displaying all non-solved topics
Volunteer Activities - a simple setup for non-hierarchical collaboration
Discourse Docs
How to make the recommanded topics collection
Reply reminder - Remind users to reply to new users topics with zero replies
How to add a topic in top nav in a specific category?
Following tags and top feed for followed tags
Show latest list sorted by creation date
Following tags and top feed for followed tags
Change Topic List home router - from Latest to Following
Missing category and tags breadcrumbs
A "Votes" option for the top menu in main page
Adding a chat link in the top navigation links?
Add a specific class for wikis (when first post) at the topic list level
How to add an icon in a navigation link?
Customizing your site with existing theme components
Show Latest topics, not by comment on home page
Custom Button For Discourse
Add Follow feed to top navigation
Improvements i want for my discourse for making it less overwhelming/noisy for newcomers
Sidebar link / top button to PM admin
Adding 'Upcoming Events' to top navigation
Strange repetition in menu items
Disclaimer section on the "about" page
FKB Pro - Social theme
2023: The Year in Review
Is it possible to have the Board view as the only view?
How to add Button in Section
Brave default Theme
Air Theme
Provide a way to access tracked/watched topics (outside search)
Discourse Solved
The first Custom Top Nav link inappropriately appears selected
Add another tab to menu bar
Can we add "Groups" to top menu?
How to Disable ALL User-to-User DMs/Chat without breaking Other Features?
Disable personal message between members
Add category in Top Menu?
How can I remove the Category and tag filter?
How can I add a link to the top menu area?
Why we can't add groups to top menu
How to add links on home page menu to other site?
Traditional multi level hierarchy vs flat discourse hierarchy
Ordering topics - how do the links work?
Force Mobile Homepage
Knowledge Base
Automatically fill category with topics? "Best of" category?
How to add new button in different color
Adding "Category" as a topic list option within categories
Docs: Add link to top menu
New Theme: Tag-Pages Navigation
Custom nav bar options
Topic list sidebar navigation
Where can I see posts created by me?
Discourse Docs
Showing categories statically above most recent posts
Custom nav items no longer showing after recent update
Add /groups to top nav
Add topics-sorted-by-create-time to `top menu`
Categories Customization

Hi

I use this theme component. One of the items in the menú points to a category and I would like to inform the unread topics for this category.

image

Instead of Agora I would like Agora (3) for an user who has three unread topics in this category (same behaviour as standard link “Unread”).

Any idea?

Thanks in advance.

¿Alguien sabe cómo podría añadir un enlace de etiqueta que sea realmente relativo a la ruta actual? Me gustaría usar una etiqueta Acerca de y ofrecerla como un enlace superior que apunte a un tema Acerca de relativo a la categoría en la que se encuentra un usuario.
Por ejemplo, el usuario está en la categoría /c/feedback/7. Al elegir Acerca de se dirigirá a /tags/c/feedback/7/about.

2 Me gusta

Me gustaría usar el componente en una instancia, pero varios comportamientos no funcionan:

  • Cuando se usa “Ocultar enlaces predeterminados”, oculta los dos primeros elementos secundarios (Más recientes y Categorías). Pero cuando uno navega a una categoría, el enlace predeterminado “Categorías” ya no se muestra en el menú. Entonces, esta configuración oculta un elemento de navegación adicional, el que de otro modo sería el tercero en la línea.

Screenshot from 2022-05-10 18-29-05

  • Agregué un elemento de menú para un enlace de categoría directo (/c/game-talk). Cuando navego a él, no obtiene una clase activa y no se resalta. En cambio, el enlace “Más recientes” está resaltado y tiene una clase activa. Sin embargo, este no es el enlace predeterminado “Más recientes”, sino uno que agregué a través del componente (que solo enlaza a /latest).

Screenshot from 2022-05-10 18-25-39

  • De hecho, el enlace “Más recientes” tampoco obtiene una clase activa cuando no se llama “Más recientes”. Por lo tanto, la clase activa en la ruta actual no parece funcionar en absoluto debido al componente. Esta es la vista en /latest, pero con un nombre diferente para el enlace de “Más recientes”:

Screenshot from 2022-05-10 18-39-15

2 Me gusta

Pregunta rápida:
Estoy intentando crear esto y hacer que la URL sea ?order=created para que los usuarios puedan ver los temas recientes.

Esto funciona perfectamente en el escritorio, pero falla en el móvil: la barra de navegación simplemente se recarga y no muestra el menú desplegable.

Tengo la misma pregunta… ¿Es esa una solución? :face_with_monocle:

Creo que sé por qué sucedió esto…
el componente tiene la siguiente línea:

if (window.location.pathname.match(sec2)) {
          $(navHeader).html(filter + markd);
        }

Debido a que la expresión regular… ? en sí misma se usa como marca especial de expresión regular, y el parámetro se supone que se compara con window.location.search.
Hice un fork del componente, lo cambié al siguiente código y funciona.

if (sec[2].indexOf("?") === -1) {
        if (window.location.pathname.match(sec[2])) {
          $(navHeader).html(filter + markd);
        }
      } else {
        // reg ?->/?
        sec[2] = sec[2].replace(/\?/g, "/?");
        const pathWithSearch = window.location.pathname + window.location.search;
        if (pathWithSearch.match(sec[2])) {
          $(navHeader).html(filter + markd);
        }
      }
1 me gusta

Vaya, bien hecho :clap:

¿Dónde pusiste este fragmento de código?

Discourse-nav-links-component/mobile/head_tag.html, reemplaza el código coincidente. :face_with_peeking_eye:

1 me gusta

¿Por qué no hacer un PR para que todos se beneficien?

4 Me gusta

¿Puedo hacer eso? Siempre pienso que mi nivel de código es demasiado pobre… y me da un poco de vergüenza hacerlo. ¡¡¡Gracias por el consejo!!! ¡Lo revisaré y haré un PR!

1 me gusta

¡Yo también pienso eso sobre mis intentos de contribución!

Sin embargo, el @team (y sus herramientas automatizadas) parecen ser bastante buenos para organizar el código.

Una vez que lo hayas convertido en un PR, puedes publicar el enlace del PR aquí en Meta y se mostrará una impresionante actualización en vivo incrustada del estado del PR.

5 Me gusta

¿Alguna vez pudiste resolver esto? Estoy teniendo un problema similar.

No puedo decir que haya encontrado una solución ideal, pero sí descubrí cuál era el problema para mí.

El problema se puede encontrar aquí
https://github.com/discourse/Discourse-nav-links-component/blob/main/desktop/head_tag.html

Específicamente, esta parte:

    api.modifyClass("component:navigation-item", {
      pluginId: "discourse-nav-links-component",
      active: Ember.computed("contentFilterMode", "filterMode", function() {
        let contentFilterMode = this.get("content").get("filterMode");

        if (window.location.pathname === location) {
          return contentFilterMode === filter;
        } else {
          return this._super(contentFilterMode, this.get("filterMode"));
        }
      })
    });

Parece que esto establece el estado “activo” en cada enlace de navegación. Francamente, la lógica de cómo decide y qué son todas estas variables es bastante opaca para mí. Pero el problema está aquí:

        if (window.location.pathname === location) {
          return contentFilterMode === filter;
        } else {
          return this._super(contentFilterMode, this.get("filterMode"));
        }

Para mí, esto comprueba si la URL de la página es la misma que la ubicación de la URL de la barra de navegación y, si es así, devuelve el resultado de contentFilterMode === filter, siendo ambas variables un poco confusas para mí. Si la condición falla, parece que simplemente ejecuta la lógica normal de si algo debe marcarse como activo (que es por lo que mis enlaces no personalizados parecen funcionar bien). El problema es que, si bien este código se ejecuta correctamente una vez por cada enlace de navegación, la variable location siempre parece ser “categories”, por lo que la declaración if siempre es falsa para los enlaces personalizados. Además, incluso si corrijo la variable “location” reemplazándola con this.get("content").href, el valor de retorno también es siempre falso porque la variable filter también siempre se establece en “categories”.

Normalmente, haría una PR para solucionar esto, pero el problema raíz real todavía se me escapa. He ideado una solución alternativa que funciona para mí, pero altera ligeramente la funcionalidad documentada de este componente, por lo que preferiría no hacer una PR. Creo que habrá casos extremos en los que tampoco funcionará, como si tu página de inicio estuviera configurada en /latest

    api.modifyClass("component:navigation-item", {
      pluginId: "discourse-nav-links-component",
      active: Ember.computed("contentFilterMode", "filterMode", function() {
        return window.location.pathname.includes(this.get("content").href);
      })
    });

Básicamente, solo comprueba si la URL actual incluye la URL de la barra de navegación como una subcadena. Si es así, la resalta.

4 Me gusta

4 publicaciones se dividieron en un nuevo tema: Filtro de etiquetas relativas personalizado en la barra de navegación

Hola. I iterate on this post. Is there a way to indicate unread topics please? Thx

Hola,
¿Cómo configuramos abrir URL en una nueva pestaña?
¡Gracias!

Este podría ser un componente realmente útil, pero parece que algunos errores básicos (pero más allá de mi capacidad para corregirlos) están impidiendo su uso generalizado. ¿Se corregirá alguno de estos?

¿Puedes ser más específico sobre qué errores te impiden usar el componente?

Sí, lo siento, el principal que he encontrado es este:

¡Supongo que solo necesita un CSS mejor dirigido, pero podría estar equivocado!

1 me gusta