Comment remplacer une méthode statique dans Magento2

11

Les intercepteurs de plug-in et la substitution avec préférence ne fonctionnent pas sur les méthodes statiques.

Besoin de remplacer la méthode getOptionArray dans Magento \ Catalog \ Model \ Product \ Visibility pour renvoyer une visibilité personnalisée

/**
     * 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')
        ];
    }

De toute autre manière, cela peut-il être réalisé?

user3339988
la source
Non, je demande comment ajouter une nouvelle option de visibilité. Le tableau getOption étant une méthode statique ne peut pas être modifié avec des intercepteurs ou des préférences.
user3339988
Désolé, j'ai marqué une mauvaise question. Celui-ci devrait vous aider magento.stackexchange.com/questions/134386/…
PY Yick
Celui-là ne répond pas à ma question.
user3339988
N'importe qui? je suis coincé avec ça depuis 2-3 jours. Une autre façon d'ajouter une option de visibilité?
user3339988

Réponses:

1

Le remplacement uniquement getOptionArray()n'est pas suffisant, car si vous voyez dans Magento \ Catalog \ Model \ Product \ Visibility à la ligne 107, 120 et 134, getOptionArray()est appelé avec self.Self appellera toujours la méthode d'origine plutôt que la nouvelle, vous devez donc simplement copier et collez getAllOption(), getAllOptions()et getOptionText()dans votre classe de modèle remplacée (identique à celle que vous avez remplacée getOptionArray())

Abdul Pathan
la source