Mô-đun khối tùy chỉnh mới Magento


12

Tôi đang sử dụng Magento phiên bản 1.8.1.0.

Tôi đang cố gắng tạo một mô-đun khối tùy chỉnh mới, mà tôi sẽ sử dụng để tạo một trang chủ mới.

  • Không gian tên: Thập tự quân
  • Mô-đun: CLHomePage
  • Loại khối: nhà thập tự chinh
  • Lớp: Qwerty (chỉ lúc này trong khi thử nghiệm)
  • Gói thiết kế: thập tự quân
  • Chủ đề: mặc định

Đây là những gì tôi có cho đến nay:

\ app \ etc \ module \ 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>

Bây giờ, với vị trí trên, trang chủ của tôi chỉ hiển thị "Home Wrapper", vì vậy nội dung của home.phtmlđược hiển thị, nhưng không hiển thị nội dung homeads.phtml.

Nếu tôi thay đổi loại khối homeadsthành core/template, nó sẽ hoạt động và tôi thấy cả "Gói nhà" và "Quảng cáo". Vì vậy, tôi biết vấn đề là một cái gì đó để làm với tham chiếu đến loại khối mới của tôi (được gọi là nhà thập tự chinh).

Tôi làm gì sai ở đây..?

BIÊN TẬP

Sau khi đề xuất câu trả lời, tôi đã cập nhật một số tệp như sau, nhưng nó vẫn không hoạt động:

\ app \ etc \ module \ 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 (được đơn giản hóa để chỉ sử dụng một khối thay vì các khối lồng nhau mà tôi đã thử trước đây)

<?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>

Vì vậy, tôi vẫn ở một vị trí không có gì hiển thị.

Sau khi được nhắc nhở bởi @FabianBlechschmidt, tôi đã bật nhật ký và điều này hiển thị ngoại lệ.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}

Bất cứ ý tưởng những gì đang xảy ra .. ??

EDIT số 2

@Malachy Tìm thấy câu trả lời ... Đó là trình biên dịch. Tôi đã vô hiệu hóa trình biên dịch và nó dường như hoạt động ngay bây giờ.


Tôi giả sử, bạn có một lỗi đánh máy ở đâu đó, kiểm tra chữ hoa / chữ thường của tên tệp. Các tập tin trông ổn. Bạn đã làm sạch bộ đệm cấu hình?
Fabian Blechschmidt

@FabianBlechschmidt Tôi đã kiểm tra chữ hoa / chữ thường trong mã và tên tệp - có vẻ ổn với tôi. Tất cả mọi thứ ở trên được dán từ các tập tin của tôi. Hiện tại tôi đã tắt tất cả bộ nhớ cache và tôi đã xóa tất cả bộ đệm và thử lại - vẫn không hoạt động.
Stephen

Bạn đã kiểm tra system.log và ex.log chưa? Nếu không có gì trong đó, tôi sẽ bắt đầu gỡ lỗi trong MAge_Core_Model_Config-> getgroupedClassName (). Bên cạnh này: Xin vui lòng xem hướng dẫn gỡ lỗi tuyệt vời và báo cáo lại.
Fabian Blechschmidt

Tôi chưa sử dụng nhật ký trước đây. Tôi đã kích hoạt chúng ngay bây giờ và ngoại lệ.log đang hiển thị:exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Stephen Cuối

Tôi đã cập nhật tên mô-đun phù hợp với câu trả lời khác ở đây, do đó tên loại khối (CLHomePage -> Trang chủ).
Stephen

Câu trả lời:


11

Tôi thấy toàn bộ điều XML khó khăn nên tôi đồng cảm với nguyên nhân của bạn ở đây.

Đối với tôi có vẻ như có sự khác biệt với tên lớp và XML khối của bạn

I E

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>

Hãy bắt đầu với loại khối và làm việc lạc hậu. Tôi nghĩ ở đây tôi sẽ mong đợi để xem một cái gì đó như

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

kiểu đó sẽ giới thiệu Magento đến lớp

Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template

Tiếp tục hoạt động lạc hậu trên chiến thuật này, ứng dụng tệp \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml sẽ cần phải được sửa đổi thành một cái gì đó như

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

Nó trỏ Magento tới tất cả các lớp bắt đầu 'Crusader_Home_Block_ *'. Và bây giờ tôi nghĩ bạn cần đổi tên mô-đun Crusader_Home thay vì Crusader_CLHomePage và thay đổi tên thư mục cho phù hợp ...

VÀ / NHƯNG tôi khuyên bạn nên thay đổi tên mô-đun của mình. Chỉ bao giờ sử dụng một chữ cái viết hoa ở đầu tên mô-đun chứ không phải ba và không đặt chữ in hoa ở giữa tên.

Bạn có thể muốn xem xét một số công cụ có sẵn để tạo mô-đun. Tôi thấy chúng rất hữu ích để tránh lỗi đánh máy. Tôi sử dụng cái này bởi những người rất thông minh tại MGT Commerce (nó có sự đơn giản về phía nó) và cái này hoàn toàn bao quát và là một phần mã hóa đáng kinh ngạc của Silk Software .

*** EDIT theo ý kiến ​​dưới đây

Ngoài ra, dựa trên nhật ký lỗi, tôi nghĩ vấn đề là Magento không thể tìm thấy tệp lớp của bạn. Vì vậy, hãy kiểm tra kỹ các bộ đệm được làm mới hoặc tắt, đặc biệt là bộ đệm XML và trình biên dịch đã tắt hoặc bật lại .


cảm ơn, tôi đã thử đề xuất của bạn Tôi đã đổi tên mô-đun của mình thành 'Trang chủ' và cập nhật tất cả các tài liệu tham khảo và thư mục. Vẫn không hoạt động. Tôi sẽ chỉnh sửa câu hỏi của tôi để hiển thị các thay đổi.
Stephen

1
Có vẻ tốt hơn chắc chắn. Tôi tự hỏi nếu vẫn còn một lỗi đánh máy lén lút ở đâu đó. Dựa trên nhật ký lỗi tôi nghĩ vấn đề là Magento không thể tìm thấy tệp lớp của bạn. Vì vậy, kiểm tra lại bộ nhớ cache được làm mới hoặc tắt đặc biệt. Bộ đệm XML và trình biên dịch tắt hoặc bật lại. Nó sẽ không phải là một vấn đề cho phép tập tin?
Malachy

1
Bạn đã đề cập đến từ ma thuật - Trước đó ... Tôi đã vô hiệu hóa trình biên dịch và nó dường như hoạt động ngay bây giờ. Cảm ơn bạn! Nếu bạn thêm nó như một câu trả lời tôi sẽ chấp nhận nó cho bạn! :-)
Stephen

Trên thực tế, nó không chỉ là trình biên dịch. XML gốc của bạn <block type="crusaderhome/qwerty"không chính xác. Giải pháp là cả hai) sửa lại XML b) biên dịch lại
Malachy

-1

trả lời câu hỏi của bạn ở nơi đầu tiên

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

nên được thay thế bởi

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

bởi vì nhà không phải là con của trang chủ. Tôi nghĩ rằng điều này sẽ làm việc.


Cảm ơn! Tôi đã thử điều đó trước đây mà không có may mắn. Điều cha mẹ / con hoạt động tốt khi loại khối là lõi / mẫu (chứ không phải loại khối tùy chỉnh của tôi) vì vậy vấn đề của tôi không phải là vị trí khối.
Stephen

-1

Tôi đã gặp vấn đề tương tự và giải quyết nó bằng cách thay thế đoạn mã sau trong config.xml

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

đến đây

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

Nó sẽ giải quyết vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.