Метод Joomla 1.6 JCategories :: get () создает «PHP Fatal error: Allowed memory outed» в пользовательском компоненте MVC

Я реализую пользовательский компонент MVC после документации Joomla 1.6 .

Я пытаюсь использовать JCategories::get() для получения списка категорий и их детей из com_component . Я получаю следующую ошибку:

 PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 125306881 bytes) 

Если я не print_r($this->items); для перечисления элементов, я не получаю сообщение об ошибке. Если я изменю строку

$categories = JCategories::getInstance('Content');

читать

$categories = JCategories::getInstance('banners');

Я не получаю ошибку.

Я включил весь свой код компонента ниже. Так же, как FYI, я провел последние пару дней в irc.freenode.net/#joomla, разговаривая с любым, кто хочет помочь с очень небольшим прогрессом. Любая помощь приветствуется.

Код контроллера:

  <?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); // import joomla controller library jimport('joomla.application.component.controller'); $controller = JController::getInstance('CtItem'); $controller->execute(JRequest::getCmd('task')); $controller->redirect(); 

Код модели:

 <?php // No direct access to this file defined('_JEXEC') or die; // import Joomla Categories library jimport( 'joomla.application.categories' ); class CtItemModelCtItem extends JModel { private $_items = null; private $_parent = null; public function getItems($recursive = false) { $categories = JCategories::getInstance('Content'); $this->_parent = $categories->get(15); if(is_object($this->_parent)) { $this->_items = $this->_parent->getChildren($recursive); } else { $this->_items = false; } return $this->_items; } } 

Просмотреть код:

 <?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); // import Joomla view library jimport('joomla.application.component.view'); class CtItemViewCtItem extends JView { // Overwriting JView display method function display($tpl = null) { // Assign data to the view $this->items = $this->get('Items'); if(count($errors = $this->get('Errors'))) { JError::raiseError(500, implode('<br />', $errors)); return false; } // Display the view parent::display($tpl); } } 

Шаблонный код:

 <?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); $document = JFactory::getDocument(); ?> <div id="Test"><?=print_r($this->items, true)?></div> 

    Я обнаружил, что попытка var_dump() или print_r() JCategoryNode приводит к бесконечному циклу. Поэтому я модифицировал мою модель следующим образом:

     <?php // No direct access to this file defined('_JEXEC') or die; // import Joomla Categories library jimport( 'joomla.application.categories' ); class CtItemModelCtItem extends JModel { private $_items = null; private $_parent = null; public function getItems($recursive = false) { $categories = JCategories::getInstance('Content'); $this->_parent = $categories->get(15); if(is_object($this->_parent)) { $this->_items = $this->_parent->getChildren($recursive); } else { $this->_items = false; } return $this->loadCats($this->_items); } protected function loadCats($cats = array()) { if(is_array($cats)) { $i = 0; $return = array(); foreach($cats as $JCatNode) { $return[$i]->title = $JCatNode->title; if($JCatNode->hasChildren()) $return[$i]->children = $this->loadCats($JCatNode->getChildren()); else $return[$i]->children = false; $i++; } return $return; } return false; } }