Ошибка после перехода на php 8.2 в доставках и местоположениях

RSS
Ошибка после перехода на php 8.2 в доставках и местоположениях, Завис в ошибке при переходе на 8.2
 
Приветствую Михаил и всех пользователей, прошу помочь, как можно победить эту ошибку?
Код
Fatal error: Declaration of MyPaySystemRestriction::extractParams(Bitrix\Sale\Payment $payment) must be compatible with Bitrix\Sale\Services\Base\Restriction::extractParams(Bitrix\Sale\Internals\Entity $entity) in /home/gotovo/fm.gotovo.site/local/php_interface/include/mypayrestriction.php on line 21
[ErrorException] E_COMPILE_ERROR
Declaration of MyPaySystemRestriction::extractParams(Bitrix\Sale\Payment $payment) must be compatible with Bitrix\Sale\Services\Base\Restriction::extractParams(Bitrix\Sale\Internals\Entity $entity) (0)
/home/gotovo/fm.gotovo.site/local/php_interface/include/mypayrestriction.php:21

В init.php

Код
Bitrix\Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'onSalePaySystemRestrictionsClassNamesBuildList',
    'myPayFunction'
);

function myPayFunction()
{
    return new \Bitrix\Main\EventResult(
        \Bitrix\Main\EventResult::SUCCESS,
        array(
            '\MyPaySystemRestriction' => '/local/php_interface/include/mypayrestriction.php',
        )
    );
}

В mypayrestriction.php
Код
use \Bitrix\Sale\Services\Base;
use \Bitrix\Sale\Internals\Entity;

class MyPaySystemRestriction extends Base\Restriction
{
    public static function getClassTitle()
    {
        return 'ограничение по наличию';
    }

    public static function getClassDescription()
    {
        return 'оплата онлайн будет доступна только если товар в наличии';
    }



    protected static function extractParams(Bitrix\Sale\Payment $payment)
    {
        
        $obBasket = \Bitrix\Sale\Basket::getList(array('filter' => array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "ORDER_ID" => "NULL")));
        CModule::IncludeModule('iblock');
        while($bItem = $obBasket->Fetch()){
            $arSelect = Array("ID", "IBLOCK_ID", "NAME", "CATALOG_QUANTITY");
            $mxResult = CCatalogSku::GetProductInfo($bItem["PRODUCT_ID"]);
            if (is_array($mxResult)) {
                $arFilter = Array("ID"=>$bItem["PRODUCT_ID"], "IBLOCK_ID"=>5);//Указываем ID инфоблока
            } else {
                $arFilter = Array("ID"=>$bItem["PRODUCT_ID"], "IBLOCK_ID"=>4);//Указываем ID инфоблока
            }


            $res = CIBlockElement::GetList(Array("SORT"=>"ASC"), $arFilter, false, Array("nPageSize"=>1), $arSelect);
            while($ob = $res->GetNextElement()){
                if ($ob->GetFields()["CATALOG_QUANTITY"] <= 0) {
                    $arFields = true;
                    break;
                }
                
            }
        }

        $nal = true;
        if ($arFields) {
            $nal = false;
        }

        return $nal;
    }

    public static function check($nalich, array $restrictionParams, $PaySystemId = 1)
    {

        if (!$nalich) {
            if ($restrictionParams["MY_PARAM_CHECKBOX"] == 'Y') {
                return false;
            } 
        } else {
            if ($restrictionParams["MY_PARAM_CHECKBOX"] == 'N') {
                return false;
            } 
        }
            

        return true;
    }

    public static function getParamsStructure($entityId = 0)
    {
        return array(
            "MY_PARAM_CHECKBOX" => array(
                'TYPE' => 'Y/N',
                'VALUE' => 'Y',
                'LABEL' => 'Наличие да / нет'
            )
        );
    }
}

Изменено: Михаил Базаров - 09.08.2023 20:16:05 (Конкретизирована задача/ошибка)
 
Кстати ошибка при оформлении заказа.
 
Должно бы вот так заработать, там в битриксе Bitrix\Sale\Services\Base\Restriction стал Bitrix\Sale\Internals\Entity
Но не проверяя подсказываю. Если не поможет надо разбираться подробнее
Код
class MyPaySystemRestriction extends Base\Restriction
{
    // ...

    protected static function extractParams(Base\Internals\Entity $entity)
    {
        $payment = $entity->getPayment();

        // Ваш код обработки параметров платежа

        return $result; // Возвращаем результат обработки
    }

    // ...
}
 
Здравствуйте, Михаил!
У нас точно такое же, только с ограничениями по местоположению в службах доставки.. Помогите, пожалуйста.


Ошибка в чекауте заказа
Код
Fatal error: Declaration of ExclLocationsDeliveryRestriction::extractParams(Bitrix\Sale\Internals\CollectableEntity
  $shipment) must be compatible with Bitrix\Sale\Services\Base\Restriction::extractParams(Bitrix\Sale\Internals\
Entity  $entity) in /home/c/cl88450/public_html/bitrix/php_interface/include/ExclLocationsDeliveryRestriction.php 
on line 44 [ErrorException] E_COMPILE_ERROR Declaration of ExclLocationsDeliveryRestriction::extractParams(Bitrix\
Sale\ Internals\CollectableEntity $shipment) must be compatible with Bitrix\Sale\Services\Base\Restriction:: 
extractParams(Bitrix\Sale\Internals\Entity $entity) (0) /home/c/cl88450/public_html/bitrix/php_interface 
/include/ExclLocationsDeliveryRestriction.php:44 ----------

в init.php ограничения упоминаются в этих строках
Код
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler(
    'sale',
    'onSaleDeliveryRestrictionsClassNamesBuildList',
    'myDeliveryRestrictions' 
);

  function myDeliveryRestrictions()
{
    return new \Bitrix\Main\EventResult(
        \Bitrix\Main\EventResult::SUCCESS,
        array(
            '\ExclLocationsDeliveryRestriction' => '/bitrix/php_interface/include/ExclLocationsDeliveryRestriction.php',
        )
    );
} 
В ExclLocationsDeliveryRestriction.php:
Код
<?
use Bitrix\Sale\Delivery\DeliveryLocationTable,
    Bitrix\Sale\Internals\CollectableEntity,
    Bitrix\Sale\Shipment;

class ExclLocationsDeliveryRestriction extends \Bitrix\Sale\Delivery\Restrictions\Base
{
    public static $easeSort = 200;

    public static function getClassTitle()
    {
        return 'По местоположению (Все, кроме)';
    }

    public static function getClassDescription()
    {
        return 'По местоположению (Все, кроме)';
    }

    public static function check($locationCode, array $restrictionParams, $deliveryId = 0)
    {
        if (intval($deliveryId) <= 0) {
            return true;
        }

        if (strlen($locationCode) <= 0) {
            return false;
        }

        try {
            return !DeliveryLocationTable::checkConnectionExists(
                intval($deliveryId),
                $locationCode,
                array(
                    'LOCATION_LINK_TYPE' => 'AUTO'
                )
            );
        }
        catch(\Bitrix\Sale\Location\Tree\NodeNotFoundException $e) {
            return false;
        }
    }

    protected static function extractParams(CollectableEntity $shipment)
   
    {
        $order = $shipment->getCollection()->getOrder();

        if (!$props = $order->getPropertyCollection()) {
            return '';
        }

        if (!$locationProp = $props->getDeliveryLocation()) {
            return '';
        }

        if (!$locationCode = $locationProp->getValue()) {
            return '';
        }

        return $locationCode;
    } 

    protected static function prepareParamsForSaving(array $params = array(), $deliveryId = 0)
    {
        if ($deliveryId > 0) {
            $arLocation = array();

            if (!!\CSaleLocation::isLocationProEnabled()) {
                if (strlen($params["LOCATION"]['L'])) {
                    $LOCATION1 = explode(':', $params["LOCATION"]['L']);
                }

                if (strlen($params["LOCATION"]['G'])) {
                    $LOCATION2 = explode(':', $params["LOCATION"]['G']);
                }
            }

            if (isset($LOCATION1) && is_array($LOCATION1) && count($LOCATION1) > 0) {
                $arLocation["L"] = array();
                $locationCount = count($LOCATION1);

                for ($i = 0; $i < $locationCount; $i++) {
                    if (strlen($LOCATION1[$i])) {
                        $arLocation["L"][] = $LOCATION1[$i];
                    }
                }
            }

            if (isset($LOCATION2) && is_array($LOCATION2) && count($LOCATION2) > 0) {
                $arLocation["G"] = array();
                $locationCount = count($LOCATION2);

                for ($i = 0; $i < $locationCount; $i++) {
                    if (strlen($LOCATION2[$i])) {
                        $arLocation["G"][] = $LOCATION2[$i];
                    }
                }

            }

            DeliveryLocationTable::resetMultipleForOwner($deliveryId, $arLocation);
        }

        return array();
    }

    public static function getParamsStructure($deliveryId = 0)
    {

        $result =  array(
            "LOCATION" => array(
                "TYPE" => "LOCATION_MULTI"
            ),
        );

        if ($deliveryId > 0) {
            $result["LOCATION"]["DELIVERY_ID"] = $deliveryId;
        }

        return $result;
    }

    public static function save(array $fields, $restrictionId = 0)
    {
        $fields["PARAMS"] = self::prepareParamsForSaving($fields["PARAMS"], $fields["SERVICE_ID"]);

        return parent::save($fields, $restrictionId);
    }

    public static function delete($restrictionId, $deliveryId = 0)
    {
        DeliveryLocationTable::resetMultipleForOwner($deliveryId);

        return parent::delete($restrictionId);
    }
}?>
 
Спросим у нейросети GigaChat  :)

Ошибка, которую вы видите, связана с тем, что сигнатура метода extractParams в классе ExclLocationsDeliveryRestriction не совпадает с сигнатурой метода в базовом классе Bitrix\Sale\Services\Base\Restriction. В базовом классе метод ожидает объект типа Bitrix\Sale\Internals\Entity, а в вашем классе передается объект типа Bitrix\Sale\Internals\CollectableEntity.

Для исправления этой ошибки вам нужно изменить сигнатуру метода extractParams в классе ExclLocationsDeliveryRestriction, чтобы она соответствовала сигнатуре метода в базовом классе. Вот как это можно сделать:
Код
class ExclLocationsDeliveryRestriction extends \Bitrix\Sale\Delivery\Restrictions\Base
{
    // ...

    protected static function extractParams(\Bitrix\Sale\Internals\Entity $entity)
    {
        if ($entity instanceof CollectableEntity) {
            $shipment = $entity;
        } else {
            // Handle other cases if needed
            return '';
        }

        $order = $shipment->getCollection()->getOrder();

        // Your code for extracting params

        return $params; // Return the extracted params
    }

    // ...
}

Здесь вам нужно изменить параметр метода extractParams на \Bitrix\Sale\Internals\Entity, чтобы сигнатура соответствовала ожидаемой в базовом классе. Затем вы можете проверить, что переданный объект $entity является экземпляром класса CollectableEntity, и продолжить обработку параметров в вашем коде.

После внесения этой коррекции ошибка также должна исчезнуть, и ваш класс будет совместим с PHP 8.2.
Изменено: Михаил Базаров - 09.08.2023 11:38:44
 
Действительно, помогло! Спасибо, Михаил!
А могут после этих исправлений случиться ошибки такого плана?
1) в админке не может выйти из заказа, уходит в белый экран и всё
2) проверка системы показывает ошибку -Лишний вывод в файлах конфигурации

[B]Ошибка! Не работает
[/TD][/TR][/TABLE]Описание ошибки: Проверяется вывод текста в файлах конфигурации: dbconn.php и init.php.
Даже пробел или перенос строки может приводить к тому, что с включенной компрессией страница не сможет распаковаться на стороне браузера и будет нечитаема.
Также могут возникнуть проблемы с авторизацией или в работе CAPTCHA.
Подробности в журнале проверки системы

В журнале такое вывелось:
2023-Aug-09 14:24:09 Лишний вывод в файлах конфигурации (check_dbconn): Fail Connection to ssl://lovebabytoys.ru:443 Success == Request == GET /bitrix/admin/site_checker.php?test_type=dbconn_test&unique_id=063989d0529842119890b75e207e­eddf HTTP/1.1 Host: lovebabytoys.ru   == Response == HTTP/1.1 200 OK Server: nginx/1.22.1 Date: Wed, 09 Aug 2023 11:24:09 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 14 Connection: keep-alive P3P: policyref="/bitrix/p3p.xml", CP="NON DSP COR CUR ADM DEV PSA PSD OUR UNR BUS UNI COM NAV INT DEM STA" X-Powered-CMS: Bitrix Site Manager (ba77a60be93f2b27b86efd6aed484f36) Set-Cookie: PHPSESSID=kT0FJ6Y4KpaOcnq9xIkEi4zuZrZt3G5W; path=/; domain=lovebabytoys.ru; HttpOnly Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Set-Cookie: LIVECHAT_GUEST_HASH=39852cd548c05e7313251bc893533945; expires=Thu, 08 Aug 2024 11:24:09 GMT; Max-Age=31536000; path=/  == Body == Length: 2 (  ) ==========  Ошибка! Не работает


Капчей на сайте нет, что ему не живётся..
Изменено: Михаил Базаров - 09.08.2023 20:10:52 (Удалил ссылку на сайт)
 
У вас и того кто начал эту тему нечто не стандартное в обработчиках. Очень тяжело помогать в режиме форума, не понимая всей картины.
Не то что бы нейросети помогают во всех вопросах (чаще нет) но попробуйте решить вопрос с их помощью.  :)
Нужна полная картина того что хотите (или как оно работало), зачем, почему и на какие готовы пойти компромиссы.
Изменено: Михаил Базаров - 09.08.2023 20:09:50
 
Цитата
написал:
$payment = $entity->getPayment();
Теперь такая ошибка
Код
Fatal error: Could not check compatibility between MyPaySystemRestriction::extractParams(Bitrix\Sale\Services\Base\Internals\Entity $entity) and Bitrix\Sale\Services\Base\Restriction::extractParams(Bitrix\Sale\Internals\Entity $entity), because class Bitrix\Sale\Services\Base\Internals\Entity is not available in /home/gotovo/fm.gotovo.site/local/php_interface/include/mypayrestriction.php on line 21
[ErrorException] E_COMPILE_ERROR
Could not check compatibility between MyPaySystemRestriction::extractParams(Bitrix\Sale\Services\Base\Internals\Entity $entity) and Bitrix\Sale\Services\Base\Restriction::extractParams(Bitrix\Sale\Internals\Entity $entity), because class Bitrix\Sale\Services\Base\Internals\Entity is not available (0) /home/gotovo/fm.gotovo.site/local/php_interface/include/mypayrestriction.php:21
В mypayrestriction.php
Код
use \Bitrix\Sale\Services\Base;
use \Bitrix\Sale\Internals\Entity;

class MyPaySystemRestriction extends Base\Restriction
{
    public static function getClassTitle()
    {
        return 'ограничение по наличию';
    }

    public static function getClassDescription()
    {
        return 'оплата онлайн будет доступна только если товар в наличии';
    }



    protected static function extractParams(Base\Internals\Entity $entity)
    {
        $payment = $entity->getPayment();
        $obBasket = \Bitrix\Sale\Basket::getList(array('filter' => array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "ORDER_ID" => "NULL")));
        CModule::IncludeModule('iblock');
        while($bItem = $obBasket->Fetch()){
            $arSelect = Array("ID", "IBLOCK_ID", "NAME", "CATALOG_QUANTITY");
            $mxResult = CCatalogSku::GetProductInfo($bItem["PRODUCT_ID"]);
            if (is_array($mxResult)) {
                $arFilter = Array("ID"=>$bItem["PRODUCT_ID"], "IBLOCK_ID"=>5);//Указываем ID инфоблока
            } else {
                $arFilter = Array("ID"=>$bItem["PRODUCT_ID"], "IBLOCK_ID"=>4);//Указываем ID инфоблока
            }


            $res = CIBlockElement::GetList(Array("SORT"=>"ASC"), $arFilter, false, Array("nPageSize"=>1), $arSelect);
            while($ob = $res->GetNextElement()){
                if ($ob->GetFields()["CATALOG_QUANTITY"] <= 0) {
                    $arFields = true;
                    break;
                }
                
            }
        }

        $nal = true;
        if ($arFields) {
            $nal = false;
        }

        return $nal;
    }

    public static function check($nalich, array $restrictionParams, $PaySystemId = 1)
    {

        if (!$nalich) {
            if ($restrictionParams["MY_PARAM_CHECKBOX"] == 'Y') {
                return false;
            } 
        } else {
            if ($restrictionParams["MY_PARAM_CHECKBOX"] == 'N') {
                return false;
            } 
        }
            

        return true;
    }

    public static function getParamsStructure($entityId = 0)
    {
        return array(
            "MY_PARAM_CHECKBOX" => array(
                'TYPE' => 'Y/N',
                'VALUE' => 'Y',
                'LABEL' => 'Наличие да / нет'
            )
        );
    }
}

 
Гость написал:
Действительно, помогло! Спасибо, Михаил!
А могут после этих исправлений случиться ошибки такого плана?
1) в админке не может выйти из заказа, уходит в белый экран и всё
2) проверка системы показывает ошибку -Лишний вывод в файлах конфигурации

Ошибка! Не работает Описание ошибки:  Проверяется вывод текста в файлах конфигурации: dbconn.php и init.php.
Даже пробел или перенос строки может приводить к тому, что с включенной компрессией страница не сможет распаковаться на стороне браузера и будет нечитаема.
Также могут возникнуть проблемы с авторизацией или в работе CAPTCHA.
Подробности в журнале проверки системы

В журнале такое вывелось:
2023-Aug-09 14:24:09 Лишний вывод в файлах конфигурации (check_dbconn): Fail Connection to ssl://lovebabytoys.ru:443 Success == Request == GET /bitrix/admin/site_checker.php?test_type=dbconn_test&unique_id=063989d0529842119890b75e207e­ ­eddf HTTP/1.1 Host: lovebabytoys.ru   == Response == HTTP/1.1 200 OK Server: nginx/1.22.1 Date: Wed, 09 Aug 2023 11:24:09 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 14 Connection: keep-alive P3P: policyref="/bitrix/p3p.xml", CP="NON DSP COR CUR ADM DEV PSA PSD OUR UNR BUS UNI COM NAV INT DEM STA" X-Powered-CMS: Bitrix Site Manager (ba77a60be93f2b27b86efd6aed484f36) Set-Cookie: PHPSESSID=kT0FJ6Y4KpaOcnq9xIkEi4zuZrZt3G5W; path=/; domain=lovebabytoys.ru; HttpOnly Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Set-Cookie: LIVECHAT_GUEST_HASH=39852cd548c05e7313251bc893533945; expires=Thu, 08 Aug 2024 11:24:09 GMT; Max-Age=31536000; path=/  == Body == Length: 2 (  ) ==========  Ошибка! Не работает


Капчей на сайте нет, что ему не живётся..


Попробуйте проверить файл bx_root.php по пути [B]/bitrix/modules/main/bx_root.php на наличие BOM.

Оригинал со своего ядра. Можете скопировать и вставить, далее еще раз пройти проверку системы. В том числе лишние пробелы и переносы в файлах init.php и dbconn.php
Код
<?php
define("BX_ROOT", "/bitrix");
if (!empty($_SERVER["BX_PERSONAL_ROOT"]))

{

   define("BX_PERSONAL_ROOT", $_SERVER["BX_PERSONAL_ROOT"]);

}

else

{

   define("BX_PERSONAL_ROOT", BX_ROOT);

}

Изменено: Михаил Базаров - 10.08.2023 18:31:33
 
Михаил здравствуйте, вопрос после обновления на странице самого обновления вылетает это
Fatal error: Access level to Bitrix\Main\DB\MysqlConnection::getErrorMessage() must be public (as in class Bitrix\Main\DB\Connection) in /home/c/citrusmix/citrus-mix.ru/public_html/bitrix/modules/main/lib/db/mysqlconnection.php on line 161[ErrorException] E_COMPILE_ERROR Access level to Bitrix\Main\DB\MysqlConnection::getErrorMessage() must be public (as in class Bitrix\Main\DB\Connection) (0) /home/c/citrusmix/citrus-mix.ru/public_html/bitrix/modules/main/lib/db/mysqlconnection.php:161 ----------

куда копать не могу понять
 
Это, думаю, лучше в поддержку битрикс написать. При беглом просмотре: либо у вас в ядре были правки - либо версия php не та
 
Здравствуйте, при переходе с PHP 7.4.33 на PHP 8.3.0 там на сайте есть  как электронные товары, так и физические. Дак вот при оформлении заказа  вылетает ошибка:
Код
[ErrorException] E_COMPILE_ERROR Declaration of OnlyDigitalGoods::extractParams(Bitrix\Sale\Internals\CollectableEntity $shipment)
must be compatible with Bitrix\Sale\Services\Base\Restriction::extractParams(Bitrix\Sale\Internals\Entity $entity) (0)
/local/php_interface/include/Digital/OnlyDigitalGoods.php:111

Вроде  понятно куда копать:  local/php_interface/include/Digital/OnlyDigitalGoods.php:111, там класс  OnlyDigitalGoods , его метод extractParams должен принимать аргументом  тип Bitrix\Sale\Internals\Entity  , а не  Bitrix\Sale\Internals\CollectableEntity. Попробую  для начала поменять и  посмотрите, что получится - вылетает уже другая ошибка:

Код
[Error]  Call to undefined function each() (0)
/bitrix/components/h2o/buyoneclick/class.php:648

Выглядит  так, что  $shipment не наследуется от $entity, либо не может  его  привести к этому типу, а как это побороть я не знаю куда копнуть.

Помогите плиз разобраться, уже вторые сутки бьюсь!!!
 
Насколько знаю, компания h2о больше не выпускает модулей и очень давно.
Расковыряйте их модуль быстрой покупки (ошибка в нем) - видимо, именно он не совместим с php 8
 
Цитата
написал:
Насколько знаю, компания h2о больше не выпускает модулей и очень давно.
Расковыряйте их модуль быстрой покупки (ошибка в нем) - видимо, именно он не совместим с php 8
да  спасибо за помощь, расковырял оказалось что each то из пыхи 8 удалили,  переписал с помощью foreach и все завелось. Но вот возник другой вопрос,  точнее ошибка после многих исправленных, с этой тоже затык, наверное  специфика пыхи 8:
Код
Using $this when not in object context (0)
/bitrix/modules/wsm.reviews/include.php:24

Вот кусочек кода из include.php
Код
<?
global $DBType;

abstract class WSMReviewsBase
{
    private static $arAps = array ('!', '=', '>', '<', '><', '!><', '<=', '>=', '><', '%');
    private $fields = array();
    private $table = '';
    
    abstract public function getTable();
    
    public static function Query($strSql, $errors = false)
    {
        GLOBAL $DB;
        
        if($errors)
            return $DB->Query($strSql, true, $err_mess.__LINE__);
        else
            return $DB->Query($strSql, $errors);
    }

    protected static function GetFields()
    {
        $table = $this->getTable();
        $rsFields = self::Query('SHOW COLUMNS FROM ' . $table);

        while($arFields = $rsFields->Fetch())
            $fields[$arFields['Field']] = $arFields;

        return $fields;
    }

Что не нравится не пойму, вроде
Код
abstract public function getTable();

обращаемся из метода:
Код
protected static function GetFields()

путем:

Код
$this->getTable();

Подскажите плиз знатоки!
Изменено: Михаил Базаров - 09.02.2024 13:06:44
 
Да, теперь нельзя использовать $this в статическом методе.
Как-то так должно заработать, но не проверял:
Сделать GetFields() нестатическим:
Код
protected function GetFields()
{
    $table = $this->getTable();
    $rsFields = self::Query('SHOW COLUMNS FROM ' . $table);

    $fields = array();
    while($arFields = $rsFields->Fetch())
        $fields[$arFields['Field']] = $arFields;

    return $fields;
}

или убрать $this в статическом методе:
Код
protected static function GetFields()
{
    $table = static::getTable(); // Если getTable() также статический
    $rsFields = self::Query('SHOW COLUMNS FROM ' . $table);

    $fields = array();
    while($arFields = $rsFields->Fetch())
        $fields[$arFields['Field']] = $arFields;

    return $fields;
}
Изменено: Михаил Базаров - 09.02.2024 13:12:15
 
Цитата
написал:
Да, теперь нельзя использовать $this в статическом методе.
Как-то так должно заработать, но не проверял:
Спасибо за совет Михаил! По идее прочитал ман по пыхе 8, а точнее раздел абстрактных классов и метод и все что связано с ними, вообще написано, что в абстрактном классе обратится к абстрактному методу из статического метода этого же класса можно с помощью self:: ,но что-то этот метод на пыхе 8.3.0 все равно выдавал ошибку что невозможно вызвать абстрактный метод.

Короче убрал статику в GetFields() все завелось, правда в шаблоне во въюхе компонента пришлось пол шаблона переписать с обращения как статическому метода на не статическое обращение и все завелось. Короче пыха 8 еще раз убеждаюсь в том, что стала работать быстрее дак это потому что контроль за типами данных переложили на разработчиков вот и все прелести!)

Еще раз спасибо за помощь Михаил! Хороший у Вас сайт - оставил в закладках!)
Изменено: Михаил Базаров - 10.02.2024 10:20:07
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить картинки
 
Поблагодарить и поддержать:
Или подписаться на boosty канал: Видео на Ютубе