¿Hay alguna forma de comprobar si existe un elemento para una vista? quiero cargar un elemento diferente de acuerdo a una categoría que pertenece a todas las categorías, pero no tienen un elemento para que ...Cakephp: compruebe si existe elemento de vista
Respuesta
A partir de la versión 2.3 de CakePHP puede utilizar el método de la elementExists
Vista:
if($this->elementExists($name)) { ... }
En las versiones anteriores de 2.x que puede hacer:
if($this->_getElementFilename($name)) { ... }
Pero, lamentablemente, en la versión 1.3 parece que la única forma es conocer la ruta completa y hacer algo como:
if(file_exists($path . 'elements' . DS . $name . $ext)) { ... }
T Esto es lo que hacen en el código fuente 1.3, pero hay cierta complejidad en obtener $path
de varios complementos y verificar cada una de esas rutas. (Ver enlace más abajo.)
Fuentes:
http://api.cakephp.org/2.3/class-View.html#_elementExists
conjunto nombre del elemento en el controlador:
$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;
}
Siempre se puede cargar un elemento específico para una categoría "a pedido" diciéndolo desde el controlador. Por ejemplo:
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);
}
?>
De hecho, incluso hay otras maneras de lograr esto. Si el elemento se va a cargar dentro de un diseño , el método set() que se muestra arriba se puede especificar desde la vista misma. O, incluso puede capturar de los parámetros URL, como:
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);
?>
Por supuesto, siempre se tiene que especificar, pero el mismo iría para comprobar si existe el archivo.
- 1. Compruebe si existe evento en el elemento
- 2. UIAutomation: compruebe si el elemento existe antes de tocar
- 3. Compruebe si existe tabla
- 4. C++ compruebe si el elemento existe en el conjunto
- 5. Cakephp comprobar si existe registro
- 6. jQuery: compruebe si existe imagen
- 7. BASH - Compruebe si existe PID
- 8. NSMutableArray compruebe si el objeto ya existe
- 9. Compruebe si existe una entrada de formulario
- 10. Compruebe si existe la clave de registro
- 11. Compruebe si existe una tabla SQL
- 12. Compruebe si existe un servicio web
- 13. Compruebe si existe el método jQuery
- 14. Compruebe si existe una inclusión (o requiere)
- 15. Postgresql: compruebe si existe el esquema
- 16. Compruebe si existe un nodo en h5py
- 17. Compruebe si existe un objeto en VBScript
- 18. Hibernar: compruebe si existe el objeto
- 19. Boost PropertyTree: compruebe si existe el niño
- 20. PDO/PHP - Compruebe si existe fila
- 21. Rieles I18n, compruebe si existe traducción?
- 22. Compruebe si el valor existe en dataTable?
- 23. MySql php: compruebe si Row existe
- 24. Compruebe si el archivo existe en ksh
- 25. C compruebe si el archivo existe
- 26. Compruebe si existe un directorio en PHP
- 27. Compruebe si existe un valor en ArrayList
- 28. python: compruebe si existe url a jpg
- 29. compruebe si el archivo existe en php
- 30. Compruebe si existe un artículo sin un error si no existe
Traté de llamar a esto desde el controlador pero no funciona para la versión 2.4 –
'elementExists @MohamadAli() 'es un método de Vista, por lo que no debería llamarse desde el controlador. – drmonkeyninja
@drmonkeyninja necesito verificar antes de visualizar el contenido ¿Cómo puedo verificarlo desde el controlador? actualmente utilizo try/catch –