سهلة breadcrumbs لتطبيق القضبان المريحة
-
23-08-2019 - |
سؤال
هل هناك أي طريقة مساعد (بخلاف القضبان الافتراضية) ينشئ تنقل الفتات الخبز بشكل ديناميكي للحصول على صفحة معينة دون الحاجة إلى تمرير معلمات تافهة في تطبيق مريح؟ وهذا هو، وهو شيء يقوم بالأرقام تلقائيا حيث يعتمد المستخدم على عنوان URL الباقي الذي تزوره؟
للتنفيذ المذكور أعلاه، نحتاج إلى اجتياز المعلمات
راحة
<% add_crumb(‘Profile’, user_profile_path) %>
الصفحه الحاليه
<% add_crumb(“My Incoming Messages”, request.path) %>
يجب أن تكون هناك طريقة لتعميم الشفرة بحيث لا يلزم عدم وجود معلمة يمر وينبغي أن يعمل لجميع التطبيقات المريحة مع الحد الأدنى من التكوين.
المحلول
وضعت اختراق بسيط. ومع ذلك، يفترض الطريقة أنه يوجد هناك طريقة "اسم" لكل كائن نموذجي مقابلة لكل مورد في عنوان URL مريح. مهما كان إرجاع عائدات الأسماء "اسم" كاسم فتاتك. إذا لم يتم العثور عليه، فسيتم عرضه لأنه بدون ربط أي شيء. فاصل المستخدم هو "->" يمكنك تغييره ليناسب الاحتياجات الخاصة بك.
def get_bread_crumb(url)
begin
breadcrumb = ''
sofar = '/'
elements = url.split('/')
for i in 1...elements.size
sofar += elements[i] + '/'
if i%2 == 0
begin
breadcrumb += "<a href='#{sofar}'>" + eval("#{elements[i - 1].singularize.camelize}.find(#{elements[i]}).name").to_s + '</a>'
rescue
breadcrumb += elements[i]
end
else
breadcrumb += "<a href='#{sofar}'>#{elements[i].pluralize}</a>"
end
breadcrumb += ' -> ' if i != elements.size - 1
end
breadcrumb
rescue
'Not available'
end
end
تقبل الطريقة عموما طلب الطلب. (الذي يعطى عنوان URL للصفحة الحالية) كمعلمة. تقبل الطريقة عن قصد عنوان URL لأغراض التخصيص. لتوليد فتات الخبز، ما عليك سوى إضافة التعليمات البرمجية التالية في رأيك -
<%= get_bread_crumb(request.url) %>
لعنوان URL. /ideabox/2/idea/1
, ، يبدو أن الفتات الخبز
النص البديل http://www.imagechicken.com/uploads/1234855404069992300.png.
إسمح لي إذا كانت جودة التعليمات البرمجية ليست كبيرة. أنا متأكد من أن هذا الرمز يمكن إعادة فهمه، لكنني متأكد أيضا من أنك ستكون قادرا على القيام بذلك قبل استخدامه.
شكرا.
نصائح أخرى
الحل الذي يوفره Chirantan رائع. إذا كنت بحاجة إلى Breabcrumbs لوحدة تحكم Namespaced وتحتاج إلى تغيير فتات الخبز اعتمادا على مساحة الاسم وكذلك جرب هذا. هذا ليس مثاليا ولكن إعادة تكوينه كما تحتاج. يعمل في مشروعي.
تحديد مساعد جديد: navigation_helper.rb
module NavigationHelper
def navigation_add(title, url, namespace)
if defined? @@namespace and !@@namespace.nil? and @@namespace == namespace
@@navigation ||= []
else
@@navigation = []
end
@@navigation << {title: title, url: url} unless title == "Home"
new_nav = []
@@navigation.each do |hash|
new_nav.push hash
if hash[:title].to_s == title.to_s
break
end
end
@@navigation = new_nav
@@navigation.uniq!
@@namespace = namespace
end
def render_navigation
if (request.path_parameters[:controller].sub('/', '::_').camelize + 'Controller').classify.constantize.action_methods.to_a.include? 'index'
navigation_add controller_name.camelize.to_s, request.path_parameters.merge({action: 'index'}).except(:id), params[:controller].include?('/') ? params[:controller].split("/").first : nil
end
if defined? @@navigation
render partial: 'navigation/navigation', locals: { navs: @@navigation, namespace: @@namespace }
else
render text: ''
end
end
end
ثم حدد طريقة عرض لهذا المساعد _navigation.haml
- unless navs.blank?
%ol.breadcrumb
- navs.each_with_index do |nav, index|
- if index == 0
%li=link_to fa_icon('arrow-left', text: 'Go Back'), :back
- unless namespace.nil?
%li
%h4.inline= request.fullpath.split('/')[1].gsub('-', '_').camelize
= fa_icon('angle-double-right')
%li= link_to_unless (nav[:title] == controller_name.camelize and action_name == 'index'), fa_icon(nav[:title].downcase.singularize, text: nav[:title]), nav[:url]