Magento 2 thêm nút bổ sung trong phụ trợ


7

Tôi muốn thêm một nút khác trong phần phụ trợ trên giao diện chỉnh sửa trang cms. Vì vậy, tôi đã tạo một mô-đun (với sự trợ giúp của: https://community.magento.com/t5/Programming-Questions/Overriding-a-block-in-Magento-2/mp/6831 ):

ứng dụng / mã / Công ty / Modulename / etc / module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Company_Modulename" schema_version="0.0.1" setup_version="0.0.1">
        <sequence>
            <module name="Magento_Cms" />
        </sequence>
    </module>
</config>

ứng dụng / mã / Công ty / Modulename / etc / di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
    <preference for="Magento\Cms\Block\Adminhtml\Page\Edit" type="Company\Modulename\Block\Adminhtml\Page\Edit" />
</config>

ứng dụng / mã / Công ty / Modulename / Chặn / adminhtml / Trang / Edit.php

<?php
namespace Company\Modulename\Block\Adminhtml\Page;

class Edit extends Magento\Cms\Block\Adminhtml\Page\Edit {

    protected function _construct()
    {
        parent::_construct();

        $this->buttonList->add('Test',[
            'label' => __('Test')
        ]);
    }
}

Và thêm nó vào tập tin app / etc / config.php :'Company_Modulename' => 1

Nhưng điều này cho tôi một lỗi: Fatal error: Class 'Company\Modulename\Block\Adminhtml\Page\Magento\Cms\Block\Adminhtml\Page\Edit' not found in C:\git-projects\magento2\app\code\Company\Modulename\Block\Adminhtml\Page\Edit.php on line 4

Tôi có cần tham chiếu đến cái gì khác không, vì tệp ứng dụng / code / Magento / Cms / Block / adminhtml / Page / Edit.php bắt đầu bằng:

namespace Magento\Cms\Block\Adminhtml\Page;
class Edit extends \Magento\Backend\Block\Widget\Form\Container

Và đây có phải là cách sạch nhất để thực hiện điều này trong Magento 2?

Câu trả lời:


5

Vấn đề là Magento\Cms\Block\Adminhtml\Page\Edit {sử dụng không gian tên mà bạn đã khai báo Magento\Cms\Block\Adminhtml\Page\Editđể trở thànhCompany\Modulename\Block\Adminhtml\Page\Magento\Cms\Block\Adminhtml\Page\Edit

Bạn thiếu một \ từ phía trước của lớp mở rộng để nó không sử dụng không gian tên hiện tại - sau đó bạn nên có

class Edit extends \Magento\Cms\Block\Adminhtml\Page\Edit {

Điều đó sửa lỗi - nhưng vẫn có thể có một cách tốt hơn để làm điều này.


Chỉ cần bỏ lỡ một dấu gạch chéo ngược, cảm ơn bạn! Bất kỳ đề xuất để làm điều này một cách tốt hơn đều được chào đón!
Roy

4

Tốt hơn là sử dụng plugin thay vì khai báo ưu tiên trong trường hợp của bạn. Lợi ích chính là sẽ không có xung đột nếu một tiện ích mở rộng khác sẽ cố gắng sửa đổi / mở rộng chức năng tương tự. Hãy nhớ rằng chỉ có thể có một ưu tiên hoạt động cho mỗi lớp / giao diện, mức độ ưu tiên được xác định theo trình tự trong mô- đun được hợp nhất cuối cùng

Tùy chọn nên được sử dụng khi có nhu cầu cung cấp tùy chỉnh thực hiện giao diện cốt lõi.


Cái đó nhìn đẹp đó! Tôi sẽ đào sâu vào đó. Cảm ơn!
Roy

3

Có thể được thực hiện với một plugin khi \Magento\Cms\Block\Adminhtml\Page\Editsử dụng beforeSetLayoutvì có trong \ Magento \ Backend \ Block \ Widget \ Container này:

protected function _prepareLayout()
{
    $this->toolbar->pushButtons($this, $this->buttonList);
    return parent::_prepareLayout();
}

Trong phương pháp beforeSetLayoutsử dụng $subject->addButton().

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.