[php] मैं ज़ेंड फ्रेमवर्क यूआरएल कैसे लिख सकता हूं, जिसमें शरीर में एंकर टैग हैं I


Answers

आपके URL में एक टुकड़ा आईडी को लागू करने के बारे में कई तरीके हैं। नीचे कुछ विकल्प हैं, प्रत्येक के लिए कुछ पेशेवर और विपक्ष के साथ।

प्रत्यक्ष जोड़ें

आप अपने url() कॉल के बाद बस "#$fragment_id" जोड़ सकते हैं सरल, लेकिन सरल यदि आप पेज एंकर का ज्यादा उपयोग नहीं करते हैं (यानी केवल एक या दो पेज), यह जाने का तरीका है

एक कस्टम url() सहायक लिखें

आप url() एक कस्टम संस्करण को लिख सकते हैं जो टुकड़ा आईडी के लिए एक वैकल्पिक 5 वीं तर्क जोड़ते हैं:

class My_View_Helper_Url extends Zend_View_Helper_Url
{    
    public function url(array $urlOptions  = array(), $name   = null, 
                              $reset       = false,   $encode = true, 
                              $fragment_id = null)
    {
        $uri = parent::url($urlOptions, $name, $reset, $encode);

        if(!is_null($fragment_id)) {
            $uri .= "#$fragment_id";
        }

        return $uri;
    }
}

इस तरह, लंगर (और एंकर / टुकड़ा आईडी) जानकारी कड़ाई से दृश्य के दायरे के साथ रखा जाता है। यह सामान्य उपयोग के लिए अच्छा है, लेकिन डिफ़ॉल्ट मार्ग के लिए थोड़ा बोझल हो सकता है। इसके अलावा, यह अभी भी कुछ उपयोगों के लिए बहुत मुश्किल है।

एक कस्टम Route क्लास लिखें (चरम)

एक तीसरा विकल्प के रूप में, आप Zend_Controller_Router_Route वर्ग (एसई) का एक कस्टम संस्करण लिख सकते हैं, विशेष रूप से assemble($data, $reset, $encode) विधि ( match($path) विधि डिफ़ॉल्ट रूप से टुकड़ा आईडी को अनदेखा करती है)

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

चेतावनी

टुकड़ा आईडी का उपयोग करते समय कुछ विचारों को ध्यान में रखा जाना चाहिए। उदाहरण के लिए, क्वेरी स्ट्रिंग को यूरी में खंड आईडी से पहले होना चाहिए, अन्यथा, क्वेरी स्ट्रिंग PHP द्वारा उपेक्षा की गई है। हालांकि, अधिकांश जेडएफ अनुप्रयोग क्वेरी स्ट्रिंग्स का उपयोग करने से बचते हैं, इसलिए यह एक समस्या नहीं हो सकती है।

Question

ज़ेंड फ़्रेमवर्क में सेट किए गए मानक MVC का उपयोग करते हुए, मैं उन पृष्ठों को प्रदर्शित करने में सक्षम होना चाहता हूँ जिनमें एंकर भर रहे हैं अभी मैं सिर्फ '# टैंसर' के साथ एक अर्थहीन पैरामीटर जोड़ रहा हूं जो कि .phtml फ़ाइल में है।

<?= $this->url(array(
    'controller'=>'my.controller',
    'action'=>'my.action',
    'anchor'=>'#myanchor'
));

यह यूआरएल को /my.controller/my.action/anchor/#myanchor जैसा दिखता है

क्या यह पूरा करने का एक बेहतर तरीका है? एंकर लिंक के लिए नेविगेशन के बाद, अतिरिक्त आइटम पैरामीटर उपयोगकर्ता के यूआरएल में सेट हो जाता है जो कि मैं ऐसा नहीं करना चाहूंगा।




मुझे लगता है कि कस्टम मार्ग क्लास लिखने की चरम विधि बेहतर है क्योंकि अन्य सहायक का एक ही व्यवहार होगा (जैसे पुनर्निर्देशक कार्रवाई सहायक)




Related