I am trying to rewrite the behavior of the method: "render" in the class: "vendor/magento/module-config/Block/System/Config/Form/Field.php"
This is my di.xml file:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Config\Block\System\Config\Form\Field" type="Cnnb\GeneralFixes\Block\System\Config\Form\Field"/>
</config>
this is the my new class "Field.php"
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Cnnb\GeneralFixes\Block\System\Config\Form;
use Magento\Framework\App\ObjectManager;
use Magento\Backend\Block\Template\Context;
use Magento\Framework\View\Helper\SecureHtmlRenderer;
/**
* Render field html element in Stores Configuration
*
* @api
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
* @SuppressWarnings(PHPMD.NumberOfChildren)
* @since 100.0.2
*/
class Field extends \Magento\Config\Block\System\Config\Form\Field
{
/**
* @var SecureHtmlRenderer
*/
private $secureRenderer;
/**
* @param Context $context
* @param array $data
* @param SecureHtmlRenderer|null $secureRenderer
*/
public function __construct(
Context $context,
array $data = [],
?SecureHtmlRenderer $secureRenderer = null
) {
parent::__construct($context, $data, $secureRenderer);
}
protected function _renderInheritCheckboxFix(\Magento\Framework\Data\Form\Element\AbstractElement $element)
{
$htmlId = $element->getHtmlId();
$namePrefix = preg_replace('#\[value\](\[\])?$#', '', $element->getName());
$checkedHtml = $element->getInherit() == 1 ? 'checked="checked"' : '';
$disabled = $element->getIsDisableInheritance() == true ? ' disabled="disabled" readonly="1"' : '';
$html = '<td class="use-default">';
$html .= '<input id="' .
$htmlId .
'_inherit" name="' .
$namePrefix .
'[inherit]" type="checkbox" value="1"' .
' class="checkbox config-inherit" ' .
$checkedHtml . $disabled .
' />';
if(!(is_null($this->secureRenderer)))
{
$html .= /* @noEscape */ $this->secureRenderer->renderEventListenerAsTag(
'onclick',
"toggleValueElements(this, Element.previous(this.parentNode))",
'input#' . $htmlId . '_inherit'
);
}
$html .= '<label for="' . $htmlId . '_inherit" class="inherit">' . $this->_getInheritCheckboxLabel(
$element
) . '</label>';
$html .= '</td>';
return $html;
}
/**
* Retrieve HTML markup for given form element
*
* @param \Magento\Framework\Data\Form\Element\AbstractElement $element
* @return string
*/
public function render(\Magento\Framework\Data\Form\Element\AbstractElement $element)
{
echo __FILE__."<br>";
$isCheckboxRequired = $this->_isInheritCheckboxRequired($element);
// Disable element if value is inherited from other scope. Flag has to be set before the value is rendered.
if ($element->getInherit() == 1 && $isCheckboxRequired) {
$element->setDisabled(true);
}
if ($element->getIsDisableInheritance()) {
$element->setReadonly(true);
}
$html = '<td class="label"><label for="' .
$element->getHtmlId() . '"><span' .
$this->_renderScopeLabel($element) . '>' .
$element->getLabel() .
'</span></label></td>';
$html .= $this->_renderValue($element);
if ($isCheckboxRequired) {
$html .= $this->_renderInheritCheckboxFix($element);
}
$html .= $this->_renderHint($element);
return $this->_decorateRowHtml($element, $html);
}
}
in the admin panel (especially in the option: configuration-->sales-->payments), i can see the name of my new class , but not always !!! i see also the behavior of the old class !!!! so my preference in di.xml is not working all the times !!!
Why ??