php 如何在Prestashop订单确认中显示{$product.availability_message}?

5vf7fwbs  于 2023-10-15  发布在  PHP
关注(0)|答案(2)|浏览(79)

我在PS 1.7上有一个问题;我正在尝试根据购物车上的库存和订单确认显示{$product.availability_message}(发货延迟消息)。它在购物车上运行良好,但在订单确认(order-confirmation-table.tpl)上不显示。有什么办法吗?
下面是我的代码:

{if (isset($product.quantity_all_versions) && $product.quantity_all_versions < 0)}
                                            <div>
                                            <span class="red icon--pulsing"></span>
                                            <span class="msg">{$product.availability_message}</span>
                                            </div>

            {else}
                                               <div>
                                               <span class="icon--pulsing"></span> 
                                               <span class="msg">Available</span>
                                               </div>
             {/if}
ndasle7k

ndasle7k1#

Krystian Podemski的回答是完全正确的。我以前用过同样的方法。然而,我使用了不同的产品的属性比你,我无法重现它使用quantity_all_versionsavailability_message属性。我使用了quantity_availableavailable_later属性。
无论如何,你必须在\override\classes\文件夹中创建一个新文件PaymentModule.php
在这里,你必须创建一个新的类PaymentModule,函数为validateOrder

use PrestaShop\PrestaShop\Adapter\MailTemplate\MailPartialTemplateRenderer;
use PrestaShop\PrestaShop\Adapter\StockManager;

abstract class PaymentModule extends PaymentModuleCore
{
   public function validateOrder($id_cart, $id_order_state, $amount_paid, $payment_method = 'Unknown', $message = null, $extra_vars = array(), $currency_special = null, $dont_touch_amount = false, $secure_key = false, Shop $shop = null)
   {
      /* copy the content of this function from /classes/PaymentModule.php */
   }
}

然后找到数组$product_var_tpl并添加所需的属性。在我的情况下:

$product_var_tpl = [
   'id_product' => $product['id_product'],
   'id_product_attribute' => $product['id_product_attribute'],
   'reference' => $product['reference'],
   'name' => $product['name'] . (!empty($product['attributes']) ? ' - ' . $product['attributes'] : ''),
   'price' => Tools::getContextLocale($this->context)->formatPrice($product_price * $product['quantity'], $this->context->currency->iso_code),
   'quantity' => $product['quantity'],
   'quantity_available' => (int)$product['quantity_available'] - (int)$product['quantity'], //This one
   'available_later' => $product['available_later'], //This one
   'customization' => [],
];

然后,您可以在/themes/<your theme>/templates/checkout/_partials/order-confirmation-table.tpl中显示available_later消息,如下所示:

{if $product.product_quantity_in_stock - $product.product_quantity < 0}
   {if !empty($product.available_later)}
      {$product.available_later}
   {/if}
{else}
   {l s='Available' d='Shop.Theme.YourTheme'}
{/if}
pkmbmrz7

pkmbmrz72#

你需要覆盖PaymentModule::validateOrder
在这部分代码中:https://github.com/PrestaShop/PrestaShop/blob/1.7.8.x/classes/PaymentModule.php#L434
有一系列的产品。

相关问题