Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Problemas con el index.php de una plantilla de joomla

24 de enero de 2015

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

#1

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 es null y lo que está fallando es $active->id
  • $menu es null 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

25 enero 2015, 23:10
#2

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

26 enero 2015, 11:18
#3

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

26 enero 2015, 20:52
#4

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

27 enero 2015, 8:55
#5

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

28 enero 2015, 8:39
#6

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

28 enero 2015, 12:16
#7

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

31 enero 2015, 12:00