在Magento Enterprise 1.8中,我一遍又一遍地遇到一个特殊的错误,我想知道是否有其他人遇到过这个问题以及他们为解决这个问题做了什么。
错误是:
无效的块类型:Mage_CatalogInventory_Block_Qtyincrements
我也看到了很多:
无效的块类型:Mage_Navadmin_Block_Navadmin
答案 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
是否存在语法错误? (配置文件位置是有根据的猜测)