Custom Hamburger Menu Links

Notei isso também e parece que apenas os links externos não aparecem em Mais.

3 curtidas

Eu uso links internos neste componente, por exemplo, tenho um link que abre convites de usuário: /my/invited/pending/

Ao abrir o link da barra lateral, recebo: Oops! Essa página não existe ou é privada.

O link funciona quando acessado a partir da barra de URL.

Ao inserir o URL completo (https://domain.com/my/invited/pending/), o URL abre assim:
https://domain.com/https://domain.com/my/invited/pending/

2 curtidas

Sim. Problema conhecido.

2 curtidas

Olá,
Isso deve funcionar com: Chat,/chat/browse/open :sorrindo:

2 curtidas

Sim, eu sei. Enviei meu comentário talvez um pouco rápido demais. Bem, definitivamente rápido demais, porque eu deveria dizer que deve usar o caminho em vez do URL completo.

Link extra para o chat… bem, a nova barra lateral mudou totalmente o playground e não é mais necessária.

2 curtidas

Eu dei uma olhada no código da barra lateral do Discourse e @manuel adição de ícones.

Parece que, atualmente, não é possível personalizar os links personalizados do ícone porque o método de decoração do menu hambúrguer não leva em consideração a constante prefixValue (que contém o nome do ícone) ou algo assim…

Também me parece que as decorações do menu hambúrguer com api.decorateWidget serão depreciadas. Veja:
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.js#L534

Além disso, o fato de links externos não funcionarem mais pode vir disso:
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/lib/plugin-api.js#L524

Portanto, deve haver algumas mudanças no core para tornar isso disponível.

:warning: Meu conhecimento sobre como o Discourse funciona é quase inexistente, então posso estar muito enganado.

Estou certo em minhas descobertas?

3 curtidas

Instalei este componente de tema do repositório do GitHub. Estou executando o 3.0.0.beta15 no meu discourse e, embora pareça ter adicionado, o menu hambúrguer não mostra meu link… Alguma ideia?

1 curtida

Pode estar relacionado a:

Até hoje, links externos ainda não funcionam.
E links internos devem começar com um caminho relativo, não um caminho completo.

3 curtidas

Muito obrigado por este componente útil. Preciso adicionar alguns links internos importantes, mas agora que o menu hambúrguer está integrado à barra lateral, acho que eles não são muito visíveis no menu Mais. Os usuários geralmente são péssimos em encontrar coisas, então realmente preciso colocá-los no nível superior, idealmente logo após Meus posts. Existem hacks de CSS para conseguir isso?

2 curtidas

Além do que o CSS pode alcançar, eu acho. A equipe do Discourse tem isso em seu roteiro, mas não está acontecendo rapidamente (eu acho):

6 curtidas

Eu 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>

Você pode ver o resultado em https://forum.courservio.de/
A versão original deste código é de https://meta.discourse.org/t/add-custom-links-to-sidebar/246848. Talvez possa te ajudar.

6 curtidas

@hosch Uau, muito bom, exatamente o que eu estava procurando! Muito obrigado.

1 curtida

@hosch Por acaso é possível movê-lo mais para cima? Eu gostaria que aparecesse depois da seção Comunidade, ou talvez até antes dela.


Editar: Parece que é possível com uma variação disto:
Rearrange Existing Hamburger Menu Items - #3 by awesomerobot

.sidebar-sections {
  display: flex; /* Configura um layout flexível para que você possa reordenar as coisas */
  flex-direction: column;
  .sidebar-section-community {
    order: -1;
  }
}

Eu me pergunto sobre movê-lo para a posição mais alta?

1 curtida

Há uma peculiaridade com este método em que o div personalizado desaparece ao alternar a visibilidade da barra lateral, por exemplo, se a janela do navegador estiver estreita. Este é um problema especialmente para tablets, que geralmente recebem a versão desktop do Discourse e exigem clicar no menu hambúrguer para exibir a barra lateral. Alguma solução possível? Obrigado!


Editar: Resolvido aqui:

1 curtida

Obrigado @hosch e @Olivier_Lambert por fazerem isso.

Você poderia explicar a este novato onde devo inserir isso? :pray:

1 curtida

Como posso reordenar elementos em uma seção de barra lateral / menu hambúrguer?

Por exemplo, quero colocar “Todas as categorias” acima das categorias na seção “Categorias”, o mesmo com “Todas as tags”.

Obrigado!

1 curtida

Agora você sabe como usar um componente para CSS, certo? Adicione isso na seção head.

Você não pode facilmente. Ainda não. Não está totalmente finalizado e polido no momento.

2 curtidas

Eu tentei isso, deu erro ao usar ponto e vírgula perto de src.

Vamos tentar de novo. Obrigado.

1 curtida

Isso ainda é um problema, as soluções a seguir não corrigiram o problema.

Configuração: Invite friends,/my/invited/pending/,f

Fora de tópico:

Eu já vi esse estilo de barra lateral condensada antes, mas não consigo encontrá-la em lugar nenhum. Isso é um componente de tema?

1 curtida

Você pode usar este CSS:

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

:slight_smile:

8 curtidas