Ich möchte eine weitere Schaltfläche im Backend der Bearbeitungsansicht der CMS-Seite hinzufügen. Also habe ich ein Modul erstellt (mit Hilfe von: https://community.magento.com/t5/Programming-Questions/Overriding-a-block-in-Magento-2/mp/6831 ):
app / code / Company / Modulname / 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>
app / code / Firma / Modulname / 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>
app / code / Firma / Modulname / Block / Adminhtml / Page / 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')
]);
}
}
Und fügte es der Datei app / etc / config.php hinzu :'Company_Modulename' => 1
Aber das gibt mir einen Fehler:
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
Muss ich auf etwas anderes verweisen, da die Datei app / code / Magento / Cms / Block / Adminhtml / Page / Edit.php mit Folgendem beginnt:
namespace Magento\Cms\Block\Adminhtml\Page;
class Edit extends \Magento\Backend\Block\Widget\Form\Container
Und ist dies der sauberste Weg, dies in Magento 2 zu erreichen?
Es ist besser, Plugins zu verwenden, als in Ihrem Fall die Präferenz zu deklarieren. Der Hauptvorteil besteht darin, dass es keine Konflikte gibt, wenn eine andere Erweiterung versucht, dieselbe Funktionalität zu ändern / zu erweitern. Beachten Sie, dass es für jede Klasse / Schnittstelle nur eine aktive Präferenz geben kann. Die Priorität wird gemäß der Reihenfolge in der endgültigen zusammengeführten module.xml definiert
Einstellungen sollten verwendet werden, wenn eine benutzerdefinierte Implementierung der Kernschnittstelle erforderlich ist.
quelle
Kann mit einem Plugin durchgeführt
\Magento\Cms\Block\Adminhtml\Page\Edit
werden,beforeSetLayout
da sich in \ Magento \ Backend \ Block \ Widget \ Container Folgendes befindet:In der Methode
beforeSetLayout
verwenden$subject->addButton()
.quelle