簡體   English   中英

如何通過 JavaScript function 全局替換字符串中的特殊字符

[英]How can I replace special characters in a String globally via a JavaScript function

剛接觸開發,如JavaScript,還在學習中。 目前,我正在經營一家即將上線的 Shopware6 商店。 目前,我面臨一個問題,我想在全球范圍內替換 String 的某些部分。 該商店可以在https://bt-baushop.de下找到我想替換文章標題中的“+”的 4 個主要事件:

  1. 產品搜索(由 class.search-suggest-product-name 定義)
  2. 產品列表(由 class.product-name 定義)
  3. 在產品頁面上,在主要產品標題處(由 class.product-name 定義)
  4. 在產品信息標題的產品頁面上(由 class.product-detail-description-title 定義)

我嘗試將以下 function 用於第 4 號問題:

const innerText = document.querySelector('.product-detail-description-title').innerText 
document.querySelector('.product-detail-description-title').innerText = innerText.replace('+', '')

這確實有效,但現在我需要解決其他問題。 因此,我認為全局替換“+”可能是個好主意,因為我不能運行相同的腳本兩次,這對產品列表也不起作用,因為只有第一次出現的 + 被替換。 另外,我知道這種可能的全局解決方案可能會終止系統中其他地方出現的任何事件,這很好。

順便說一句,解決這個問題的正確方法是簡單地重命名我的 ERP 系統中映射到這些類的字段。 但是,目前這不是一個選項,因為我需要為其他內部流程命名這些文章。 這就是為什么我認為通過 JavaScript 更換前端至少是一個臨時解決方案。

希望社區能提供幫助:)

我拿起bergi的評論

frontend replace-all 會破壞更多的東西而不是修復它們。 在 ERP 系統或商店連接器中映射值的正確解決方案

這是 PHP 中的解決方案。

要真正做到這一點,您可以影響連接器軟件,也可以介入編寫產品。 更改連接器是我們無法評論的事情,因為我們不知道該軟件。 在 Shopware 中,您可以收聽product.written事件 這可用於在通過 API 寫入產品時做出反應。在事件中,您將使用更新的有效負載。 如果有效載荷中有名稱,您可以開始構建替換邏輯並重新編寫產品。 這將再次觸發 product.written ,但這次它是固定的,因此您不會再次觸發更新。

實現可能看起來像這樣

public function productWritten(EntityWrittenEvent $event): void
{
    $updates = [];

    foreach ($event->getPayloads() as $payload) {
        if (str_contains($payload['name'], '+')) {
            $updates[] = [
                'id' => $payload['id'],
                'name' => str_replace('+', ' ', $payload['name']),
            ];
        }
    }

    if ($updates !== []) {
        $this->productRepository->update($updates, $event->getContext());
    }
}

當您在 JS 中尋找解決方案時,您可以使用Admin API遠程構建一個 Shopware 應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM