2009-06-02 7 views
10

मैं एक इंटरफ़ेस बनाने पर काम कर रहा हूं जिसे मैं "टैब्ड ब्राउज़िंग" प्रकार के फ़ंक्शन के रूप में कार्य करना चाहता हूं। इनमें से प्रत्येक टैब को पहले से ही एक क्रिया के रूप में लिखा गया है और टैबबंद इंटरफेस व्यक्तिगत टैब के लिंक के रूप में ठीक काम करता है। मैंने इस नियंत्रक के लिए "इंडेक्स" पृष्ठ लिखने का प्रयास करने का निर्णय लिया - सभी टैबों की सामग्री को छिपे हुए divs में डालकर और jQuery के बीच उनके बीच स्वैपिंग करना, लेकिन एक बार जब मैंने एक्शन व्यू हेल्पर का उपयोग करना शुरू किया - मैं बहुत से लोगों से कह रहा था यह बुरा व्यवहार है। (see this article)ज़ेंड में एक्शन व्यू हेल्पर - आसपास काम करें?

इनमें से कुछ क्रियाएं फॉर्म बनाती हैं - मॉडल से कुछ डेटा खींचें, आदि प्रदर्शित करने के लिए। मैं चाहता हूं कि प्रत्येक कार्य अपने आप पर कार्य करना जारी रखे (कुछ पार्स रूप भी)।

ब्राउज़िंग/आइटम को ब्राउज़ करने के लिए आपको टैबड मेनू, साथ ही सभी div की सामग्री को एक छिपे हुए टैग में देना चाहिए - जहां/item/tab2 एक विशिष्ट क्रिया है (उदाहरण के लिए फॉर्म सबमिट करें)।

एक और जटिलता/चेतावनी - कुछ कार्रवाइयां एक्सेस अपवादों को फेंक देंगे यदि उपयोगकर्ता को उस "टैब" तक पहुंच नहीं है। मैं सिस्टम में दो बार एक्सेसिंग जांच नहीं करना चाहता (इस प्रकार खाली सामग्री वाले टैब दिखा रहा हूं)।

मैं इस बात को समझने की कोशिश कर रहा हूं कि इस तरह की चीज़ों को संभालने का सबसे अच्छा अभ्यास क्या है, और मैंने सोचा कि कार्रवाई सहायक यह हो सकता है। अगर मैं व्यू हेल्पर्स का उपयोग करने की कोशिश करता हूं - मैं सोच रहा हूं कि क्या ज़ेंड_फॉर्म को इकट्ठा करने के लिए यह सही जगह है।

क्या किसी को Zend_View_Helper_Action का उपयोग न करने के आसपास काम करने के "उचित" तरीके पर कोई सुझाव है?

उत्तर

7

सही तरह से कार्रवाई दृश्य सहायक के आसपास काम करने के लिए, जैसा कि मैंने लेख आपको उद्धृत में कहा गया है, आंशिक बनाने के लिए है जो उन्हें आवश्यक डेटा लाने के लिए सीधे मॉडल तक पहुंचें। यह एक दृश्य सहायक के माध्यम से हो सकता है (आप इसे स्वयं बनाते हैं;)) यदि इसमें आपके विचार में बहुत तर्क शामिल होगा।

एक्शन व्यू हेल्पर केवल प्रदर्शन समस्याओं से अधिक परेशान है, लेकिन भयानक डीबगिंग दुःस्वप्न भी बनाता है, और यदि आपको इसकी आवश्यकता है, तो आपका आवेदन शायद एमवीसी का पालन नहीं कर रहा है, और इसलिए, आप पुन: उपयोग के लिए नियंत्रक का उपयोग कर रहे हैं, मॉडल के बजाय, पैटर्न पैटर्न इरादा है।

आप व्यू ऑब्जेक्ट के प्रस्तुत या आंशिक तरीकों के साथ अपने लेआउट या वर्तमान क्रिया दृश्य के भीतर से आंशिक प्रस्तुत कर सकते हैं।

यदि आपके टैब से कई संभावित पोस्टों से निपटने के लिए आपके पास कई क्रियाएं हैं, तो आपको इन सभी कार्यों को एक ही दृश्य स्क्रिप्ट प्रस्तुत करने के लिए सेट करना चाहिए, जो मॉडल से सीधे डेटा के साथ सभी टैब प्रस्तुत करेगा।

1

यदि आप मौजूदा मार्कअप से टैब/टैब पैन नहीं बना रहे हैं, और आप मांग पर सामग्री लोड कर रहे हैं, तो आपको बस यह जांचना होगा कि उपयोगकर्ता को टैब को प्रदर्शित करने से पहले टैब तक पहुंचने की अनुमति है या नहीं, और फिर टैब की सामग्री लोड करने का प्रयास करते समय।

यह जांचना कि उपयोगकर्ता के पास इन एक्सेस अनुमतियां हैं, ऑपरेशन का स्वीकार्य तरीका होना चाहिए और प्रदर्शन करने के लिए महंगा नहीं होना चाहिए।

यदि ये क्रियाएं टैब के अतिरिक्त कुछ स्टैंडअलोन पृष्ठ में काम करने वाली सामग्री उत्पन्न करती हैं, तो एक्शन व्यू हेल्पर आगे बढ़ने का मूल तरीका है। बस टैब उत्पन्न करते समय कार्रवाई में किए गए एक ही एसीएल (या अन्य) चेक को निष्पादित करें।

1

मैं पूरी तरह यकीन है कि अपने सटीक समस्या यह है कि क्या नहीं कर रहा हूँ, फिर भी आप लेआउट निष्क्रिय कर सकते हैं:

$this->_helper->layout->disableLayout(); 

फिर अनुरोध किया कार्रवाई सिर्फ प्रदर्शित करेगा यह दृश्य स्क्रिप्ट है, जो आप टैब में लोड कर सकते हैं।

आपके पास कोई भी प्राधिकरण कोड सामान्य के रूप में कार्य करेगा और आप कार्रवाई के लिए अनुरोधित दृश्य स्क्रिप्ट प्रदर्शित कर सकते हैं, या नहीं कि उनके पास पहुंच है या नहीं।

0

आप एक आज़माएं/कैच ब्लॉक का उपयोग करके किसी भी एक्सेस अपवाद पकड़ कर सकते हैं:

try { // action throwing exceptions } catch (Exception $e) { // catch silently } 
+0

दरअसल - एक्शन व्यू हेल्पर के साथ ऐसा करते समय कई अन्य चीजें गड़बड़ हो जाती हैं। मैंने जेरा में इसके लिए एक बग फिक्स जमा किया – gnarf

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