Shopware 6 Plugin: So entfernen Sie die boolesche Konfiguration und migrieren sie zur Multi-Select-Konfiguration
P粉412533525
P粉412533525 2024-04-03 23:09:28
0
1
568

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

  • Keine
  • 0 Sterne
  • 1 Stern
  • 2 Sterne
  • 3 Sterne
  • 4 Sterne
  • 5 Sterne

So migrieren Sie die Daten in meiner Update-Methode korrekt:

  • falsche Karten zu Keine
  • True zugeordnet zu 0 Sternen

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粉412533525
P粉412533525

Antworte allen(1)
P粉418214279

如果我理解正确,您应该首先更改更新方法,您可以检查旧的布尔配置是 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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage