كيفية البحث عن مستخدم بالاسم مع ترقيم الصفحات

لدينا تطبيق واجهة أمامية يستخدم Discourse كجوهر، ونرغب في تنفيذ بحث للمستخدمين مع التصفح.

حاليًا، لا أرى أن هذه الواجهة البرمجية (/search?q=name) تدعم type_filter: user. هل لديك فكرة حول كيفية تنفيذ هذا؟

هذا حل مؤقت قمنا به.

  1. افتح search_controller.rb وأضف هذا السطر.
def show
    @search_term = params.permit(:q)[:q]

    // السماح بـ type_filter من معاملات الاستعلام
    @type_filter = params.permit(:type_filter)[:type_filter] || 'topic'

   ...
  1. أضف offset إلى search.rb
  // يوجد تقريبًا في السطر 780
  def user_search
    return if SiteSetting.hide_user_profiles_from_public && !@guardian.user

    users = User.includes(:user_search_data)
      .references(:user_search_data)
      .where(active: true)
      .where(staged: false)
      .where("user_search_data.search_data @@ #{ts_query("simple")}")
      .order("CASE WHEN username_lower = '#{@original_term.downcase}' THEN 0 ELSE 1 END")
      .order("last_posted_at DESC")
      .offset(offset) // هذا السطر
      .limit(limit)

    users.each do |user|
      @results.add(user)
    end
  end

بعد ذلك، ستتمكن من البحث عن المستخدمين عبر /search?q=name&type_filter=user&page=1. بشكل افتراضي، سيتم جلب 50 مستخدمًا، ويمكنك استخدام page للحصول على المزيد.

آمل أن يكون هذا مفيدًا! :grin:

3 إعجابات

فكرة رائعة! نحن أيضًا نعمل مع واجهة برمجة تطبيقات Discourse، وعندما حاولنا استخدام واجهة برمجة تطبيقات البحث، واجهنا هذه المشكلة أيضًا. يمكنني المساعدة في حلها.

3 إعجابات