Shopware 6 外掛程式:如何刪除布林配置並將其遷移到多選配置
P粉412533525
P粉412533525 2024-04-03 23:09:28
0
1
497

我有一個 Shopware 6 插件,目前使用布林配置 reviewSkipModeration 值,該值自動發布透過插件提交的任何評論:

config.xml

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

該插件的目前版本是1.7.2。在新版本1.7.3中,我想刪除 reviewSkipModeration 布林配置並新增新的 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>    

目前的邏輯是在控制器中實現的。因為我想刪除新版本的 if (!$this->config->getReviewSkipModeration()) {...} 控制器中應該進行哪些更改? :

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

我希望將布林配置功能遷移到新版本,避免在更新期間更改現有使用者的預設行為到具有以下選項的多選配置。如何使用 config.xml 中的「None」到控制器?我可以像在控制器中存取“0”一樣存取“無”選項嗎? :

  • 0 星星
  • 1 星
  • 2 星星
  • 3 星
  • 4 星
  • 5 星

在我的更新方法中,如何正確遷移資料:

  • false 映射到 None
  • 真實對應到 0 星

我的外掛程式更新功能如下:

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

但我不確定如何處理映射。如有任何幫助,我們將不勝感激!

P粉412533525
P粉412533525

全部回覆(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

#
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!