Joomla 1.6 JCategories::get() 方法在自定义 MVC 组件中产生“PHP 致命错误:允许内存

2023-10-16php开发问题
2

本文介绍了Joomla 1.6 JCategories::get() 方法在自定义 MVC 组件中产生“PHP 致命错误:允许内存耗尽"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我正在按照 Joomla 1.6 文档.

我在尝试使用 JCategories::get()com_component 获取类别及其子项的列表时遇到问题.我收到以下错误:

I am running into a problem when trying to use JCategories::get() to obtain a list of categories and their children from com_component. I receive the following error:

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

如果我发出print_r($this->items);来列出项目,我不会收到错误.如果我改变行

If I do not issue a print_r($this->items); to list the items, I do not receive an error. If I change the line

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

阅读

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

没有收到错误消息.

我在下面包含了我的所有自定义组件代码.仅供参考,过去几天我一直在 irc.freenode.net/#joomla 与任何愿意提供帮助的人交谈,但进展甚微.任何帮助将不胜感激.

I have included all of my custom component code below. Just as an FYI, I've spent the past couple of days in irc.freenode.net/#joomla speaking with anyone willing to help with very little progress made. Any help would be much appreciated.

控制器代码:

  <?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 会导致无限循环.因此,我将上面的模型修改为以下内容:

I found that attempting to var_dump() or print_r() JCategoryNode results in an endless loop. Therefore, I modified my model above to the following:

<?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;

    }

}

这篇关于Joomla 1.6 JCategories::get() 方法在自定义 MVC 组件中产生“PHP 致命错误:允许内存耗尽"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

PHP实现DeepL翻译API调用
DeepL的翻译效果还是很强大的,如果我们要用php实现DeepL翻译调用,该怎么办呢?以下是代码示例,希望能够帮到需要的朋友。 在这里需要注意,这个DeepL的账户和api申请比较难,不支持中国大陆申请,需要拥有香港或者海外信用卡才行,没账号的话,目前某宝可以...
2025-08-20 php开发问题
168

PHP通过phpspreadsheet导入Excel日期数据处理方法
PHP通过phpspreadsheet导入Excel日期,导入系统后,全部变为了4开头的几位数字,这是为什么呢?原因很简单,将Excel的时间设置问文本,我们就能看到该日期本来的数值,上图对应的数值为: 要怎么解决呢?进行数据转换就行,这里可以封装方法,或者用第三方的...
2024-10-23 php开发问题
287

mediatemple - 无法使用 codeigniter 发送电子邮件
mediatemple - can#39;t send email using codeigniter(mediatemple - 无法使用 codeigniter 发送电子邮件)...
2024-08-23 php开发问题
11

Laravel Gmail 配置错误
Laravel Gmail Configuration Error(Laravel Gmail 配置错误)...
2024-08-23 php开发问题
16

将 PHPMailer 用于 SMTP 的问题
Problem with using PHPMailer for SMTP(将 PHPMailer 用于 SMTP 的问题)...
2024-08-23 php开发问题
4

关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题
Issue on how to setup SMTP using PHPMailer in GoDaddy server(关于如何在 GoDaddy 服务器中使用 PHPMailer 设置 SMTP 的问题)...
2024-08-23 php开发问题
17