Maison > Questions et réponses > le corps du texte
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粉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