سؤال

هل هناك أي طريقة مساعد (بخلاف القضبان الافتراضية) ينشئ تنقل الفتات الخبز بشكل ديناميكي للحصول على صفحة معينة دون الحاجة إلى تمرير معلمات تافهة في تطبيق مريح؟ وهذا هو، وهو شيء يقوم بالأرقام تلقائيا حيث يعتمد المستخدم على عنوان 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]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top