Error de PHP y Smarty: tratando de obtener la propiedad de un no objeto

Soy nuevo en este sitio y estoy aprendiendo PHP. Estoy usando el texto Beginning PHP5 y MySQL E-Commerce From Novice to Professional de Darie y Bucica para crear un sitio web de comercio electrónico. Creo que algunos de los errores que he encontrado hasta ahora se debieron a la base de datos actualizada (MDB2). He podido superar todos los errores excepto este. Se supone que el código extrae la lista de departamentos de mi base de datos usando Smarty.

Aparece el error "Intentando obtener la propiedad de un no objeto" en la última línea. Tengo la sensación de que tiene que ver con la función is_array ().

<?php $_smarty_tpl->tpl_vars["load_departments_list"] = new Smarty_variable("departments_list", null, null);?>
    <table border="0" cellpadding="0" cellspacing="1" width="200">
     <tr>
      <td class="DepartmentListHead"> Choose a Sport </td>
     </tr>
     <tr>
      <td class="DepartmentListContent">
       <?php unset($_smarty_tpl->tpl_vars['smarty']->value['section']['i']);
    $_smarty_tpl->tpl_vars['smarty']->value['section']['i']['name'] = 'i';
    $_smarty_tpl->tpl_vars['smarty']->value['section']['i']['loop'] = is_array($_loop=$_smarty_tpl->getVariable('departments_list')->value->mDepartments) ? count($_loop) : max(0, (int)$_loop); unset($_loop);

Si hay algo más que necesite para ayudar a responder, hágamelo saber. Sea lo más descriptivo posible y muestre la solución usando mi código si es posible. ¡Gracias por tu ayuda! -Dibujó

preguntado el 08 de enero de 11 a las 22:01

¿Este es un código de un libro? unset($_smarty_tpl->tpl_vars['smarty']->value['section']['i']); elimina la variable a la que intenta acceder en las dos últimas líneas. -

Creo que esta sección está compilada a partir del archivo .tpl y no directamente en el libro. De todos modos, no fue agregado por mí personalmente. Gracias por señalar eso. ¡Voy a echar un vistazo a eso! -

2 Respuestas

Estás usando $_smarty_tpl->getVariable('departments_list')->value->mDepartments dentro de su in_array función. Asegúrese de haber asignado departments_list a un objeto sabelotodo.

O agregue un cheque antes de eso

$departments_list = $_smarty_tpl->getVariable('departments_list');
if (is_object($departments_list) && is_object($departments_list->value)
         &&  $departments_list->value->mDepartments) {
    $_smarty_tpl->tpl_vars['smarty']->value['section']['i']['loop'] = is_array($_loop=$_smarty_tpl->getVariable('departments_list')->value->mDepartments) ? count($_loop) : max(0, (int)$_loop); unset($_loop);
}

Respondido el 09 de enero de 11 a las 01:01

¡Danke! Eso parece haber funcionado. ¡Vamos al siguiente error! ¡Gracias por la rápida respuesta! - DrewInPB

Intente verificar cada variable para el tipo usando var_dump():

var_dump($_smarty_tpl->getVariable('departments_list'), $_smarty_tpl->getVariable('departments_list'))->value,
$_smarty_tpl->getVariable('departments_list'))->value->mDepartments);

Eso le dirá qué tipo de valores son. El problema no radica realmente en la función is_array, sino en el hecho, que con $_smarty_tpl->getVariable('departments_list'))->value->mDepartments está intentando acceder a la propiedad del objeto en dos casos, en el valor devuelto de getVariable() método, y getVariable()->value, así que uno de esos dos te está causando problemas.

Respondido el 09 de enero de 11 a las 01:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.