Перезаписать Расширенную форму Блока поиска каталога Магов


Я знаю, об этом много спрашивали, но это просто не работает для меня.

Мой 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));
        }

Может ли кто-нибудь объяснить, ПОЧЕМУ это происходит и как это исправить?

Большое спасибо

Решение: Перед именем класса были пробелы. Удаление их, как предложил Амит, решило эту проблему.

Author: kilsen, 2014-09-06

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>
 2
Author: Amit Bera, 2014-09-06 15:45:05

Можете ли вы проверить свой файл, в котором у вас есть класс:

Mage_CatalogSearch_Block_Advanced_Form

У вас может произойти случайное изменение в нем. Проверьте, наследует ли вышеуказанный класс от Mage_Core_Block_Abstract или от его дочерних классов.

 1
Author: Paras Sood, 2014-09-06 15:25:53