[RUBY] Comment changer l'affichage du menu d'en-tête pour chaque page de transition

introduction

Il s'agit d'une solution de contournement lorsque vous souhaitez basculer le contenu du menu d'en-tête pour chaque page. (Par exemple, je souhaite afficher les menus de A, B et C sur l'écran d'accueil, et le menu de D sur le nouvel écran de publication, etc.)

Image complète

headerchange.gif

environnement

MacOS 10.15.7 ruby 2.6.5 Ruby on Rails 6.0.0

Allons travailler!

En tant que flux, (1) Créez un modèle partiel en divisant l'en-tête en un «en-tête d'écran d'accueil» et un «nouvel en-tête d'écran de publication». (2) branchez conditionnellement en fonction du chemin de la demande et changez le contenu de l'affichage. Ce sera.

Cette fois, nous modifierons le contenu du menu affiché dans l'en-tête lors de la connexion.

① Créez des modèles partiels pour "En-tête de l'écran d'accueil" et "Nouvel en-tête de l'écran de publication"

①-1 Commencez par créer un en-tête pour l'écran d'accueil. Créez "_root_header.html.erb" dans le répertoire views / layout.

erb:_root_header.html.erb


<div class="headerMenus">
  <div class="headerMenus__left">
    <%= link_to image_tag("myTown4.jpg ", class: "headerLogo"), "/" %>
    <% if user_signed_in? %>
      <div class="loginedMenus">
        <a href="#0", class="loginMenu">Top</a>
        <a href="#1", class="loginMenu">Category</a>
        <a href="#2", class="loginMenu">Prefecture</a>
        <a href="#3", class="loginMenu">New Posts</a>
      </div>
    <% else %>
      <div class="beforeLoginMenus">
        <%= link_to "Connexion invité", users_guest_sign_in_path, method: :post, class: 'beforeLoginMenu' %>
        <%= link_to "S'identifier", new_user_session_path, class: 'beforeLoginMenu' %>
        <%= link_to "s'inscrire", new_user_registration_path, class: 'beforeLoginMenu' %>
      </div>
    <% end %>
  </div>
  //Partiellement omis//
</div>

Et créez. D'ailleurs, lorsque vous vous connectez, vous verrez quatre menus: "Top, Category, Prefecture, New Posts".


##### ①-2 Créez un modèle partiel pour «l'en-tête du nouvel écran de publication». Créez "_header.html.erb" dans le répertoire views / layout.

erb:_header.html.erb


<div class="headerMenus">
  <div class="headerMenus__left">
    <%= link_to image_tag("myTown4.jpg ", class: "headerLogo"), "/" %>
    <% if user_signed_in? %>
      <div class="loginedMenus">
        <%= link_to "Top Page", root_path, class:"loginMenu" %>
      </div>
    <% else %>
      <div class="beforeLoginMenus">
        <%= link_to "Connexion invité", users_guest_sign_in_path, method: :post, class: 'beforeLoginMenu' %>
        <%= link_to "S'identifier", new_user_session_path, class: 'beforeLoginMenu' %>
        <%= link_to "s'inscrire", new_user_registration_path, class: 'beforeLoginMenu' %>
      </div>
    <% end %>
  </div>
  //Partiellement omis//
</div>

Lorsque vous vous connectez, vous verrez un menu appelé "Top Page".

(2) branchez conditionnellement en fonction du chemin de la demande et changez le contenu de l'affichage.

Dans application.html.erb dans les vues / mises en page, décrivez le branchement conditionnel en fonction du chemin de la requête (chemin vers l'écran d'accueil ou chemin des autres écrans).

erb:application.html.erb


//Partiellement omis//
<body>
  <header class="header">
    <%#Modifier l'affichage de l'en-tête sur la première page et les autres pages%>
    <% if request.path == '/' %>
      <%= render partial: "layouts/root_header" %>
    <% else %>
      <%= render partial: "layouts/header" %>
    <% end %>
  </header>
  //Partiellement omis//
</body>

Il y a une description <% if request.path == '/'%>, ce qui signifie "lorsque le chemin de la demande est '/' (racine)". Dans ce cas, le chemin racine est défini sur l'écran d'accueil.

Si la condition est vraie (le chemin racine) <%= render partial: "layouts/root_header" %> Appelez _root_header.html.erb avec.
Si faux (autre que le chemin racine) <%= render partial: "layouts/header" %> Appelez header.html.erb avec.

c'est tout.

finalement

Je me demande s'il existe une autre meilleure façon. Si quelqu'un a un meilleur moyen, j'apprécierais que vous me le disiez. Merci!

Recommended Posts

Comment changer l'affichage du menu d'en-tête pour chaque page de transition
[Rails] Comment changer le titre de la page du navigateur pour chaque page
Comment afficher la quantité de disque utilisée par le conteneur Docker pour chaque conteneur
Comment afficher le résultat du remplissage du formulaire
[Java] Comment obtenir l'URL de la source de transition
Comment afficher le champ de sélection de time_select toutes les 30 minutes
[Rails] Comment afficher une liste de messages par catégorie
Pour changer JVM pour chaque projet
[Rails] Comment obtenir l'URL de la source de transition et la rediriger
Comment afficher 0 sur le côté gauche de la valeur d'entrée standard
Comment obtenir le contenu de la carte à l'aide du mémorandum d'instructions
[Rails] Comment omettre l'affichage de la chaîne de caractères de la méthode link_to
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
Comment trier une liste de SelectItems
[Swing] Comment afficher un nom arbitraire dans la barre de menu sur Mac
Comment contraindre l'action de la destination de transition lorsqu'elle n'est pas connectée
Comment trouver la cause de l'erreur Ruby
Bouton [Rails] pour revenir en haut de la page
Personnalisez la répartition du contenu de Recyclerview
Comment afficher une page Web en Java
Comment obtenir le jour d'aujourd'hui
[Pour les débutants] Comment implémenter la fonction de suppression
[Ruby] Code pour afficher le jour
[Java] (pour MacOS) Méthode de définition du chemin de classe
Comment spécifier l'index de JavaScript pour l'instruction
[rails devise] Comment transférer les utilisateurs qui ne sont pas connectés à la page de connexion
[Java] Comment afficher les jours acquis par LocalDate et DateTimeformatter en japonais
[Rails] Comment afficher les prévisions météo de l'adresse enregistrée en japonais en utilisant OpenWeatherMap
Comment supprimer / mettre à jour le champ de liste de OneToMany
Comment régler l'heure d'affichage sur l'heure japonaise dans les rails
Comment écrire Scala du point de vue de Java
[Rails, JS] Comment implémenter l'affichage asynchrone des commentaires
[Java] Comment obtenir la valeur maximale de HashMap
Je souhaite afficher le nom de l'affiche du commentaire
[Rails] Comment changer le nom de colonne de la table
[Android] Comment obtenir la langue de réglage du terminal
[Rails] Comment obtenir le contenu des paramètres forts
Comment juger le clic de n'importe quelle zone de l'image
Comment télécharger une ancienne version d'Apache Tomcat
Comment faire un MOD pour Slay the Spire
Comment faire une boucle Java Map (for Each / extended for statement)
[Swift] Comment obtenir l'ID de document Firebase
Comment exécuter l'exemple WebCamCapture de NyARToolkit pour Java
[Rails] Comment afficher les images dans la vue
Comment étudier le kotlin pour la première fois ~ Partie 2 ~
Comment étudier le kotlin pour la première fois ~ Partie 1 ~
Comment gérer la différence dans chaque environnement avec yml sans augmenter le nombre de RAILS_ENV
[SwiftUI] J'ai essayé de découvrir comment cela change pour chaque emplacement spécifié de l'arrière-plan
SDWebImage: Comment vider le cache pour une UIImageView particulière
Transition en utilisant l'image d'en-tête de CardView telle quelle
Comment obtenir les informations les plus longues de Twitter à partir du 12/12/2016
L'idée de C # (expression lambda, pour phrase) à mâcher
Comment modifier la valeur de réglage de Springboot Hikari CP