Używam Magento w wersji 1.8.1.0.
Próbuję utworzyć nowy niestandardowy moduł blokowy, którego użyję do utworzenia nowej strony głównej.
- Przestrzeń nazw: Krzyżowiec
- Moduł: CLHomePage
- Typ bloku: krucjata główna
- Klasa: Qwerty (na razie podczas testowania)
- Pakiet projektowy: krzyżowiec
- Motyw: domyślny
Oto co mam do tej pory:
\ 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 \ CLHomePage \ 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 \ CLHomePage \ 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>
Teraz, gdy powyższe jest na swoim miejscu, moja strona główna pokazuje po prostu „Home Wrapper”, więc home.phtml
wyświetlana jest zawartość , ale nie treść homeads.phtml
.
Jeśli zmienić typ bloku do homeads
celu core/template
, to działa, i widzę zarówno „Home Wrapper” i „Ogłoszenia”. Wiem, że problem ma związek z odniesieniem do mojego nowego typu bloku (zwanego domem krucjaty).
Co ja tu robię źle?
EDYTOWAĆ
Po sugestiach w odpowiedziach zaktualizowałem niektóre pliki w następujący sposób, ale nadal nie działa:
\ 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 (uproszczone, aby używać tylko jednego bloku zamiast zagnieżdżonych bloków, które próbowałem wcześniej)
<?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>
Więc wciąż jestem w pozycji, w której nic się nie pokazuje.
Po wyświetleniu monitu przez @FabianBlechschmidt włączyłem logi, co pokazuje wyjątek.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}
Wszelkie pomysły, co się dzieje .. ??
EDYCJA nr 2
@Malachy Znaleziono odpowiedź ... To był kompilator. Wyłączyłem kompilator i wydaje się, że teraz działa.
exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Odpowiedzi:
Uważam, że cała ta sprawa z XML jest trudna, więc popieram twoją sprawę tutaj.
Wydaje mi się, że istnieje rozbieżność między nazwą klasy a blokowym kodem XML
to znaczy
i
Zacznijmy od typu bloku i pracujmy wstecz. Myślę, że tutaj oczekiwałbym czegoś takiego
i ten typ odsyłałby Magento do klasy
Kontynuując pracę wstecz nad tym taktem, plik app \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml musiałby zostać zmodyfikowany do czegoś w rodzaju
Wskazuje Magento na wszystkie klasy zaczynające się od „Crusader_Home_Block_ *”. A teraz myślę, że musisz zmienić nazwę modułu Crusader_Home zamiast Crusader_CLHomePage i odpowiednio zmienić nazwy folderów ...
I / ALE zdecydowanie zalecamy zmianę nazwy modułu. Zawsze używaj tylko jednej dużej litery na początku nazwy modułu, a nie trzech, i nie umieszczaj wielkich liter na środku nazwy.
Możesz zajrzeć do niektórych narzędzi dostępnych do generowania modułów. Uważam je za bardzo przydatne w celu uniknięcia błędów pisowni. Używam tego przez bardzo sprytnych ludzi z MGT Commerce (ma prostotę po swojej stronie), a ten jest wszechstronny i zadziwiający .
*** EDYTUJ zgodnie z poniższymi komentarzami
Dodatkowo na podstawie dziennika błędów myślę, że problem polega na tym, że Magento nie może znaleźć pliku klasy. Dlatego dokładnie sprawdź, czy pamięci podręczne są odświeżone lub wyłączone, szczególnie pamięć podręczna XML oraz czy kompilator jest wyłączony lub ponownie włączony .
źródło
<block type="crusaderhome/qwerty"
jest niepoprawny. Rozwiązaniem jest zarówno a) poprawienie XML, jak i b) ponowna kompilacjaodpowiedz na swoje pytanie w pierwszej kolejności
powinien zostać zastąpiony przez
ponieważ homeady nie są dzieckiem strony głównej. Myślę, że to zadziała.
źródło
Mam ten sam problem i rozwiązałem go, zastępując następujący kod w pliku config.xml
do tego
To powinno rozwiązać problem.
źródło