Khối tùy chỉnh Loại khối không hợp lệ


7

Tôi có một Khối tùy chỉnh mà hiện tại tôi đang cố gắng chia thành hai khối riêng biệt.

Đây là cấu trúc thư mục của tôi (trên ứng dụng / mã / cục bộ / MyNamespace / CustomerDashboard):

nhập mô tả hình ảnh ở đây

Vì tôi muốn chia các chức năng của mô-đun này thành hai phần nhỏ hơn, tôi đã thêm các tệp MyMenu.phptrên thư mục Chặn và MyMenuController.phpvào bộ điều khiển.

Sau đó, tôi chỉ cần sao chép / dán mã từ Deliverydetails.phpvào MyMenu.phpDeliverydetailsController.phpvào MyMenuController.phpđể xem nó có hoạt động không.

Tôi đã đi vào tệp local.xml của mình và thêm tham chiếu vào mô-đun của mình và mẫu của nó:

<reference name="left">
        <block type="customerdashboard/mymenu" name="customerdashboard.mymenu" template="customer/form/my-menu.phtml"/>
    </reference>

Khi tôi truy cập trang mà tôi sẽ thấy nội dung, không có gì ở nơi cần mô-đun, nhưng tôi đã đi kiểm tra các ngoại lệ.log và tìm thấy điều này:

exception 'Mage_Core_Exception' with message 'Invalid block type: MyNamespace_CustomerDashboard_Block_Mymenu' in /var/www/html/mysite/public_html/app/Mage.php:595
Stack trace:
#0 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(495): Mage::throwException('Invalid block type...')
#1 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(437): Mage_Core_Model_Layout->_getBlockInstance('customerdashboa...', Array)
#2 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(472): Mage_Core_Model_Layout->createBlock('customerdashboa...', 'customerdashboa...')
#3 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(239): Mage_Core_Model_Layout->addBlock('customerdashboa...', 'customerdashboa...')
#4 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(205): Mage_Core_Model_Layout->_generateBlock(Object(Mage_Core_Model_Layout_Element), Object(Mage_Core_Model_Layout_Element))
#5 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(210): Mage_Core_Model_Layout->generateBlocks(Object(Mage_Core_Model_Layout_Element))
#6 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(344): Mage_Core_Model_Layout->generateBlocks()
#7 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(269): Mage_Core_Controller_Varien_Action->generateLayoutBlocks()
#8 /var/www/html/mysite/public_html/app/code/core/Mage/Customer/controllers/AccountController.php(107): Mage_Core_Controller_Varien_Action->loadLayout()
#9 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Customer_AccountController->indexAction()
#10 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('index')
#11 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#12 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#13 /var/www/html/mysite/public_html/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#14 /var/www/html/mysite/public_html/index.php(93): Mage::run('', 'store')
#15 {main}

Tôi đã không chạm vào tệp config.xml của mình hoặc bất kỳ thứ gì khác ngoài hai tệp tôi đã đề cập (và chỉ để loại bỏ chức năng mà tôi không muốn trong khối cụ thể này) và đây là tệp configconfig của tôi:

<?xml version="1.0"?>
<config>
    <modules>
        <MyNamespace_CustomerDashboard>
                <version>0.1.1</version>
        </MyNamespace_CustomerDashboard>
    </modules>   

    <global>
        <helpers>
            <customerdashboard>
                <class>MyNamespace_CustomerDashboard_Helper</class>
            </customerdashboard>
        </helpers>
        <blocks>
            <customerdashboard>
                <class>MyNamespace_CustomerDashboard_Block</class>
            </customerdashboard>
        </blocks>
        <sales>
            <order>
                <states>
                    <invoiced translate="label">
                        <label>Invoiced</label>
                        <statuses>
                            <invoced default="1"/>
                        </statuses>
                        <visible_on_front>1</visible_on_front>
                    </invoiced>
                </states>
            </order>
        </sales>
    </global>

    <frontend>
        <routers>
            <customerdashboard>
                <use>standard</use>
                <args>
                    <module>MyNamespace_CustomerDashboard</module>
                    <frontName>customerdashboard</frontName>
                </args>
            </customerdashboard>
        </routers>  
    </frontend>     

</config>

Tôi đã đọc các chủ đề khác về vấn đề này ở đây trên StackExchange nhưng không có bất kỳ manh mối nào về vấn đề có thể là gì.

Vì vậy, tôi đang làm gì sai mà tôi không thể khiến khối của mình hiển thị và tôi đang gặp lỗi đó trên các ngoại lệ của mình.log? Ngoài ra, tôi là một người mới Magento.

Câu trả lời:


8

Theo như magento, file/foldertên sau Block,Model,Helper foldernên start with Uppercasevà chỉ contain one uppercase for each folder and files.

Theo magentotên tập tin là Mymenuthay vì MyMenu.

Tên lớp nên MyNamespace_CustomerDashboard_Block_Mymenu


Chà, tôi phải thừa nhận rằng tôi không biết điều đó cũng không nghĩ rằng điều đó sẽ quan trọng! Cũng phát hiện ra. Các khối bây giờ chắc chắn ở đó. Mặc dù không có nội dung nào hiển thị, nhưng theblock vẫn ở đó .. (chưa thể nâng cấp bạn vì rep :()
Zed_Blade

Ngoài ra, cần phải kiểm tra tên lớp giống như .... Mymothy
Amit Bera

Tôi đã làm điều đó một khi bạn đề cập đến sự khác biệt giữa phong cách của tôi và phong cách của megento. Cả trên bộ điều khiển và trên Khối. Tôi đang kiểm tra xem điều gì khác có thể là vấn đề
Zed_Blade

cập nhật câu trả lời xin vui lòng kiểm tra
Amit Bera

câu trả lời rất hữu ích tuyệt vời :)
Suneth Kalhara

2

Lỗi của bạn nói, nó không thể tìm thấy khối MyNamespace_CustomerDashboard_Block_Mymenu. Theo gợi ý này, lớp khối của bạn nên ở app\code\local\MyNamespace\CustomerDashboard\Block\Mymenu.php. Xin lưu ý bạn có MyMenu.php. Nó phải Mymenu.php. Ngoài ra bạn cần đảm bảo tên lớp là MyNamespace_CustomerDashboard_Block_Mymenu.

hoặc là

bạn có thể tránh lỗi này bằng cách thay đổi local.xmlbản cập nhật của bạn . Nó sẽ giống như thế này.

<reference name="left">
    <block type="customerdashboard/myMenu" name="customerdashboard.mymenu" template="customer/form/my-menu.phtml"/>
</reference>

Xem loại bây giờ chúng tôi đang sử dụng. Nó là customerdashboard/myMenuthay vì customerdashboard/mymenu. Bây giờ loại này sẽ đề cập đến lớp khối MyNamespace_CustomerDashboard_Block_MyMenu. Bằng cách này, khối của bạn sẽ được Magento thu lại và vấn đề sẽ được giải quyết

Lưu ý: Đừng quên xóa bộ nhớ cache.


0

Trong một số trường hợp (Magento 1.9), nếu chúng tôi quên sử dụng hàm xây dựng trong tệp PHP khối thì hãy đặt nó và vấn đề sẽ được khắc phục:

 protected function _construct()
    {
        parent::_construct();
    }
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.