2009-06-30 13 views
7

मेरे पास कुछ फ़ोटो हैं जो will_paginate प्लगइन के माध्यम से लगातार पृष्ठों पर विभाजित हैं। जब आप एक फोटो खोलते हैं और फिर लिंक का उपयोग करके सभी तस्वीरों पर वापस आते हैं, तो आप हमेशा पहले पृष्ठ पर लौटते हैं (उदाहरण के लिए फोटो पेज 5 पर प्रदर्शित होता है, आप फोटो खोलते हैं, सभी तस्वीरें दिखाने के लिए एक लिंक पर क्लिक करें और उम्मीद करते हैं कि आप चालू हैं पेज 5 फिर से, लेकिन आप पेज 1 पर हैं)।आइटम का पृष्ठ और will_paginate

अब, पृष्ठ संख्या प्राप्त करने के लिए कोई तरीका है जिस पर कोई फ़ोटो संबंधित है?

मैंने एक जीईटी पैरामीटर पास करने का प्रयास किया, लेकिन यह केवल तभी काम करता है जब उपयोगकर्ता कोई और क्रिया नहीं करता है (उदा। कोई टिप्पणी पोस्ट करें, फोटो संपादित करें, ecc।)।

उत्तर

8
page = (number_of_records_before_RECORD/number_of_records_per_page) + 1 

दूसरे शब्दों में। आप चयनित रिकॉर्ड Model.count(:conditions => ['id < ?', record.id], :order => 'id') उपयोग करने से पहले रिकॉर्ड की संख्या गिन सकते हैं

page = (25/20) + 1 = 2 

: अपने फोटो पहचान पत्र 40 है और वहाँ से पहले (यह मानते हुए कुछ रिकॉर्ड हटा दिया गया है), प्रति पृष्ठ 20 रिकॉर्ड के साथ 25 रिकॉर्ड कर रहे हैं। सही क्वेरी इस ऑब्जेक्ट को सूचीबद्ध करते समय उस तालिका पर लागू सॉर्टिंग फ़िल्टर पर निर्भर करती है।

+0

यह एक समाधान हो सकता है, लेकिन मुझे आश्चर्य है कि यह कोड प्लगइन में डिफ़ॉल्ट रूप से क्यों लागू नहीं किया गया है। शायद क्योंकि यह प्रदर्शन के संदर्भ में मैंने जो कहा वह करने के लिए समझ में नहीं आता .. – collimarco

+0

Becau यह वास्तव में एक व्यापक दर्शकों के लिए समझ में नहीं आता है। यह एक आदर्श समाधान नहीं है बल्कि आपकी विशिष्ट आवश्यकता के लिए एक कामकाज है। इसके अलावा, विलुप्त होने की सुविधा प्रदान करेगा, अतिरिक्त ActiveRecord कार्यक्षमताओं नहीं। –

+1

मैंने सोचा नहीं होगा कि यह एक बड़ा प्रदर्शन हिट होगा। जब आप एक पेजिनेशन लाइब्रेरी का उपयोग कर रहे हैं तो यह कुल पेज गिनती प्राप्त करने के लिए आप जिस चीज को पेजिंग कर रहे हैं, उसे गिनेंगे।बशर्ते जिस कॉलम पर आप ऑर्डर कर रहे हैं उसे सही तरीके से अनुक्रमित किया गया है, तो वर्तमान पृष्ठ को खोजने के लिए समान गणना प्राप्त करने के लिए यह बहुत दर्दनाक नहीं होना चाहिए। – Shadwell

0

पृष्ठ संख्या आपकी खोज के परिणामों पर अत्यधिक निर्भर है। परिणाम सेट के आधार पर आपकी खोज में 1, 10, या 100 पृष्ठ हो सकते हैं और प्रति पृष्ठ वस्तुओं की संख्या।

आपके द्वारा वर्णित जीईटी पैरामीटर का उपयोग करके "सभी फोटो दिखाने" के लिए कोई भी लिंक खोज और अंकन जानकारी हो सकता है। या एक कुकी के माध्यम से स्टोर और पुनर्प्राप्त करें ताकि खोज परिणाम तब तक जारी रहे जब तक कि उपयोगकर्ता एक नई खोज को साफ़ या चयन नहीं कर लेते।

+0

समस्या यह है कि जब उपयोगकर्ता अस्थायी रूप से फोटो पेज छोड़ देता है (उदाहरण के लिए इसे संशोधित करने के लिए) और फिर सभी फ़ोटो दिखाने के लिए वापस लौटने का प्रयास करता है तो वह हमेशा पहले पृष्ठ पर लौटता है :( जबकि मुझे उपयोग नहीं लगता कुकीज एसईओ के लिए एक अच्छी बात है। – collimarco

+1

@ कोलिमरको यदि आप अनुरोधों के बीच खोज और पेजिनेशन पैरामीटर का पुन: उपयोग करना चाहते हैं, तो आपको उन्हें कहीं भी जारी रखना होगा। आमतौर पर कुकीज़ क्या होती है। सुनिश्चित नहीं है कि इसका एसईओ पर क्या असर होगा –

+0

मैंने देखा कि कई फोटोग्राफी साइटें (जैसे deviantart.com) उपयोगकर्ताओं को वापस जाने की अनुमति देने के लिए कुकीज़ का उपयोग करती हैं। – collimarco

0

यहां एक और समाधान है: will_paginate केवल क्वेरी स्ट्रिंग पैरामीटर 'search_field' और 'पृष्ठ' का उपयोग करता है; आप इन्हें रेल परम हैश से निकाल सकते हैं। यदि आप सत्र स्थिति का उपयोग करने वालों का ट्रैक रखते हैं, तो आवश्यकता होने पर आप उन्हें अपने नियंत्रक कोड में पुनः लागू कर सकते हैं।

बिल्कुल आप कैसे प्रबंधित करते हैं यह आपके आवेदन पर निर्भर करेगा। ऐप में मैं काम कर रहा हूं, प्रवाह ऐसा है कि मैं एक सामान्य संदर्भ और सदस्य संदर्भ के बीच अंतर कर सकता हूं। उपयोगकर्ता सदस्य # इंडेक्स पेज से सदस्य संदर्भ में प्रवेश करता है। इसलिए मैंने सदस्य संदर्भ में प्रवेश पर सत्र [: member_context] सेट किया है; जैसे सदस्यों में # संपादित करें। फिर, सदस्यों # सूचकांक में, मेरे पास निम्न कोड है:

if session[:member_context] 
    @search_field = session[:search_field] 
    @page = session[:page] 
    # toggle out of member context 
    session[:member_context] = nil 
else 
    @search_field = params[:search_field] 
    @page = params[:page] 
    # record lastest search in case the user subsequently enters the member context 
    session[:search_field] = @search_field 
    session[:page] = @page 
end 
@members = Member.where(<use @search_field>).page(@page) 
# and render ... 

यह मेरे आवेदन में बहुत अच्छा काम करता है।

संबंधित मुद्दे