2014-11-04 2 views
0

저는 Magento에서 새로 왔고 간단해야한다고 생각하는 문제로 뒤죽박죽입니다.Extending Mage_Catalog_Block_Navigation

내가 Mage_Catalog_Block_Navigation 클래스를 대체하려면 내가 만든 : (조각)를 포함 app\code\local\Feno\Catalog\Block\Navigation.php을 : app\code\local\Feno\Catalog\etc\config.xml에서

class Feno_Catalog_Block_Navigation extends Mage_Catalog_Block_Navigation 
{ 
    public function renderCategoriesMenuHtml($level = 0, $outermostItemClass = '', $childrenWrapClass = '', $exclude_ids = array()) 
    { 

내가 가진 :

<?xml version="1.0"?> 
<config> 

    <modules> 
     <Feno_Catalog> 
      <version>1.0.1</version> 
     </Feno_Catalog> 
    </modules> 

    <global> 
     <blocks> 
      <catalog> 
       <rewrite> 
        <navigation>Feno_Catalog_Block_Navigation</navigation> 
       </rewrite> 
      </catalog> 
     </blocks> 
    </global> 

</config> 

을 그러나 내가 페이지를 실행하면, 이 오류가 발생합니다 :

Invalid method Mage_Catalog_Block_Navigation::renderCategoriesMenuHtml(Array ... 

그래서 선택하지 않았습니다. 내 수업을 보내고 ..

내가 함께 app\etc\modules\Feno_Catalog.xml을 추가하는 시도 :

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Feno_Catalog> 
     <active>true</active> 
     <codePool>local</codePool> 
     </Feno_Catalog> 
    </modules> 
</config> 

그러나 그것은 작동하지 않습니다. 나는 무언가를 잊고 있니?

내가 Magento에 익숙하지 않았으므로 어디에서 봐야할지, Google 및 stackoverflow가 도움을 줄 수 있는지 알지 못했습니다. 참고로, 나는 등 PHPStorm 때문에 XML을 사용

답변

1

,

<Mage_Catalog> 
      <depends> 
       <Packagename_Modulename /> 
      </depends> 
</Mage_Catalog> 

그래서 당신 Feno_Catalog.xml (응용 프로그램을/etc/모듈) 파일이 있어야 따라 사용하십시오. 이전 시간을 관리하지 않고 오늘 다시 시도했는데 (몇 시간 만 썼다) 모든 것을 검색하고 시도한 후에 발견했습니다.

주요 문제로 보이는

는 블록이

... 
<config> 
    <global> 
     <blocks> 
      <catalog> 
       <rewrite> 
        <navigation>Feno_Catalog_Block_Navigation</navigation> 
       </rewrite> 
      </catalog> 
     </blocks> 
     <install> 
     ... 

완벽 작동이를 추가 한 후 /app/etc/local.xml에 등록해야한다고했다!이 짧은 달콤한 블로그 게시물을 찾을 수

: http://priyasmagento.blogspot.com/2010/07/override-navigation-block.html 또한 블로그 게시물의 내용을 추가하기로 결정

, 위치는 매우 잘 유지하지 않는 것 데이터를 잃는 부끄러운 것입니다. © http://priyasmagento.blogspot.com/

  1. 은 로컬 폴더에 mymodulepack 폴더를 만듭니다.

    Path: C:\wamp\www\triangeli\app\code\local\mymodulepack 
    
  2. mymodulpack 네임 스페이스 내에 카탈로그 폴더를 만듭니다.

  3. 카탈로그 폴더 내에 블록, 기타, 헬퍼 폴더를 생성하십시오.
  4. 블록 폴더에 Navigation.php 파일을 만듭니다. 이 파일 안에 클래스를 오버라이드하고 함수를 작성하십시오.

    <?php 
    
    class mymodulepack_Catalog_Block_Navigation extends Mage_Catalog_Block_Navigation 
    
    { 
        //write the function here,which add new functionality or override the  original code 
        public function override() 
        { 
         //write the code here 
        } 
    } 
    
  5. etc 폴더 내에 config.xml 파일을 만듭니다.

    <?xml version="1.0" encoding="iso-8859-1"?> 
    <config> 
        <modules> 
        <mymodulepack_Catalog> 
         <version>0.1.0</version> 
        </mymodulepack_Catalog> 
        </modules> 
        <global> 
        <blocks> 
         <catalog> 
         <rewrite> 
          <class>mymodulepack_Catalog_Block</class> 
         </rewrite> 
         </catalog> 
        </blocks> 
        <helpers> 
         <catalog> 
         <rewrite> 
          <class>mymodulepack_Catalog_Helper</class> 
         </rewrite> 
         </catalog> 
        </helpers> 
        </global> 
    </config> 
    
  6. Helper 폴더 내에 Data.php 파일을 만듭니다. 파일 응용 프로그램에서 \ 전역에서 등 \ local.xml 참조 mymodulepack : 관리자 섹션에서

    <config> 
        <global> 
         <blocks> 
         <catalog> 
          <rewrite> 
           <navigation>mymodulepack_Catalog_Block_Navigation</navigation> 
          </rewrite> 
         </catalog> 
         </blocks> 
         <install> 
          <date><![CDATA[Thu, 17 Dec 2009 11:50:52 +0000]]></date> 
         </install> 
         <crypt> 
          <key><![CDATA[d89edae607842ce91b0e36456faed63e]]></key> 
         </crypt> 
         <disable_local_modules>false</disable_local_modules> 
         <resources> 
          <db> 
           <table_prefix><![CDATA[]]></table_prefix> 
          </db> 
          <default_setup> 
           <connection> 
            <host><![CDATA[localhost]]></host> 
            <username><![CDATA[root]]></username> 
            <password><![CDATA[]]></password> 
            <dbname><![CDATA[pizzaman]]></dbname> 
            <active>1</active> 
           </connection> 
          </default_setup> 
         </resources> 
         <session_save><![CDATA[files]]></session_save> 
        </global> 
        <admin> 
         <routers> 
          <adminhtml> 
           <args> 
            <frontName><![CDATA[admin]]></frontName> 
           </args> 
          </adminhtml> 
         </routers> 
        </admin> 
    </config> 
    
  7. 안 캐시

  8. <?php 
    class mymodulepack_Catalog_Helper_Data extends Mage_Core_Helper_Abstract 
    { } 
    ?> 
    
  9. 나의 새로운 모듈 "mymodulepack"을 "활성화"를 .

2

당신은 당신의 config.xml 파일에 새 클래스 이름을 추가하지 않은 모든 유효한 (IDE 검사)이며, 그것은

<?xml version="1.0"?> 
<config> 
    <modules> 
    <Feno_Catalog> 
     <version>0.0.0</version> 
    </Feno_Catalog> 
    </modules> 
    <global> 
    <helpers> 
     <catalog> 
     <class>Feno_Catalog_Helper</class> 
     </catalog> 
    </helpers> 
    <blocks> 
     <catalog> 
     <class>Feno_Catalog_Block</class> 
     </catalog> 
      <catalog> 
       <rewrite> 
        <navigation>Feno_Catalog_Block_Catalog_Navigation</navigation> 
       </rewrite> 
      </catalog> 
    </blocks> 
    </global> 
</config> 

그리고 수업을해야한다 응용 프로그램/코드/지역/Feno/카탈로그/Blcok/카탈로그/Navigation.php

<?php 
class Feno_Catalog_Block_Catalog_Navigation extends Mage_Catalog_Block_Navigation 
{ 
} 

그리고 당신의 도우미 파일 (이 선택 사항입니다)

응용 프로그램/코드/지역/Feno/카탈로그/도우미/Data.php

<?php 
class Feno_Catalog_Helper_Data extends Mage_Core_Helper_Abstract 
{ 
} 

업데이트: 내가 추가하는 것을 잊어 버렸습니다. 카탈로그을 사용중인 모듈 이름은 이미 magento core에서 사용하고 있습니다. 따라서 모듈 이름을 변경하거나 <depends> ..</depends> 태그를 사용해야합니다. 그렇지 않으면 모듈 충돌이 발생하거나 모듈이로드되지 않습니다. 나는 여기에 내 자신의 질문에 대답하는거야

<?xml version="1.0"?> 
<config> 
    <modules> 
    <Feno_Catalog> 
     <active>true</active> 
     <codePool>local</codePool> 
     <version>0.0.0</version> 
     <depends> 
     <Mage_Catalog /> 
     </depends> 
    </Feno_Catalog> 
    </modules> 
</config> 
+1

또한 모듈과 코어 카탈로그 모듈 간의 종속성을 추가해야합니다 (구성이 코어 다음에로드되도록). –

+0

@MihaiStancu 오 예. 고마워, 나는 내 대답을 업데이 트했습니다. 내가 틀렸다면 나를 바로 잡아주세요. – Elavarasan

+0

고마워, 지금까지는 좋아 보이지만 헬퍼 :'Class 'Feno_Catalog_Helper_Category_Flat'을 app \ Mage.php에 찾을 수 없다면이 오류가 발생합니다. XML에서 도우미가 없으면 조금 더 익숙해 져야합니다. '치명적인 오류 : app \ code \ core \ Mage \ Catalog \ Block \에있는 객체가 아닌 객체의 setTemplate() Product \ Abstract.php' – Richard

관련 문제