我的system.log文件中的奇怪错误一遍又一遍

时间:2011-01-27 18:03:58

标签: magento

在Magento Enterprise 1.8中,我一遍又一遍地遇到一个特殊的错误,我想知道是否有其他人遇到过这个问题以及他们为解决这个问题做了什么。

错误是:

  

无效的块类型:Mage_CatalogInventory_Block_Qtyincrements

我也看到了很多:

  

无效的块类型:Mage_Navadmin_Block_Navadmin

3 个答案:

答案 0 :(得分:2)

此页面上有一些补丁文件用于修复Qtyincrements消息:
http://www.magentocommerce.com/boards/viewthread/195761/P0/

答案 1 :(得分:1)

当您尝试实例化一个块对象时,如果Magento找不到该类,它将记录错误,而不是渲染块,并继续移动。

这种情况发生在整个代码库的一些地方,但最有可能的地方是

File: app/code/core/Mage/Core/Model/Layout.php
protected function _getBlockInstance($block, array $attributes=array())
{
    if (is_string($block)) {
        if (strpos($block, '/')!==false) {
            if (!$block = Mage::getConfig()->getBlockClassName($block)) {
                Mage::throwException(Mage::helper('core')->__('Invalid block type: %s', $block));
            }
        }
        if (class_exists($block, false) || mageFindClassFile($block)) {
            $block = new $block($attributes);
        }
    }
    if (!$block instanceof Mage_Core_Block_Abstract) {
        Mage::throwException(Mage::helper('core')->__('Invalid block type: %s', $block));
    }
    return $block;
}
//...
public function getBlockSingleton($type)
{
    if (!isset($this->_helpers[$type])) {
        $className = Mage::getConfig()->getBlockClassName($type);
        if (!$className) {
            Mage::throwException(Mage::helper('core')->__('Invalid block type: %s', $type));
        }

        $helper = new $className();
        if ($helper) {
            if ($helper instanceof Mage_Core_Block_Abstract) {
                $helper->setLayout($this);
            }
            $this->_helpers[$type] = $helper;
        }
    }
    return $this->_helpers[$type];
}

那么,你的两个具体错误。 Magento无法实例化

Mage_CatalogInventory_Block_Qtyincrements

这可能是因为在1.8附带的布局中,核心代码试图使用一个可以实例化的块

<block type="cataloginventory/qtyincrements" name="product.info.extrahint" as="extrahint" template="cataloginventory/qtyincrements.phtml"/>

这是一个1.8错误。我会联系Magento Enterprise支持补丁。正如@clockworkgeek所提到的,the community edition看起来遇到了类似的问题。该线程中的补丁值得寻找修复,但我会谨慎地将企业版补丁应用于社区版。

在第二个错误中,Magento无法实例化

Mage_Navadmin_Block_Navadmin

Enterprise 1.8附带的Navadmin模块没有。根据块名称,这意味着某些块XML可能看起来像

<block type="navadmin/navadmin"

我最好猜测,如果有人在某个时候在您的网站上安装了this extension。它应该安装文件到(以及其他地方)

app/code/community/Mage/Navadmin

引用该块的模板或XML布局文件可能保留在您的系统上,但是在

中定义块的实际类文件
app/code/community/Mage/Navadmin/Block/Navadmin.php

缺少。

答案 2 :(得分:0)

我只在Mage_Core_Model_Layout::_getBlockInstance()中找到对“无效的块类型”的引用。

当一个块没有从Mage_Core_Block_Abstract继承或者由于缺少适当的config.xml文件而无法通过短格式加载该块时,似乎会导致该错误。

  • 您的系统上是否存在类?
  • layout/*.xml文件中有哪些元素使用它们?
  • config.xml中的Mage/{Navadmin,CatalogInventory}/etc/config.xml是否存在语法错误? (配置文件位置是有根据的猜测)