Pemalam Shopware 6: Cara mengalih keluar konfigurasi boolean dan memindahkannya ke konfigurasi berbilang pilih
P粉412533525
P粉412533525 2024-04-03 23:09:28
0
1
527

Saya mempunyai pemalam Shopware 6 yang kini dikonfigurasikan dengan nilai boolean reviewSkipModeration yang secara automatik menyiarkan sebarang ulasan yang diserahkan melalui pemalam:

config.xml

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

Versi semasa pemalam ini ialah 1.7.2. Dalam versi baharu 1.7.3, saya ingin mengalih keluar reviewSkipModeration 布尔配置并添加新的 autoPublishStars konfigurasi boolean dan menambah autoPublishStars konfigurasi berbilang pilih:

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>    

Logik semasa dilaksanakan dalam pengawal. Memandangkan saya mahu memadamkan versi baharu if (!$this->config->getReviewSkipModeration()) {...} apakah perubahan yang perlu dibuat dalam pengawal? :

            $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,
            ];

Saya ingin memindahkan fungsi konfigurasi boolean kepada versi baharu, elakkan menukar tingkah laku lalai untuk pengguna sedia ada semasa kemas kini ke konfigurasi berbilang pilihan dengan pilihan berikut. Bagaimana untuk menggunakan "Tiada" dalam config.xml kepada pengawal? Bolehkah saya mengakses pilihan "Tiada" dengan cara yang sama saya mengakses "0" dalam pengawal? :

  • Tiada
  • 0 bintang
  • 1 bintang
  • 2 bintang
  • 3 bintang
  • 4 bintang
  • 5 bintang

Dalam kaedah kemas kini saya, cara memindahkan data dengan betul:

  • peta palsu kepada Tiada
  • Benar dipetakan kepada 0 bintang

Fungsi kemas kini plug-in saya adalah seperti berikut:

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

Tetapi saya tidak pasti cara mengendalikan pemetaan. Sebarang bantuan akan sangat dihargai!

P粉412533525
P粉412533525

membalas semua(1)
P粉418214279

Jika saya faham dengan betul, anda harus menukar kaedah kemas kini dahulu, anda boleh menyemak sama ada konfigurasi boolean lama adalah benar atau palsu dan kemudian memetakannya kepada konfigurasi berbilang pilihan baharu yang sepadan

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

    $previousConfigVal = $this->config->getReviewSkipModeration();
    $newConfigVal = $previousConfigVal ? 0 : 'None';
 
    $this->config->setAutoPublishStars($newConfigVal);
}

Selepas itu, jika anda menggunakan PHP 8, anda boleh menggunakan [suis][1] atau [padan][2] mudah untuk mendapatkan pilihan yang berbeza

$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;
 }

Saya rasa ini mungkin berkesan untuk anda, jika tidak kita boleh sumbang saran bersama untuk mencari penyelesaian [1]: https://www.php.net/manual/ fr/control-structs.switch.php [2]: https://www.php.net/manual/ en/control-structs.match.php

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan