Custom Hamburger Menu Links

Noté esto también y parece que solo los enlaces externos no aparecen en Más.

3 Me gusta

Uso enlaces internos en este componente, por ejemplo, tengo un enlace que abre invitaciones de usuario: /my/invited/pending/

Al abrir el enlace desde la barra lateral, obtengo: Oops! Esa página no existe o es privada.

El enlace funciona cuando se accede desde la barra de URL.

Al introducir la URL completa (https://domain.com/my/invited/pending/) la URL se abre de la siguiente manera:
https://domain.com/https://domain.com/my/invited/pending/

2 Me gusta

Sí. Problema conocido.

2 Me gusta

Hola,
Esto debería funcionar con: Chat,/chat/browse/open :slightly_smiling_face:

2 Me gusta

Sí, lo sé. Envié mi comentario quizás un poco demasiado rápido. Bueno, definitivamente demasiado rápido, porque debería decir que se debe usar una ruta en lugar de una URL completa.

Enlace adicional para el chat… bueno, la nueva barra lateral cambió totalmente el área de juegos y ya no es necesaria.

2 Me gusta

Eché un vistazo al código de la barra lateral de Discourse y @manuel adición de iconos.

Parece que actualmente no es posible personalizar los enlaces personalizados del icono porque el método de decoración del menú hamburguesa no tiene en cuenta la constante prefixValue (que contiene el nombre del icono) o algo parecido…

También me parece que las decoraciones del menú hamburguesa con api.decorateWidget van a ser depreciadas. Ver:
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.js#L534

Además, el hecho de que los enlaces externos ya no funcionen podría provenir de esto:
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.js#L524

Por lo tanto, debería haber algunos cambios en el núcleo para que esto esté disponible.

:warning: Mi conocimiento sobre cómo funciona Discourse es casi inexistente, así que podría estar muy equivocado.

¿Tengo razón en mis hallazgos?

3 Me gusta

He instalado este componente de tema del repositorio de GitHub. Estoy ejecutando 3.0.0.beta15 en mi Discourse y, aunque parece que lo he añadido, el menú hamburguesa no muestra mi enlace… ¿Alguna idea?

1 me gusta

Puede estar relacionado con:

A día de hoy, los enlaces externos todavía no funcionan.
Y los enlaces internos deben comenzar con una ruta relativa, no con una ruta completa.

3 Me gusta

Muchas gracias por este útil componente. Necesito añadir algunos enlaces internos importantes, pero ahora que el menú hamburguesa está integrado en la barra lateral, me doy cuenta de que no son muy visibles bajo el menú Más. Los usuarios suelen ser terribles encontrando cosas, así que realmente necesito ponerlos en el nivel superior, idealmente justo después de Mis publicaciones. ¿Hay algún truco de CSS para lograr esto?

2 Me gusta

Creo que más allá de lo que CSS puede lograr. El equipo de Discourse tiene esto en su hoja de ruta, pero no está sucediendo rápidamente (creo):

6 Me gusta

Yo uso:

<script>
  const customHeader = document.createElement("div")
  customHeader.className = "sidebar-section-wrapper sidebar-section-community"
  customHeader.innerHTML = `
            <div class="sidebar-section-header-wrapper sidebar-row">
              <button id="ember11" class="sidebar-section-header sidebar-section-header-collapsable btn-flat btn no-text" type="button">
                <span class="sidebar-section-header-text"> Rechtliches </span>
              </button>
          </div>
          <div class="sidebar-section-content" id="customNavigation"/>
      `

  $(document).ready(function () {
    // Create the links
    const links = [
      { title: "Impressum", src: "/impressum" },
      { title: "Datenschutz", src: "/privacy" },
    ]

    // Mobile
    let hamburger = document.getElementById("toggle-hamburger-menu")
    if (hamburger) {
      hamburger.addEventListener("click", addCustomLinks)
    } else {
      addCustomLinks()
    }
    
    let bool = false;
    function addCustomLinks() {
      setTimeout(function () {
        // Force to wait until navigation has been loaded
        const sidebar = document.getElementsByClassName("sidebar-sections")[0]
        if (sidebar) {
          sidebar.append(customHeader)
          if (bool) return;
          // Get the customNav Id
          const customNavigation = document.getElementById("customNavigation")
          if (customNavigation) {
            links.filter(function (link) {
              let linkDiv = document.createElement("div")
              linkDiv.className = "sidebar-section-link-wrapper"
              linkDiv.innerHTML = `<a href="${link.src}" class="sidebar-section-link sidebar-section-link-everything sidebar-row ember-view">
                        <span class="sidebar-section-link-prefix icon"></span>
                        <span class="sidebar-section-link-content-text"> ${link.title} </span>
                    </a>
                  `
              customNavigation.append(linkDiv)
              let linkIcon = document.getElementById("link_" + link.title)
            })
          }
        }
        bool = true
      }, 0)
      
    }
  })
</script>

Puedes ver el resultado en https://forum.courservio.de/
La versión original de este código es de https://meta.discourse.org/t/add-custom-links-to-sidebar/246848. Quizás te pueda ayudar.

6 Me gusta

@hosch ¡Guau, muy bien, justo lo que estaba buscando! Muchas gracias.

1 me gusta

@hosch ¿Por casualidad es posible moverlo más arriba? Me gustaría que apareciera después de la sección Comunidad, o incluso antes de ella.


Editar: Parece que es posible con una variación de esto:
Rearrange Existing Hamburger Menu Items - #3 by awesomerobot

.sidebar-sections {
  display: flex; /* Configura un diseño flex para que puedas reordenar las cosas */
  flex-direction: column;
  .sidebar-section-community {
    order: -1;
  }
}

Me pregunto si se puede mover a la posición más alta.

1 me gusta

Hay una peculiaridad con este método donde el div personalizado desaparece al alternar la visibilidad de la barra lateral, por ejemplo, si la ventana del navegador es estrecha. Esto es un problema especialmente para las tabletas, que generalmente obtienen la versión de escritorio de Discourse y requieren hacer clic en el menú de hamburguesa para mostrar la barra lateral. ¿Alguna solución posible? ¡Gracias!


Edición: Resuelto aquí:

1 me gusta

Gracias @hosch y @Olivier_Lambert por hacer esto.

¿Podrías explicarle a este novato dónde debería insertar esto? :pray:

1 me gusta

¿Cómo puedo reordenar elementos en una sección de barra lateral / menú hamburguesa?

Por ejemplo, quiero poner “Todas las categorías” encima de las categorías en la sección “Categorías”, lo mismo con “Todas las etiquetas”.

¡Gracias!

1 me gusta

¿Sabes ahora cómo usar un componente para CSS? Añade eso en la sección de encabezado.

No puedes fácilmente. Todavía de todos modos. No está totalmente terminado y pulido en este momento.

2 Me gusta

Intenté esto, me dio un error al usar un punto y coma cerca de src.

Intentémoslo de nuevo. Gracias.

1 me gusta

Esto sigue siendo un problema, las soluciones posteriores no solucionaron el problema.

Configuración: Invite friends,/my/invited/pending/,f

Fuera de tema:

Había visto este estilo de barra lateral condensada antes, pero no logro encontrarlo en ninguna parte. ¿Es un componente de tema?

1 me gusta

Puedes usar este CSS:

#sidebar-section-content-categories,
#sidebar-section-content-tags {
    display: flex;
    flex-direction: column;
    li:last-child {
        order: -1;
    }
}

:slight_smile:

8 Me gusta