Magento 2 Как переопределить защищенную функцию в абстрактном классе?

Я хочу переопределить защищенную функцию абстрактного класса в magento2

вот мой код

di.xml

<?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\Sales\Model\Order\Pdf\AbstractPdf" type="Custom\Sales\Model\Order\Pdf\AbstractPdf" />
</config>

AbstractPdf.php (Пользовательский / Sales / Model / Order / Pdf / AbstractPdf.php)

<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/

// @codingStandardsIgnoreFile

namespace Custom\Sales\Model\Order\Pdf;

// use Magento\Eav\Model\Entity\Attribute as EntityAttribute;
// use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
// use Magento\Framework\DB\Select;
// use Magento\Framework\Model\AbstractModel;
// use Magento\Framework\App\Filesystem\DirectoryList;
// use Magento\Framework\DataObject;

/**
* Sales Order PDF abstract model
* @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
*/
class AbstractPdf extends \Magento\Sales\Model\Order\Pdf\AbstractPdf
{

/**
* Insert logo to pdf page
*
* @param \Zend_Pdf_Page &$page
* @param null $store
* @return void
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
*/
protected function insertLogo(&$page, $store = null)
{
echo "override";die;
}

}

Я переопределил базовую модель вышеупомянутым файлом, но я не могу получить решение.

Пожалуйста, помогите мне решить это.

1

Решение

Вы не можете переопределить защищенную функцию. Однако вы можете переопределить открытый метод, который вызывает этот защищенный метод. В моем случае мне нужно было переопределить метод, называемый insertLogo, Однако этот защищенный метод я не смог переопределить. Поэтому я переопределяю Invoice.php, который вызывал insertLogo в getPdf метод. В том же файле я переопределил код для insertLogo

ОБНОВИТЬ

Вот файл

app/code/Vendor/Modulename/Model/Order/Pdf/Invoice.php

Код

namespace Vendor\Modulename\Model\Order\Pdf;
class Invoice extends \Magento\Sales\Model\Order\Pdf\Invoice
{
public function getPdf($invoices = [])
{
//some code

$order = $invoice->getOrder();
/* Add image */
//$this->insertLogo($page, $invoice->getStore());
/* Calling custom function*/
$this->insertLogoCustom($page, $invoice->getStore());
/* Add address */
$this->insertAddress($page, $invoice->getStore());

//some more code

return $pdf;
}
protected function insertLogoCustom(&$page, $store = null)
{
$this->y = $this->y ? $this->y : 815;
$image = $this->_scopeConfig->getValue(
'sales/identity/logo',
\Magento\Store\Model\ScopeInterface::SCOPE_STORE,
$store
);
if ($image) {
$imagePath = '/sales/store/logo/' . $image;
if ($this->_mediaDirectory->isFile($imagePath)) {
$image = \Zend_Pdf_Image::imageWithPath($this->_mediaDirectory->getAbsolutePath($imagePath));
$top = 830;
//top border of the page
$widthLimit = 270;
//half of the page width
$heightLimit = 270;
//assuming the image is not a "skyscraper"/* Modified this code to convert pixel in points */
$width = $image->getPixelWidth()* 72 / 96;
$height = $image->getPixelHeight()* 72 / 96;

//preserving aspect ratio (proportions)
$ratio = $width / $height;

if ($ratio > 1 && $width > $widthLimit) {
$width = $widthLimit;
$height = $width / $ratio;
} elseif ($ratio < 1 && $height > $heightLimit) {
$height = $heightLimit;
$width = $height * $ratio;
} elseif ($ratio == 1 && $height > $heightLimit) {
$height = $heightLimit;
$width = $widthLimit;
}

$y1 = $top - $height;
$y2 = $top;
$x1 = 25;
$x2 = $x1 + $width;//coordinates after transformation are rounded by Zend
$page->drawImage($image, $x1, $y1, $x2, $y2);

$this->y = $y1 - 10;
}
}
}

}

Надеюсь, поможет!

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector