Heim > Fragen und Antworten > Hauptteil
Ich habe derzeit ein Shopware 6-Plugin mit einem booleschen reviewSkipModeration
-Wert konfiguriert, der jede über das Plugin abgegebene Bewertung automatisch veröffentlicht:
config.xml
<input-field type="bool"> <name>reviewSkipModeration</name> <label>Accept reviews automatically</label> <defaultValue>true</defaultValue> </input-field>
Die aktuelle Version dieses Plugins ist 1.7.2. In der neuen Version 1.7.3 möchte ich die reviewSkipModeration
布尔配置并添加新的 autoPublishStars
boolesche Konfiguration entfernen und die neue autoPublishStars
-Mehrfachauswahlkonfiguration hinzufügen:
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>
Die aktuelle Logik ist im Controller implementiert. Da ich die neue Version von if (!$this->config->getReviewSkipModeration()) {...}
löschen möchte, welche Änderungen sollten im Controller vorgenommen werden? :
$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, ];
Ich möchte die boolesche Konfigurationsfunktionalität auf die neue Version migrieren, das Standardverhalten für bestehende Benutzer bei Aktualisierungen nicht ändern auf eine Mehrfachauswahlkonfiguration mit den folgenden Optionen. Wie verwende ich „None“ in config.xml für den Controller? Kann ich auf die Option „Keine“ auf die gleiche Weise zugreifen, wie ich auf „0“ im Controller zugreife? :
So migrieren Sie die Daten in meiner Update-Methode korrekt:
Meine Plug-in-Update-Funktion ist wie folgt:
public function update(UpdateContext $context): void { parent::update($context); }
Aber ich bin mir nicht sicher, wie ich mit der Zuordnung umgehen soll. Jede Hilfe wäre sehr dankbar!
P粉4182142792024-04-04 18:59:42
如果我理解正确,您应该首先更改更新方法,您可以检查旧的布尔配置是 true 还是 false,然后将其映射到相应的新多选配置
public function update(UpdateContext $context): void { parent::update($context); $previousConfigVal = $this->config->getReviewSkipModeration(); $newConfigVal = $previousConfigVal ? 0 : 'None'; $this->config->setAutoPublishStars($newConfigVal); }
之后,如果您使用 PHP 8,则可以使用简单的 [switch][1] 或 [match][2] 来获得不同的选项
$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; }
我认为这可能真的对你有用,如果没有的话我们可以一起集思广益找到解决方案 [1]: https://www.php.net/manual/ fr/control-structs.switch.php [2]: https://www.php.net/manual/ en/control-structs.match.php