Como substituir um método estático no Magento2

11

Os interceptadores de plug-in e a substituição pela preferência não funcionam em métodos estáticos.

É necessário substituir o método getOptionArray no Magento \ Catalog \ Model \ Product \ Visibility para retornar uma visibilidade personalizada

/**
     * Retrieve option array
     *
     * @return array
     */
    public static function getOptionArray()
    {
        return [
            self::VISIBILITY_NOT_VISIBLE => __('Not Visible Individually'),
            self::VISIBILITY_IN_CATALOG => __('Catalog'),
            self::VISIBILITY_IN_SEARCH => __('Search'),
            self::VISIBILITY_BOTH => __('Catalog, Search')
        ];
    }

Existe alguma outra maneira de conseguir isso?

user3339988
fonte
Não. Estou perguntando como adicionar uma nova opção de visibilidade. O array getOption, sendo um método estático, não pode ser modificado com interceptores ou preferência.
user3339988
Desculpe, marquei a pergunta errada. Este deve ajudá-lo magento.stackexchange.com/questions/134386/…
PY Yick
Aquele não responde à minha pergunta.
user3339988
Alguém? eu fiquei preso por isso por 2-3 dias. Alguma maneira alternativa de adicionar opção de visibilidade?
user3339988

Respostas:

1

Substituindo única getOptionArray()não é apenas o suficiente, porque se você vê no Magento \ Catalog \ Modelo \ Product \ Visibilidade na linha 107, 120 e 134, getOptionArray()é chamado com self.Auto sempre chamar o método original em vez de novo, portanto, você precisa simplesmente de cópia e cole getAllOption(), getAllOptions()e getOptionText()em sua classe de modelo substituída (a mesma em que você substituiu getOptionArray())

Abdul Pathan
fonte