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é?


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())

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.