마 젠토 새로운 커스텀 블록 모듈


12

Magento 버전 1.8.1.0을 사용하고 있습니다.

새 홈페이지를 만드는 데 사용할 새 사용자 정의 블록 모듈을 만들려고합니다.

  • 네임 스페이스 : Crusader
  • 모듈 : CLHomePage
  • 블록 종류 : 십자군
  • 직업 : Qwerty (테스트 중)
  • 디자인 패키지 : 십자군
  • 테마 : 기본

이것이 내가 지금까지 가진 것입니다.

\ app \ etc \ modules \ Crusader_All.xml

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

\ app \ code \ local \ Crusader \ CL 홈페이지 \ etc \ config.xml

<?xml version="1.0"?>
<config> 
    <modules>
        <Crusader_CLHomePage>
            <version>0.0.1</version>
        </Crusader_CLHomePage>
    </modules>
    <global>
        <blocks>
            <crusaderhome>
                <class>Crusader_CLHomePage_Block</class>
            </crusaderhome>
        </blocks>
    </global>
</config>

\ app \ code \ local \ Crusader \ CL 홈페이지 \ Block \ Qwerty.php

<?php
class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template
{
    // Methods (optional)
}
?>

\ app \ design \ frontend \ crusader \ default \ layout \ local.xml

<?xml version="1.0" ?>
<layout>
    <cms_index_index>
        <reference name="content">
            <block type="core/template" name="homepage" template="crusader/home.phtml">
                <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
            </block>
        </reference>
    </cms_index_index>
</layout>

\ app \ design \ frontend \ crusader \ default \ template \ crusader \ home.phtml

<div id="home">
<p>Home Wrapper</p>
<?php echo $this->getChildHtml('homeads'); ?>
</div>

\ app \ design \ frontend \ crusader \ default \ template \ crusader \ homeads.phtml

<p>Adverts</p>

이제 위의 내용으로 제 홈 페이지에는 "홈 래퍼" home.phtml만 표시 되므로의 내용 은 표시되지만의 내용은 표시되지 않습니다 homeads.phtml.

나는의 블록 타입을 변경하는 경우 homeadscore/template작동, 나는 모두 "홈 래퍼"과 "광고"를 참조하십시오. 그래서 문제가 새로운 블록 유형 (십자군 집이라고 함)에 대한 참조와 관련이 있음을 알고 있습니다.

내가 여기서 뭘 잘못하고 있니?

편집하다

답변에 대한 제안 후 다음과 같이 일부 파일을 업데이트했지만 여전히 작동하지 않습니다.

\ app \ etc \ modules \ Crusader_Home.xml

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

\ app \ code \ local \ Crusader \ Home \ etc \ config.xml

<?xml version="1.0"?>
<config> 
    <modules>
        <Crusader_Home>
            <version>1.0.0</version>
        </Crusader_Home>
    </modules>
    <global>
        <blocks>
            <crusader_home>
                <class>Crusader_Home_Block</class>
            </crusader_home>
        </blocks>
    </global>
</config>

\ app \ code \ local \ Crusader \ Home \ Block \ Qwerty.php

<?php
class Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template
{
    // Methods (optional)
}
?>

\ app \ design \ frontend \ crusader \ default \ layout \ local.xml (이전에 시도한 중첩 블록 대신 하나의 블록 만 사용하도록 단순화 됨)

<?xml version="1.0" ?>
<layout>
    <cms_index_index>
        <reference name="content">
            <block type="crusader_home/qwerty" name="homepage" template="crusader/home.phtml" />
        </reference>
    </cms_index_index>
</layout>

\ app \ design \ frontend \ crusader \ default \ template \ crusader \ home.phtml

<p>Home</p>

그래서 나는 여전히 아무것도 보이지 않는 위치에 있습니다.

@FabianBlechschmidt에 의해 프롬프트가 표시되면 로그를 켰습니다. 이는 exception.log에 표시됩니다.

2014-04-09T14:04:54+00:00 ERR (3): 
exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty' in W:\stores\magento-dev\app\Mage.php:595
Stack trace:
#0 W:\stores\magento-dev\includes\src\__default.php(27744): Mage::throwException('Invalid block t...')
#1 W:\stores\magento-dev\includes\src\__default.php(27686): Mage_Core_Model_Layout->_getBlockInstance('crusader_home/q...', Array)
#2 W:\stores\magento-dev\includes\src\__default.php(27721): Mage_Core_Model_Layout->createBlock('crusader_home/q...', 'homepage')
#3 W:\stores\magento-dev\includes\src\__default.php(27488): Mage_Core_Model_Layout->addBlock('crusader_home/q...', 'homepage')
#4 W:\stores\magento-dev\includes\src\__default.php(27454): Mage_Core_Model_Layout->_generateBlock(Object(Mage_Core_Model_Layout_Element), Object(Mage_Core_Model_Layout_Element))
#5 W:\stores\magento-dev\includes\src\__default.php(27459): Mage_Core_Model_Layout->generateBlocks(Object(Mage_Core_Model_Layout_Element))
#6 W:\stores\magento-dev\includes\src\__default.php(13895): Mage_Core_Model_Layout->generateBlocks()
#7 W:\stores\magento-dev\includes\src\__default.php(11274): Mage_Core_Controller_Varien_Action->generateLayoutBlocks()
#8 W:\stores\magento-dev\includes\src\__default.php(11213): Mage_Cms_Helper_Page->_renderPage(Object(Mage_Cms_IndexController), 'home')
#9 W:\stores\magento-dev\app\code\core\Mage\Cms\controllers\IndexController.php(45): Mage_Cms_Helper_Page->renderPage(Object(Mage_Cms_IndexController), 'home')
#10 W:\stores\magento-dev\includes\src\__default.php(13969): Mage_Cms_IndexController->indexAction()
#11 W:\stores\magento-dev\includes\src\__default.php(18331): Mage_Core_Controller_Varien_Action->dispatch('index')
#12 W:\stores\magento-dev\includes\src\__default.php(17865): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#13 W:\stores\magento-dev\includes\src\__default.php(20465): Mage_Core_Controller_Varien_Front->dispatch()
#14 W:\stores\magento-dev\app\Mage.php(684): Mage_Core_Model_App->run(Array)
#15 W:\stores\magento-dev\index.php(176): Mage::run('crusadergifts', 'store')
#16 {main}

무슨 일이 일어나고 있는지 어떤 아이디어 .. ??

편집 2

@Malachy 답을 찾았습니다 ... 그것은 컴파일러였습니다. 컴파일러를 비활성화했으며 현재 작동하는 것 같습니다.


어딘가에 오타가 있다고 가정하고 파일 이름의 대문자 / 소문자를 확인하십시오. 파일이 잘 보입니다. 구성 캐시를 정리 했습니까?
Fabian Blechschmidt

@ FabianBlechschmidt 코드와 파일 이름으로 대문자 / 소문자를 확인했습니다. 위의 모든 것은 내 파일에서 붙여 넣습니다. 현재 모든 캐시가 꺼져 있으며 모든 캐시를 지우고 다시 시도했지만 여전히 작동하지 않습니다.
Stephen 지난

system.log 및 exception.log를 확인 했습니까? 아무것도 없으면 MAge_Core_Model_Config-> getGroupedClassName ()에서 디버깅을 시작합니다. 이 외에도 : 훌륭한 디버깅 튜토리얼을 살펴 보고 다시보고하십시오.
Fabian Blechschmidt

이전에는 로그를 사용하지 않았습니다. 나는 그것들을 지금 가능하게하고 exception.log가 보여주고있다 :exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Stephen Last

여기에 다른 답변에 따라 모듈 이름을 업데이트 했으므로 블록 유형 이름 (CLHomePage-> Home)입니다.
Stephen 마지막

답변:


11

XML 전체가 어려워서 여기에 당신의 대의에 동정적입니다.

클래스 이름과 블록 XML이 일치하지 않는 것 같습니다.

class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template

    <block type="core/template" name="homepage" template="crusader/home.phtml">
        <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
    </block>

블록 유형으로 시작하여 뒤로 작업합시다. 나는 여기에 다음과 같은 것을 보게 될 것이라고 생각합니다.

<block type="crusader_home/qwerty" ...

유형 은 Magento를 클래스로 참조합니다.

Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template

이 압정에서 계속 작동하려면 app \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml 파일을 다음과 같이 수정해야합니다.

<global>
    <blocks>
        <crusader_home>
            <class>Crusader_Home_Block</class>
        </crusader_home>
    </blocks>
</global>

Magento가 'Crusader_Home_Block_ *'를 시작하는 모든 클래스를 가리 킵니다. 이제 Crusader_CLHomePage 대신 모듈 Crusader_Home의 이름을 바꾸고 그에 따라 폴더 이름을 변경해야한다고 생각합니다 ...

AND / 그러나 모듈 이름을 변경하는 것이 좋습니다. 모듈 이름의 시작 부분에 세 개가 아닌 하나의 대문자만 사용하고 이름 중간에 대문자를 사용하지 마십시오.

모듈 생성에 사용 가능한 도구 중 일부를 살펴볼 수 있습니다. 입력 오류를 피하는 데 매우 유용합니다. 나는 이것을 MGT Commerce의 매우 영리한 사람들이 사용 합니다 (단순함이 있습니다). 이 사람은 Silk Software의 포괄적이고 놀라운 코딩 조각입니다 .

*** 아래 코멘트를 편집

또한 오류 로그를 기반으로 문제는 Magento가 클래스 파일을 찾을 수 없다는 것입니다. 따라서 캐시, 특히 XML 캐시가 새로 고쳐 지거나 꺼져 있는지 확인하고 컴파일러가 꺼져 있거나 다시 활성화되어 있는지 다시 확인하십시오 .


고맙습니다, 당신의 제안을 시도했습니다. 모듈 이름을 '홈'으로 변경하고 모든 참조 및 폴더를 업데이트했습니다. 여전히 작동하지 않습니다. 변경 사항을 보여주기 위해 질문을 편집하겠습니다.
Stephen 마지막

1
확실히 더 좋아 보인다. 어딘가에 여전히 부적절한 타이핑 오류가 있는지 궁금합니다. 오류 로그에 따르면 문제는 Magento가 클래스 파일을 찾을 수 없다는 것입니다. 따라서 캐시가 새로 고쳐 지거나 esp가 꺼져 있는지 다시 확인하십시오. XML 캐시와 컴파일러가 꺼져 있거나 다시 활성화되어 있습니다. 파일 권한 문제가 아닐까요?
Malachy

1
당신은 마법의 단어-Complier를 언급했습니다 ... Complier를 비활성화 시켰으며 지금은 작동하는 것 같습니다. 감사합니다! 이것을 답변으로 추가하면 받아 들일 것입니다! :-)
Stephen 마지막

실제로 는 컴파일러 만이 아닙니다 . 원본 XML <block type="crusaderhome/qwerty"이 잘못되었습니다. 해결책은 a) XML을 수정 하고 b) 재 컴파일
Malachy

-1

처음에 질문에 답하십시오

    <block type="core/template" name="homepage" template="crusader/home.phtml">
       <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
    </block>

로 교체해야합니다

<block type="core/template" name="homepage" template="crusader/home.phtml"></block>
<block type="crusaderhome/qwerty" name="homeads" as="homeads" 
template="crusader/homeads.phtml" />

homeads는 홈페이지의 하위가 아니기 때문입니다. 나는 이것이 효과가 있다고 생각한다.


감사! 나는 운이없이 전에 그것을 시도했다. 블록 유형이 핵심 / 템플릿 (내 사용자 정의 블록 유형이 아닌) 일 때 부모 / 자식이 제대로 작동했기 때문에 내 문제는 블록 배치가 아닙니다.
Stephen 마지막

-1

동일한 문제가 발생하여 config.xml에서 다음 코드를 교체하여 해결했습니다.

<global>
    <blocks>
        <crusaderhome>
            <class>Crusader_CLHomePage_Block</class>
        </crusaderhome>
    </blocks>
</global>

이에

<global>
    <blocks>
        <crusader_clhomepage>
            <class>Crusader_CLHomePage_Block</class>
        </crusader_clhomepage>
    </blocks>
</global>

문제를 해결해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.