यह जांचने के लिए कि क्या दिया गया यूआरएल वर्तमान में केकफ़्पी 2.x में सक्रिय है या नहीं, आपको यह जांचना चाहिए कि यह सामान्य है (Router::normalize() के अर्थ में) फॉर्म वर्तमान में अनुरोध किए गए यूआरएल के सामान्यीकृत रूप के समान है (इसके अर्थ में $this->request->here
)।
$currentUrl = Router::normalize($this->request->here);
$checkedUrl = Router::normalize($myUrl);
$isActive = $currentUrl === $checkedUrl;
कभी-कभी यदि कोई बच्चा वर्तमान में दिखाया जाता है, तो मेनू में सक्रिय पृष्ठ को दिखाने के लिए एक ढीला मिलान करना चाह सकता है। लगता है कि /fruits/banana/
पर केले विवरण साइट सर्फ करते समय आप सक्रिय रूप से /fruits/
पर फल ओवरव्यू साइट पर अपना मेनू लिंक प्रदर्शित करना चाहते हैं। आप केवल आंशिक मिलान की तलाश करके इसे आसानी से प्राप्त कर सकते हैं।
$isActive = (0 === strpos($currentUrl, $checkedUrl));
सुनिश्चित करें कि आपके मिलान और अधिक जटिल हो सकती है, उदाहरण के लिए यदि आप भारी नामित पैरामीटर के उपयोग और की तरह कर रहे हैं और अपने मेनू में प्रतिबिंबित करने के लिए चाहते हैं, लेकिन आप यहां से अपना रास्ता खोजना चाहिए के लिए।
अपने विशेष समस्या के लिए एक समाधान इस प्रकार दिखाई देंगे:
$currentUrl = Router::normalize($this->request->here);
$links = array(
array(
'label' => __('View All'),
'url' => array('controller' => 'galleries', 'action' => 'index'),
),
array(
'label' => __('Add New'),
'url' => array('controller' => 'galleries', 'action' => 'add'),
),
/* ... */
);
foreach ($links as $link) {
$linkLabel = $link['label'];
$linkUrl = Router::url($link['url']);
$linkHtml = $this->Html->link($linkLabel, $linkUrl);
$linkActive = $currentUrl === $linkUrl;
echo $this->Html->tag('li', $linkHtml, array(
'class' => $linkActive ? 'active' : '',
'escape' => false, // to not escape anchor markup
));
}
अपनी लाइव सिर्फ इतना है कि छोटा सा भी इस सवाल के बारे में सोच नहीं द्वारा आसान बनाने के लिए, आप भी मेनू निर्माण के लिए एक सहायक इस्तेमाल कर सकते हैं कि किसी को अन्यथा torifat/cake-menu_builder की तरह बनाया गया।
डाउनवोट, क्योंकि 'यहां()' में सभी नामित पैरामीटर और क्वेरी स्ट्रिंग शामिल हैं। – mrdaliri
इस '$ this-> अनुरोध-> यहां' यूआरएल राउटर द्वारा उत्पन्न किए गए एक जैसा नहीं है, भले ही यह होना चाहिए। आपको उनकी तुलना करने से पहले अपने URL को ['राउटर :: सामान्यीकृत()] (http://api.cakephp.org/2.6/class-Router.html#_normalize) के साथ सामान्य बनाना चाहिए। – bfncs