VirtueMart 3.6的重要调整

由Max Milbers写于

VM 3.6打破了向后兼容某些支付方法

出现这种向后兼容性问题是有原因的。旧的购物车只显示用户字段的默认值,但是在地址数组(如$cart->BT)中没有设置默认值。新的购物车直接将默认值从用户字段加载到包含地址的购物车数组中。核心现在提供了比以前更多的支付/发货方式的限制,所以它变得很重要,发货/付款(和其他)直接与设置默认工作。但是愚蠢的副作用是,以前的空值现在大部分时间都被一些默认值填充了。set defaults存储在购物车中的数组中(例如byDefaultBT),所以我们甚至知道我们只是使用默认值还是设置值。

有一个带有回退参数的新的cart函数getST。该函数考虑变量STsameAsBT。只有当STsameAsBT为空时才使用ST,否则getST返回BT。

现在来看看代码。马车的旧地址

(圣)= > 0

举个例子

(圣)= >数组

[address_type_name] =>地址昵称

这一行被广泛使用在函数checkConditions中

$address = (($cart->ST == 0) ?购物车- > BT:购物车美元- >圣);

总是ST,但ST主要是空的,因此付款不会显示,甚至会抛出错误。为了防止这种情况,只需将上面的行替换为

地址=美元购物车- > getST ();

但是,我们真的建议只使用新的核心限制。在很多情况下,它只是添加2行并删除整个checkConditions函数,因为它只是覆盖了一个核心。添加核心限制的教程

如果你想编写一个向后兼容的插件,请使用

如果(method_exists(购物车美元,getST)) {
地址=美元购物车- > getST ();
其他}{
$address = (($cart->ST == 0) ?购物车- > BT:购物车美元- >圣);

但检查添加核心限制的教程我们使用上面的if情况直接调用父函数。

由于旧的遗留代码的问题

“自动选择发货”、“自动选择付款”的处理变更。因为vm3.5+只有在只有一个方法时才被设置为true。

功能plgVmOnCheckAutomaticSelectedPayment plgVmOnCheckAutomaticSelectedShipment不应该再使用

$return = $this->onCheckAutomaticSelected($cart, $cart_prices);
如果收取(返回)美元){
返回0;
其他}{
返回NULL;

只使用

function plgVmOnCheckAutomaticSelectedPayment(VirtueMartCart $cart, array $cart_prices = array(), &$paymentCounter){/ /支付
返回$this->onCheckAutomaticSelected($cart, $cart_prices, $paymentCounter);

或者退回到旧的核心

$return = $this->onCheckAutomaticSelected($cart, $cart_prices);
如果(method_exists(购物车美元,getST)) {
返回美元返回;
} else if (isset($return)) {
返回0;
其他}{
返回NULL;

在函数plgVmDisplayListFEPayment中,$htmlIn变量在被调用两次时可以创建一个双倍输出。旧的方法只是将不带键的输出添加到数组中,现在您应该在foreach中使用

如果(!收取($ htmlIn [$ this - > _psType][方法- >申请美元])){

然后是每个方法

$ idN = virtuemart_。$ this - > _psType。“method_id”;
美元htmlIn [$ this - > _psType][方法- >申请美元)= $ html;

大多数插件都使用核心提供的函数displayListFE,这是不需要考虑的。价格显示在getPluginHtml现在是一个子布局和覆盖