Maison  >  Questions et réponses  >  le corps du texte

Plugin Shopware 6 : Comment supprimer la configuration booléenne et la migrer vers une configuration à sélection multiple

J'ai un plugin Shopware 6 actuellement configuré avec une valeur booléenne reviewSkipModeration qui publie automatiquement tout avis soumis via le plugin :

config.xml

<input-field type="bool">
  <name>reviewSkipModeration</name>
  <label>Accept reviews automatically</label>
  <defaultValue>true</defaultValue>
</input-field>

La version actuelle de ce plugin est la 1.7.2. Dans la nouvelle version 1.7.3, je souhaite supprimer reviewSkipModeration 布尔配置并添加新的 autoPublishStars la configuration booléenne et ajouter une nouvelle configuration à sélection multiple autoPublishStars :

config.xml

        <input-field type="single-select">
            <name>autoPublishStars</name>
            <label>Auto Publish review with stars</label>
            <label lang="de-DE">Sterne vorausgewählt</label>
            <defaultValue>0</defaultValue>
            <options>
                <option>
                    <id>None</id>
                    <name>None</name>
                    <name lang="de-DE">None</name>
                </option>
                <option>
                    <id>0</id>
                    <name>0 Stars</name>
                    <name lang="de-DE">0 Stars</name>
                </option>
                <option>
                    <id>1</id>
                    <name>1 Star</name>
                    <name lang="de-DE">1 Stern</name>
                </option>
                <option>
                    <id>2</id>
                    <name>2 Stars</name>
                    <name lang="de-DE">2 Sterne</name>
                </option>
                <option>
                    <id>3</id>
                    <name>3 Stars</name>
                    <name lang="de-DE">3 Sterne</name>
                </option>
                <option>
                    <id>4</id>
                    <name>4 Stars</name>
                    <name lang="de-DE">4 Sterne</name>
                </option>
                <option>
                    <id>5</id>
                    <name>5 Stars</name>
                    <name lang="de-DE">5 Sterne</name>
                </option>
            </options>
        </input-field>    

La logique actuelle est implémentée dans le contrôleur. Puisque je souhaite supprimer la nouvelle version de if (!$this->config->getReviewSkipModeration()) {...}, quelles modifications doivent être apportées au contrôleur ? :

            $commentStatus = true;
            
            if($reviewPoints < $this->config->getAutoPublishStars()){
                $commentStatus = !$commentStatus;
            }
            
            if (!$this->config->getReviewSkipModeration()) {
                $commentStatus = false;
            }

            $create = [
                'productId' => $sArticleId,
                'customerId' => $customer->getCustomerId(),
                'salesChannelId' => $salesChannelContext->getSalesChannel()->getId(),
                'languageId' => $salesChannelContext->getContext()->getLanguageId(),
                'externalUser' => $this->anonymizeName($isAnon, $customer),
                'externalEmail' => $orderNumberAsEmail,
                'title' => $commentHeadline,
                'content' => $commentContent,
                'points' => $reviewPoints,
                'status' => $commentStatus,
            ];

Je souhaite migrer la fonctionnalité de configuration booléenne vers la nouvelle version, éviter de changer le comportement par défaut des utilisateurs existants lors des mises à jour vers une configuration multi-sélection avec les options suivantes. Comment utiliser « Aucun » dans config.xml pour le contrôleur ? Puis-je accéder à l'option « Aucun » de la même manière que j'accède à « 0 » dans le contrôleur ? :

Dans ma méthode de mise à jour, comment migrer correctement les données :

Ma fonction de mise à jour du plug-in est la suivante :

    public function update(UpdateContext $context): void {
        parent::update($context);
    }

Mais je ne sais pas comment gérer la cartographie. Toute aide serait grandement appréciée !

P粉412533525P粉412533525180 Il y a quelques jours426

répondre à tous(1)je répondrai

  • P粉418214279

    P粉4182142792024-04-04 18:59:42

    Si j'ai bien compris, vous devez d'abord changer la méthode de mise à jour, vous pouvez vérifier si l'ancienne configuration booléenne est vraie ou fausse puis la mapper à la nouvelle configuration à sélection multiple correspondante

    public function update(UpdateContext $context): void
    {
        parent::update($context);
    
        $previousConfigVal = $this->config->getReviewSkipModeration();
        $newConfigVal = $previousConfigVal ? 0 : 'None';
     
        $this->config->setAutoPublishStars($newConfigVal);
    }

    Ensuite, si vous utilisez PHP 8, vous pouvez utiliser un simple [switch][1] ou [match][2] pour obtenir différentes options

    $autoPublishStars = $this->config->getAutoPublishStars();
    switch ($autoPublishStars) {
        case 'None':
            $commentStatus = false;
            break;
        case '0':
            $commentStatus = false;
            break;
        case '1':
            $commentStatus = ($reviewPoints >= 1);
            break;
        case '2':
            $commentStatus = ($reviewPoints >= 2);
            break;
        case '3':
            $commentStatus = ($reviewPoints >= 3);
            break;
        case '4':
            $commentStatus = ($reviewPoints >= 4);
            break;
        case '5':
            $commentStatus = ($reviewPoints >= 5);
            break;
        default:
            $commentStatus = true;
     }

    Je pense que cela pourrait fonctionner pour vous, sinon nous pouvons réfléchir ensemble pour trouver une solution [1] : https://www.php.net/manual/ fr/control-structs.switch.php [2] : https://www.php.net/manual/en/control-structs.match.php

    répondre
    0
  • Annulerrépondre