簡體   English   中英

Prestashop 在前端結帳的承運商上添加自定義單選按鈕

[英]Prestashop add custom radio button on shipping carriers on front end checkout

我在 Prestashop 1.7.8.7 中創建了一個自定義模塊,它將添加多種運輸方式(承運人),並將根據產品尺寸和送貨地址顯示運輸成本。 因此,承運商在前端結賬頁面上看起來像這樣。 https://prnt.sc/E1avDASyJYYW

現在,如果有人 select SameDay Courier Shipping那么我需要向 select 顯示他們想要的服務的兩個單選按鈕。 它將有兩個單選選項,例如

  1. 送貨取件(默認情況下會選擇此選項)
  2. 儲物櫃取件

因此,如果有人 select Delivery pickup那么它會有不同的運費,如果有人 select Locker pickup那么它會有不同的運費。

任何人都可以幫助我如何實現此功能。

在挖掘時,我發現我們有一個名為DeliveryOptionsFinder.php的文件,在該文件中我們有一個名為getDeliveryOptions()的公共 function,我們有這行代碼

    if ($moduleId = Module::getModuleIdByName($carrier['external_module_name'])) {
        $carrier['extraContent'] = Hook::exec('displayCarrierExtraContent', ['carrier' => $carrier], $moduleId);
    }
}

因此,如果我直接從 DB 將is_module設置為 1 到我的所有運營商,那么在前端結帳頁面上,不會顯示任何運營商。

提前致謝。

在過去的 2 年里,作為 prestashop 開發人員,我已經做過類似的事情。 事實是,您無法通過“尊重”prestashop 流程來實現您想要的。

也許您可以使用hookDisplayCarrierExtraContent($data) ,則返回 2 個無線電。 但是您無法處理表單提交或其他內容,或將其包含到 prestashop 結帳數據中。 但是,例如,您可以采取以下措施作為解決方法。

正如我所說,在你的模塊中,掛鈎額外的內容,渲染一個帶有 2 個無線電的模板。 如果當前 controller 是結帳的,也掛鈎 displayHeader 並使用$this->context->controller->addJS()添加您自己的 js。

然后在此 JS 代碼中,您可以處理無線電的“更改”事件並向您的模塊發送 ajax 請求。 您可以在 {your_module}/controllers/front/ 中創建一個 controller 調用,例如,通過在您自己的表中保存選擇的一個來選擇和處理 js ajax 請求。

顯然,您可以在結帳時禁用“下一步”按鈕,直到選擇了兩個無線電之一,或者您可以將一個單選按鈕設置為默認按鈕以簡化操作。

例如,您的表“ps_cart_choosen_radio”可能看起來像這樣|id_cart|choosen_radio|。

然后你就有了你需要的所有數據。 當購物車轉換為訂單時,您將在訂單 object(以及 ps_orders 表)中擁有 id_cart。

只需 select / 使用訂單的 id_cart 從您自己的表中加入選擇的電台。

"SELECT choosen_radio FROM ps_cart_choosen_radio WHERE id_cart = {$order.id_cart}"

如果您需要根據前端的 choosen_radio 顯示數據,您可以在存在訂單的任何地方掛鈎和 select 這些數據。 或者您可以通過添加一段字符串來編輯 ps_orders 表中的運營商名稱。 假設承運人是“快遞”,客戶選擇“24 小時”。 您可以通過將運營商名稱更改為“express-24h”來更新該列,以便在整個 prestashop 生態系統中每個人都會看到這是一個 24 小時的選擇。

請記住,與訂單相關的承運人名稱不是承運人表中的承運人名稱。 所以你可以毫不費力地編輯它。

所有這些問題都來自“需要”顯示一些嵌套的選擇,而不是在主要選擇中列出所有這些。 在那種情況下會很容易(只需在 prestashop 后台創建運營商)

暫無
暫無

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

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