6
votes

Comment détecter la page actuelle dans un plugin de balises Jekyll?

J'ai un plug-in jekyll (liquide) et je voudrais détecter la page actuelle. Je vois qu'un contexte est passé dans le rendu et que je peux récupérer l'objet de site actuel comme context.registers [: site]. Cependant, tente d'obtenir la page en cours comme context.registers [: page] échoue.

Le problème que j'essaie de résoudre est de créer un plugin de bloc simple pour détecter si la page en cours est la page mentionnée dans la balise et la met en surbrillance.

Tous les astuces seraient grandement appréciés.

Merci!


0 commentaires

4 Réponses :


1
votes

Je ne pense pas qu'il y ait un bon moyen de le faire avec Jekyll tel quel. convertible.rb ne transmet que le site objet à liquide, qui ne contient aucune donnée spécifique à la page.

Je suggérerais d'éditionner convertible. RB Pour réussir les données dont vous avez besoin, soumission d'une demande de traction au projet principal pour extraire vos modifications et utiliser votre fourchette localement pour générer votre site. Hourra pour Open Source!

Le patch trivial suivant fonctionne pour moi localement contre Jekyll 0.11.0, faisant un hachage de page disponible en liquide comme Context.registers [: page] (note : C'est un hachage pré-converti à ce stade, de sorte que vous accédez à context.registers [: page] ['URL'] , pas context.registers [: page] .url < / code>): xxx

espère que cela aide!


0 commentaires

16
votes

s'avère que nous pouvons aussi faire cela comme: xxx

qui n'est pas évident mais ne nécessite pas de corriger le code.


3 commentaires

C'est brillant. Et totalement non intuitif. Merci pour la solution.


Mais si vous aviez besoin de saisir le contexte objet à initialiser ?


context.Environments.first ["page"] ["chemin"] peut être exprimé plus succinctement comme ['page'] ['path']



3
votes

contexte ['page'] code> semble renvoyer un hachage avec la plupart des propriétés de la page en cours, y compris URL code> et chemin code> Donc, l'objet de page em> em> peut être récupéré avec P>

context.registers[:site].pages.detect { |p| p.path==context['page']['path'] }


0 commentaires

1
votes

Ce problème se pose toujours lorsque vous apportez un menu qui doit afficher un peu différemment la page actuelle. Voici un plugin Jekyll que j'ai écrit que cela pour BootsTrap 5:

# Copyright 2020 Michael Slinn
#
# Apache 2 License
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
# You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and limitations under the License.

module Jekyll
  # Generates a Bootstrap 5 nav item.
  # 
  # Usage: {% nav_item icon link text %}
  #   Quotes are not used
  #   icon is assumed to be within the /assets/icons directory
  #   link must reference a local web page, do not preface with http: or https:
  #   text can be one or more words
  # 
  # Example:           
  # {% nav_item house-door.svg /index.html Welcome! %}

  class Bootstrap5NavItem < Liquid::Tag

    def initialize(href, command_line, tokens)
      super

      @active = '"'

      tokens = command_line.strip.split(" ")

      @icon = tokens.shift
      @link = tokens.shift
      @text = tokens.join(" ").strip
    end

    def render(context)
      relative_link = @link.delete_prefix('/')
      page = context['page']['path']  # relative to site root
      #puts "******* page=#{page}; @link=#{@link}"

      if page == relative_link then
        %Q(<li>
          <a class="nav-link active" aria-current="page" href="#">
            <img class="feather" src="/assets/icons/#{@icon}">
            #{@text}
          </a>
        </li>)
      else
        %Q(<li>
          <a class="nav-link" href="#{@link}">
            <img class="feather" src="/assets/icons/#{@icon}">
            #{@text}
          </a>
        </li>)
      end
    end
  end
end

Liquid::Template.register_tag('nav_item', Jekyll::Bootstrap5NavItem)


0 commentaires