রেলস: কোনও পৃষ্ঠার শিরোনাম কীভাবে পরিবর্তন করবেন?


160

কোনও প্লাগ-ইন ব্যবহার না করেই রেলস অ্যাপে পৃষ্ঠাগুলির জন্য কাস্টম শিরোনাম তৈরি করার সর্বোত্তম উপায় কী?

উত্তর:


244

আপনার দৃষ্টিতে এ জাতীয় কিছু করুন:

<% content_for :title, "Title for specific page" %>
<!-- or -->
<h1><%= content_for(:title, "Title for specific page") %></h1>

নিম্নলিখিত লেআউট ফাইলে যায়:

<head>
  <title><%= yield(:title) %></title>
  <!-- Additional header tags here -->
</head>
<body>
  <!-- If all pages contain a headline tag, it's preferable to put that in the layout file too -->
  <h1><%= yield(:title) %></h1>
</body>

এছাড়া encapsulate করতে সম্ভব content_forএবং yield(:title)সাহায্যকারী পদ্ধতিতে বিবৃতি (যেমন অন্যদের ইতিমধ্যে পরামর্শ দিয়েছেন)। তবে সাধারণ ক্ষেত্রে যেমন কাস্টম সহায়ক ছাড়া নির্দিষ্ট কোডগুলিতে সরাসরি প্রয়োজনীয় কোডটি রাখতে চাই।


24
প্রতিটি পৃষ্ঠার জন্য একটি "ডিফল্ট শিরোনাম" তৈরি করতে আমি নীচের উত্তরটির সাথে এই উত্তরটি একত্রীকরণ করেছি: <title><%= (yield(:title) + " - " unless yield(:title).blank?).to_s + "This is always shown" %></title>বিন্যাসে এবং <% content_for :title, "Conditional title" %>ভিউগুলিতে।
জন

1
5.2.0 রেলগুলির সাথে নিখুঁতভাবে কাজ করে!
স্টানিমির দিমিত্রভ

1
আমি যখন ব্যবহার <h1><%= content_for(:title, "Title for specific page") %></h1>করি তখন আমি আমার ডোমটিতে কোনও আউটপুট দেখতে পাই না (যেমন আমার এতে <h1></h1>কোনও সামগ্রী নেই)। তবে আমার <title>Title for specific page</title>সঠিকভাবে কাজ করা হয়। কোন ধারনা?
জোশুয়াউসামার্স

118

এখানে আমি ব্যবহার করতে চাই একটি সহজ বিকল্প

আপনার বিন্যাসে

<head>
  <title><%= @title %></title>
</head>

এবং আপনার পৃষ্ঠার টেমপ্লেটের শীর্ষে (প্রথম লাইন)

<% @title="Home" %>

যেভাবে লেআউটটি এবং পৃষ্ঠাগুলি টেমপ্লেটগুলি পার্স করা হচ্ছে তার কারণে @ শিরোনাম = "হোম" লেআউটটি রেন্ডার হওয়ার আগে মূল্যায়ন করা হবে।


32
এটি লক্ষণীয় যে এটি রেল ভিউ ক্যাচিংয়ের সাথে কাজ করবে না। রেলগুলিতে 3 কন্টেন্ট_ই ক্যাচিংয়ের সাথে সঠিকভাবে কাজ করার জন্য যথেষ্ট স্মার্ট (নির্বাচিত উত্তর দেখুন)।
opsb

4
নিয়ামকের ভিতরে ভেরিয়েবলগুলি সেট করা উচিত নয়?

2
@ সাজ্জাদমারচেন্ট সাধারণত আমি একমত, হ্যাঁ ভেরিয়েবলগুলি নিয়ামক হিসাবে সেট করা উচিত। এক্ষেত্রে টেমপ্লেটটি আরও উপযুক্ত বলে মনে হচ্ছে কারণ আপনি পৃষ্ঠার উপস্থিতি নির্দিষ্ট করার জন্য কোনও বৈশিষ্ট্য নির্দিষ্ট করছেন। নিয়ামক পদক্ষেপের জন্য দুটি পৃথক পৃথক মতামত ব্যবহার করাও সম্ভব (এটি খুব ঘন ঘন ঘটে না, আমি কোনও নির্দিষ্ট টেমপ্লেটের সাথে শিরোনামটি কতটা দৃ bound়ভাবে আবদ্ধ করে তা বোঝাতে এটি ব্যবহার করছি)।
opsb

50

সেরা অনুশীলন হ'ল কন্টেন্ট_ফর্ম ব্যবহার করা।

প্রথমে কয়েকটি সহায়ক পদ্ধতি যুক্ত করুন (যেমন অ্যাপ্লিকেশন / সহায়তা / অ্যাপ্লিকেশন_হেল্পার.আরবি তে আটকে):

def page_title(separator = " – ")
  [content_for(:title), 'My Cool Site'].compact.join(separator)
end

def page_heading(title)
  content_for(:title){ title }
  content_tag(:h1, title)
end

তারপরে আপনার লেআউট ভিউতে আপনি কেবল ব্যবহার করতে পারেন:

<title><%= page_title %></title>

... এবং নিজেই দেখুন:

<%= page_heading "Awesome" %>

এই উপায়ে আপনি আপনার শিরোনামের জন্য এইচ 1 ট্যাগটি আটকে রাখার অনুমতি দেওয়ার সুবিধা রয়েছে এবং আপনার নিয়ামকটিকে সুন্দর এবং পেস্কি @ টাইটেল ভেরিয়েবলগুলি মুক্ত রাখে।


4
কিভাবে একটি মান সেট করে @content_for_title?
জর্দান ফিল্ডস্টেইন

@ জর্দানফেল্ডস্টেইন তিনি কী বলতে চেয়েছিলেন তা আমার কোনও ধারণা নেই @content_for_title। হওয়া উচিত (content_for(:title) + ' &mdash; ' if content_for?(:title)).to_s + 'My Cool Site'। তারপরে এটি আপনার দর্শন থেকে সেট করতে, ঠিক<% content_for :title, 'My Page Title' %>
টোবিয়াস J

1
@content_for_titleআপনি যখন ব্যবহার করেছেন তখন কি ঘটেছিল content_for, এই মন্তব্যটি লেখা হয়েছিল। আমি বিশ্বাস করি এটি এখন আর নেই, তবে আমি সম্প্রতি দেখিনি। টবি জে এর মন্তব্য আজকের রেলগুলির জন্য সঠিক। আমি আমার আসল উত্তরটি আপডেট করব।
অপেজো

20

উপর একটি উন্নতি @opsb এবং আরো একটি সম্পূর্ণ ফর্ম @FouZ এর:

ইন application.html.erb:

<title><%= @title || "Default Page Title" %></title>

ভিউতে ইরব ফাইল বা এর নিয়ামক:

<% @title = "Unique Page Title" %>


6

আপনি যে ব্যবহারের ক্ষেত্রে বা প্রয়োজনীয়তাগুলি পূরণ করার চেষ্টা করছেন সে সম্পর্কে আরও বিশদ ছাড়াই আমি বেশ কয়েকটি বিকল্প সম্পর্কে ভাবতে পারি:

1) আপনার লেআউট পৃষ্ঠাগুলির একটিতে শিরোনামটি স্যুইচ করুন এবং এতে থাকা কোনও সহায়ক পদ্ধতি গ্রহণ করুন application_helper.rb

<title><%= custom_title %></title>

এই পদ্ধতির আপনাকে প্রতিটি বিন্যাস পৃষ্ঠার জন্য একটি অনন্য শিরোনাম দেবে।

2) রেইলকাস্টগুলি হেড ট্যাগগুলির মধ্যে যা প্রদর্শিত হবে তা লোড করতে একটি আংশিক ব্যবহারের পরামর্শ দেয়

3) লোড ইভেন্টের পরে যদি শিরোনাম পরিবর্তন করতে হয় তবে ডিওএমকে চালিত করতে জাভাস্ক্রিপ্ট / এজ্যাক্স কলগুলি ব্যবহার করুন।

হতে পারে আপনি titleউপাদান দ্বারা ট্যাগ করা সামগ্রীটি সত্যই পরিবর্তন করতে চান না । সম্ভবত আপনার কোনও ধরণের রুটির টুকরোগুলি প্রয়োজন, যাতে আপনার ব্যবহারকারীরা সর্বদা জানতে পারেন যে তারা আপনার সাইটের নেভিগেশন শ্রেণিবদ্ধের সাথে সম্মানজনকভাবে কোথায়। আমি কীভাবে সোনারবার্গ প্লাগইনটি দিয়ে দুর্দান্ত কাজ করেছি, আমি নিশ্চিত যে একই কার্যকারিতাটি বন্ধ করার অন্যান্য উপায় রয়েছে।


3

আমি নিফটি_জেনারেটরটির "নিফ্টি_লেআউট" ব্যবহার করি যা একটি শিরোনাম ভেরিয়েবল সরবরাহ করে যা আমি পৃষ্ঠায় কল করতে পারি তা ব্যবহার করে:

<% title "Title of page" %>

আমি ব্যবহারকারীর <% title "Title of page", false %>শিরোনামটি কেবল ব্রাউজার শিরোনামে প্রদর্শন করতে পারি এবং পৃষ্ঠায় নয়।


2

আপনি এটিকে আপনার নিয়ামকের একটি পূর্ব_ ফিল্টারটিতে সেট করতে পারেন।

# foo_controller.rb

class FooController < ApplicationController

  before_filter :set_title

  private

  def set_title
    @page_title = "Foo Page"
  end

end

# application.html.erb

<h1><%= page_title %></h1>

তারপরে আপনি নিয়ামকের বিভিন্ন ক্রিয়াকলাপের জন্য আলাদা আলাদা শিরোনাম সেট করার জন্য set_title পদ্ধতিতে শর্তাদি সেট করতে পারেন । আপনার নিয়ামকের মধ্যে সমস্ত প্রাসঙ্গিক পৃষ্ঠার শিরোনাম দেখতে সক্ষম হওয়ায় ভাল লাগছে।


2
এটি (দুর্ভাগ্যক্রমে) এইভাবে ব্যবহার করা সাধারণ অনুশীলন, তবে পৃষ্ঠা শিরোনামগুলি আপনার নিয়ামকের মধ্যে রাখা খারাপ অভ্যাস। একটি পৃষ্ঠার শিরোনাম ভিউ সম্পর্কিত আরও কিছু সম্পর্কিত। আপনি যদি উদাহরণস্বরূপ কোনও এক্সএমএল বিকল্প দর্শনটি উপস্থাপন করেন তবে পৃষ্ঠার শিরোনামটির কী প্রাসঙ্গিকতা রয়েছে?
আউপাজো

হ্যাঁ আমি সম্মত হই যে এটি বেশ ভাল ধারণা নয় তবে এটি এমন একটি বিকল্প যা কিছু ক্ষেত্রে কার্যকর হতে পারে যেখানে বিভিন্ন পৃষ্ঠা শিরোনামগুলি জটিল পরিস্থিতি থেকে বের করে নেওয়া দরকার?
জেসনওং

1
হুম, আমি এখনও মনে করি এটি এমন কিছু যা দেখার জন্য সহায়ক হিসাবে অন্তর্ভুক্ত। আমার নিয়মটি হল এক্সএমএল সংস্করণটি দেখার এবং এটির সেই পরিবর্তনশীলের দরকার আছে কিনা তা দেখুন। যদি তা না হয় তবে এটি এমন কিছু যা পৃথক দর্শনের প্রয়োজন। আপনার নিয়ামকটিকে যতটা সম্ভব হালকা করুন।
অপুজো

0

আমি ব্যবহার করি এই প্লাগইনএই রেলস সাহায্যকারীদের আমি লিখেছি: http://web.archive.org/web/20130117090719/http://henrik.nyh.se/2007/11/my-rails-title-helpers/


@ কাইলহান্টার হেহ, আপাতদৃষ্টিতে নয়। যদি না আমি বোঝায় "আপনার প্রকল্পে এই কোডটি অনুলিপি করুন";)
হেনরিক এন

0

বিষয়বস্তু_পদ্ধতি এবং একটি আংশিক ব্যবহার করে পৃষ্ঠা শিরোনামের জন্য যোগাযোগ করুন

ঘ। আংশিক নাম: _page_title.html.erb

<%content_for :page_title do %>
 <%=title%>
<%end%>

ঘ। অ্যাপ্লিকেশন html.erb শিরোনাম ট্যাগ ভিতরে ব্যবহার

   <title><%=yield :page_title %></title>

ঘ। অ্যাপ্লিকেশন html.erb বাদে সম্পর্কিত * .html.erb ব্যবহার করুন পৃষ্ঠার কোনও html.erb এবং সরবরাহের শিরোনামে এটি কেবল আটকে দিন

    e.g : inside index.html.erb

    <%=render '_page_title', title: 'title_of_page'%>


0

আমি opsb এর পদ্ধতি পছন্দ করি তবে এই পদ্ধতিটিও কার্যকর হয়।

<% provide(:title,"ttttttttttttttttttZ") %>
<html>
  <head><title><%= yield(:title) %></title></head>
   <body></body>
</html>

এফডব্লিউআইডাব্লু পদ্ধতিটি হরতালের বইয়ের অধ্যায়টিতে ব্যবহৃত পদ্ধতিটি নয়, আমি সেই বইয়ের সুপারিশ করি না কারণ এটি অনুসরণ করার জন্য আমি কিছুটা ঝামেলা পেয়েছি তবে যাই হোক।
বারলোপ

-1

এটি করার সর্বোত্তম / পরিষ্কার উপায়:

<title><%= @page_title or 'Page Title' %></title>

-9

আমি আমার বেশ সহজ রূপটি যুক্ত করতে চাই।

অ্যাপ্লিকেশনকন্ট্রোলারে এই পদ্ধতিটি সংজ্ঞায়িত করুন:

  def get_title
    @action_title_name || case controller_name
                            when 'djs'
                              'Djs'
                            when 'photos'
                              'Photos'
                            when 'events'
                              'Various events'
                            when 'static'
                              'Info'
                            when 'club'
                              'My club'
                            when 'news'
                              'News'
                            when 'welcome'
                              'Welcome!'
                            else
                              'Other'
                          end
  end

এর পরে আপনি আপনার লেআউটের শিরোনাম ট্যাগ থেকে get_title কল করতে পারেন। আপনি নিজের ক্রিয়ায় @action_title_name পরিবর্তনশীল সংজ্ঞায়িত করে আপনার পৃষ্ঠার জন্য আরও সুনির্দিষ্ট শিরোনামটি সংজ্ঞায়িত করতে পারেন।


1
আমার ধারণা, আপনি গত ছয় বছরে উদ্বেগের বিচ্ছিন্নতার ধারণাটি শিখেছেন , তবে আমি অন্যদের জন্য কেবল এটি প্রকাশ করব যারা এই উত্তর কেন নেতিবাচক চিহ্ন পেয়েছে তা সম্পর্কে বিভ্রান্ত হতে পারে।
নুরেটিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.