2011-03-10 20 views
7

क्या यह देखने का कोई तरीका है कि कोई तत्व देखने के लिए मौजूद है या नहीं? मैं एक वर्ग वह जुड़ी है लेकिन सभी श्रेणियों के लिए यह एक तत्व है के अनुसार एक अलग तत्व लोड करना चाहते हैं ... नियंत्रक मेंकेकफ़्पी: जांचें कि दृश्य तत्व मौजूद है

उत्तर

9

CakePHP संस्करण 2.3 आप देखें के elementExists विधि का उपयोग कर सकते हैं के रूप में:

if($this->elementExists($name)) { ... } 

2.x के पुराने संस्करणों में आप कर सकते हैं:

if($this->_getElementFilename($name)) { ... } 

लेकिन दुर्भाग्य से संस्करण 1.3 में यह कैसा दिखता एकमात्र तरीका पूर्ण पथ को जानना और कुछ ऐसा करना है:

if(file_exists($path . 'elements' . DS . $name . $ext)) { ... } 

टी टोपी वह है जो वे 1.3 स्रोत कोड में करते हैं, लेकिन विभिन्न प्लगइन से $path प्राप्त करने और उन सभी पथों की जांच करने के आसपास कुछ जटिलता है। (नीचे दिए गए लिंक देखें।)

सूत्रों का कहना है:

http://api.cakephp.org/2.3/class-View.html#_elementExists

http://api.cakephp.org/2.0/source-class-View.html#722

http://api.cakephp.org/1.3/source-class-View.html#380

+0

मैं नियंत्रक से इस फोन की कोशिश की लेकिन संस्करण 2.4 –

+1

@MohamadAli 'elementExists लिए काम नहीं कर() 'एक व्यू विधि है इसलिए नियंत्रक से नहीं बुलाया जाना चाहिए। – drmonkeyninja

+0

@drmonkeyninja मुझे प्रतिपादन दृश्य से पहले जांच करने की आवश्यकता है मैं इसे नियंत्रक से कैसे देख सकता हूं? वर्तमान में मैं कोशिश/पकड़ –

2

सेट तत्व नाम:

$default_element = 'my_element'; 
$element = 'my_cat_element'; 

if ($this->theme) { 
    $element_path = APP . 'views' . DS . 'themed' . DS . $this->theme . 'elements' . DS . $element . DS . $this-ext; 
} else { 
    $element_path = APP . 'views' . DS . 'elements' . DS . $element . $this-ext; 
} 
if (!file_exists($element_path)) {  
    $element = $default_element; 
} 
0

तुम हमेशा एक तत्व लोड कर सकते हैं नियंत्रक से ऐसा कहकर एक मांग 'ऑन डिमांड' के लिए विशिष्ट। उदाहरण के लिए:

Within Controller Action: 
$this->set('elementPath', "directory_name/$categoryName"); 

Within the View (this can also be tried exactly within a Layout): 
<?php 
if (!empty($elementPath)) { // you can also set a default $elementPath somewhere else, just in case 
echo $this->element($elementPath); 
} 
?> 

वास्तव में, इस लक्ष्य को हासिल करने के लिए भी अन्य तरीकों से होती है। यदि तत्व को लेआउट के भीतर लोड किया जा रहा है, तो ऊपर दिखाए गए सेट() विधि को दृश्य से ही निर्दिष्ट किया जा सकता है। या, यह भी, url पैरामीटर से प्राप्त किया जा सकता है जैसे:

Within the View or Layout: 
<?php 
$elementPath = $this->params['url']['category']; // note that the param array can vary according how you set the url; see http://book.cakephp.org/#!/view/963/The-Parameters-Attribute-params 
echo $this->element($elementPath); 
?> 

बेशक, आप हमेशा निर्दिष्ट करने के लिए होगा, लेकिन एक ही पता चल सके कि फ़ाइल मौजूद है के लिए जाना होगा।

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