cari

Rumah  >  Soal Jawab  >  teks badan

Pemalam Shopware 6: Cara mengalih keluar konfigurasi boolean dan memindahkannya ke konfigurasi berbilang pilih

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

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

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粉412533525P粉412533525235 hari yang lalu534

membalas semua(1)saya akan balas

  • P粉418214279

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

    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

    balas
    0
  • Batalbalas