有没有一种方法可以检查视图中是否存在元素?我想根据元素所属的类别加载不同的元素,但并不是所有类别都有相应的元素...
有没有一种方法可以检查视图中是否存在元素?我想根据元素所属的类别加载不同的元素,但并不是所有类别都有相应的元素...
elementExists
方法:if($this->elementExists($name)) { ... }
if($this->_getElementFilename($name)) { ... }
if(file_exists($path . 'elements' . DS . $name . $ext)) { ... }
http://api.cakephp.org/2.3/class-View.html#_elementExists
在控制器中设置元素名称:
$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;
}
您可以通过从控制器中告诉它来“按需”加载特定于类别的元素。例如:
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);
}
?>
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);
?>
当然,你总是需要指定,但检查文件是否存在也是如此。
elementExists()
是一个视图方法,因此不应该从控制器中调用。 - drmonkeyninja