Перезаписать Расширенную форму Блока поиска каталога Магов
Я знаю, об этом много спрашивали, но это просто не работает для меня.
Мой config.xml
<?xml version="1.0"?>
<config>
<modules>
<MyModule_CatalogSearch>
<version>0.0.1</version>
</MyModule_CatalogSearch>
</modules>
<global>
<blocks>
<MyModule_CatalogSearch>
<class>MyModule_CatalogSearch_Block</class>
</MyModule_CatalogSearch>
<catalogsearch>
<rewrite>
<advanced_form>
MyModule_CatalogSearch_Block_Advanced_Form
</advanced_form>
</rewrite>
</catalogsearch>
</blocks>
</global>
</config>
И в локальном/MyModule/Catalogsearch/Block/Advanced я получил Form.php
<?php
class MyModule_CatalogSearch_Block_Advanced_Form extends Mage_CatalogSearch_Block_Advanced_Form
{
public function _prepareLayout()
{
// add Home breadcrumb
if ($breadcrumbs = $this->getLayout()->getBlock('breadcrumbs')) {
$breadcrumbs->addCrumb('home', array(
'label'=>Mage::helper('catalogsearch')->__('Home'),
'title'=>Mage::helper('catalogsearch')->__('Go to Home Page'),
'link'=>Mage::getBaseUrl()
))->addCrumb('search', array(
'label'=>Mage::helper('catalogsearch')->__('MyCatalogSearch')
));
}
return parent::_prepareLayout();
}
public function getStoreCategories()
{
$helper = Mage::helper('catalog/category');
return $helper->getStoreCategories();
}
}
В виде исключения.в журнале я получаю следующее: Недопустимый тип блока2:
MyModule_CatalogSearch_Block_Advanced_Form
#0 //app/code/core/Mage/Core/Model/Layout.php(495): Mage->throwException('Invalid block type2:
MyModule_CatalogSearch_Block_Advanced_Form
')
#1 //app/code/core/Mage/Core/Model/Layout.php(437): Mage_Core_Model_Layout->_getBlockInstance('catalogsearch/advanced_form', Array)
#2 //app/code/core/Mage/Core/Model/Layout.php(472): Mage_Core_Model_Layout->createBlock('catalogsearch/advanced_form', 'catalogsearch_advanced_form')
#3 //app/code/core/Mage/Core/Model/Layout.php(239): Mage_Core_Model_Layout->addBlock('catalogsearch/advanced_form', 'catalogsearch_advanced_form')
#4 //app/code/core/Mage/Core/Model/Layout.php(205): Mage_Core_Model_Layout->_generateBlock(Mage_Core_Model_Layout_Element, Mage_Core_Model_Layout_Element)
#5 //app/code/core/Mage/Core/Model/Layout.php(210): Mage_Core_Model_Layout->generateBlocks(Mage_Core_Model_Layout_Element)
#6 //app/code/core/Mage/Core/Controller/Varien/Action.php(344): Mage_Core_Model_Layout->generateBlocks()
#7 //app/code/core/Mage/Core/Controller/Varien/Action.php(269): Mage_Core_Controller_Varien_Action->generateLayoutBlocks()
#8 //app/code/core/Mage/CatalogSearch/controllers/AdvancedController.php(39): Mage_Core_Controller_Varien_Action->loadLayout()
#9 //app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_CatalogSearch_AdvancedController->indexAction()
#10 //app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('index')
#11 //app/code/community/ArtsOnIT/OfflineMaintenance/Controller/Router/Standard.php(46): Mage_Core_Controller_Varien_Router_Standard->match(Mage_Core_Controller_Request_Http)
#12 //app/code/core/Mage/Core/Controller/Varien/Front.php(172): ArtsOnIT_OfflineMaintenance_Controller_Router_Standard->match(Mage_Core_Controller_Request_Http)
#13 /app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#14 //app/Mage.php(675): Mage_Core_Model_App->run(Array)
#15 /4/magento/index.php(87): Mage->run('', 'store')
Я изменился Layout.php чтобы увидеть, где возникает исключение, и это происходит в
if (!$block instanceof Mage_Core_Block_Abstract) {
Mage::throwException(Mage::helper('core')->__('Invalid block type2: %s', $block));
}
Может ли кто-нибудь объяснить, ПОЧЕМУ это происходит и как это исправить?
Большое спасибо
Решение: Перед именем класса были пробелы. Удаление их, как предложил Амит, решило эту проблему.
2 answers
<MyModule_CatalogSearch>
<class>MyModule_CatalogSearch_Block</class>
</MyModule_CatalogSearch>
Изменить на
<mymodulecatalogsearch>
<class>MyModule_CatalogSearch_Block</class>
</mymodulecatalogsearch>
Объясните:
Здесь <MyModule_CatalogSearch>
- это block type
, и это always be lower letters
.
Тип блока - always be small letter
. Как мы определяем, тип блока - это <mymodulecatalogsearch> then it class MyModule_CatalogSearch_Block
Config.xml
<?xml version="1.0"?>
<config>
<modules>
<MyModule_CatalogSearch>
<version>0.0.1</version>
</MyModule_CatalogSearch>
</modules>
<global>
<blocks>
<mymodulecatalogsearch>
<class>MyModule_CatalogSearch_Block</class>
</mymodulecatalogsearch>
<catalogsearch>
<rewrite>
<advanced_form>MyModule_CatalogSearch_Block_Advanced_Form</advanced_form>
</rewrite>
</catalogsearch>
</blocks>
</global>
</config>
Можете ли вы проверить свой файл, в котором у вас есть класс:
Mage_CatalogSearch_Block_Advanced_Form
У вас может произойти случайное изменение в нем. Проверьте, наследует ли вышеуказанный класс от Mage_Core_Block_Abstract или от его дочерних классов.