Hola, tengo un problema con el buscador en una plantilla de joomla. Al darle al intro me sale el siguiente código de error:
Notice: Trying to get property of non-object in F:\xampp\htdocs\joomla\templates\favourite\index.php on line 18
Y esto es lo que tiene el archivo index.php de la plantilla:
<?php defined('_JEXEC') or die; $app = JFactory::getApplication(); $doc = JFactory::getDocument(); $this->language = $doc->language; // Add current user information $user = JFactory::getUser(); // Add Bootstrap Framework JHtml::_('bootstrap.framework'); $doc->addStyleSheet($this->baseurl . '/media/jui/css/bootstrap.min.css'); $doc->addStyleSheet($this->baseurl . '/media/jui/css/bootstrap-responsive.css'); // Add page class suffix $itemid = JRequest::getVar('Itemid'); $menu = JFactory::getApplication()->getMenu(); $active = $menu->getItem($itemid); $params = $menu->getParams( $active->id ); // <-- Esta es la línea 18 $pageclass = $params->get( 'pageclass_sfx' ); ?>
El buscador funciona de maravilla, pero al pinchar el <Enter>
, sale este mensajito arriba, aunque las búsquedas se realizan igual.
Espero que puedan ayudarme a solucionar este problema. Muchas gracias.
Respuestas
El error se produce en esta línea:
$params = $menu->getParams($active->id);
Y el mensaje de error es el siguiente:
Notice: Trying to get property of non-object in [...]
El problema es que el error puede deberse a dos causas, así que necesitamos más información sobre lo que está pasando para poder ayudarte a solucionar el error. Con la información que tenemos, estas son las dos posibles causas del error:
$active
esnull
y lo que está fallando es$active->id
$menu
esnull
y lo que está fallando es$menu->getParams()
Para obtener más información, añade justo antes de la línea 18 lo siguiente:
var_dump($menu, $active);
Y después dínos cuál de las dos variables es null
o tiene algún valor raro. Así podremos ayudarte mejor a descubrir la causa del error.
@javiereguiluz
El resultado de añadir esa línea es éste, bueno, el principio, porque la pantalla se cuaja de todos estos códigos. Ya me dirás qué te parece y si hay alguna solución. Muchas gracias por tu respuesta.
object(JMenuSite)#145 (3) { ["_items":protected]=> array(46) { [101]=> object(stdClass)#115 (21) { ["id"]=> string(3) "101" ["menutype"]=> string(14) "menu-contenido" ["title"]=> string(6) "Inicio" ["alias"]=> string(6) "inicio" ["note"]=> string(0) "" ["route"]=> string(6) "inicio" ["link"]=> string(42) "index.php?option=com_content&view=featured" ["type"]=> string(9) "component" ["level"]=> string(1) "1" ["language"]=> string(1) "*" ["browserNav"]=> string(1) "0" ["access"]=> string(1) "1" ["params"]=> object(Joomla\Registry\Registry)#12 (1) { ["data":protected]=> object(stdClass)#195 (49) { ["featured_categories"]=> array(1) { [0]=> string(0) "" } ["layout_type"]=> string(4) "blog" ["num_leading_articles"]=> string(1) "1" ["num_intro_articles"]=> string(1) ...
@hogaradas
Parece que la variable $menu
es correcta y viendo sus contenidos, puede que el error no esté ahí. Así que, ¿podrías probar a sacar el valor de $active->id
y ver si es justo ahí donde falla la aplicación?
Simplemente cambia var_dump($menu, $active);
por var_dump($active->id);
o por var_dump($active);
.
@javiereguiluz
El resultado de añadir el primer código es éste string(3) "101" y con otro intro string(3) "154". Con el otro sale el mismo error de siempre, el famoso de la línea 18. Me veo quitando el buscador, porque parece que la cosa está complicada, aunque confío en tu ayuda. Muchas gracias y perdona por tantas molestias.
@hogaradas
Estoy empezando a creer que el mensaje de error no es preciso del todo y que el error se está produciendo en la siguiente línea a la que indica (es decir, en la línea 19 en vez de la 18). Si haces un var_dump($params);
después de la línea 18, es posible que veas NULL
por pantalla y por eso se está produciendo el error.
He estado buscando por ahí y el código para obtener un parámetro de un menú podría ser más sencillo del que estás utilizando:
// código para obtener los parámetros del menú activo $menus = &JSite::getMenu(); $menu= $menus->getActive(); $params = new JParameter($menu->params); // código para obtener el valor de cualquier parámetro del layout $title = $params->get('pageclass_sfx'); // código para obtener el valor de cualquier parámetro del elemento del menú $suffix = $menu->pageclass_sfx; $id = $menu->id; $queryString = $menu->link;
@javiereguiluz
El mensaje de aplicar el segundo código es:
Strict Standards: Non-static method JApplicationSite::getMenu() should not be called statically, assuming $this from incompatible context in C:\xampp\htdocs\hogaradas\templates\favourite\index.php on line 15 Strict Standards: Non-static method JApplicationCms::getMenu() should not be called statically, assuming $this from incompatible context in C:\xampp\htdocs\hogaradas\libraries\cms\application\site.php on line 266 Strict Standards: Only variables should be assigned by reference in C:\xampp\htdocs\hogaradas\templates\favourite\index.php on line 15 Fatal error: Class 'JParameter' not found in C:\xampp\htdocs\hogaradas\templates\favourite\index.php on line 17
Pero te explico lo que sucede con el buscador. Es el RSSearch
de Joomla, que al comenzar a escribir una palabra te salen los resultados a la izquierda, y si pinchas en cada uno de los enlaces funciona de maravilla, el problema es si le das a intro.
El resultado de aplicar el código en la línea 19 es:
Notice: Trying to get property of non-object in C:\xampp\htdocs\hogaradas\templates\favourite\index.php on line 18 object(Joomla\Registry\Registry)#667 (1) { ["data":protected]=> object(stdClass)#655 (0) { } }
Mil gracias.
@hogaradas
Buenos días, ¿alguna idea para ver si por fin soluciono el problema del dichoso buscador? Gracias
Actualización: este problema por fin pude solucionarlo (ver solución), pero ahora tengo otro problema.
@hogaradas