Bonjour,这就是我所做的
覆盖管理订单首选项控制器并添加一个布尔配置字段来切换此功能
$this->fields_options = array(
[...]
'PS_ORDER_PROCESS_BYPASS_SHIPPING' => array(
'title' => $this->l('Bypass shipping step'),
'hint' => $this->l('Do not show shipping step in order process.'),
'validation' => 'isBool',
'cast' => 'intval',
'type' => 'bool'
)
);
您现在可以在 Backoffice 下找到一个切换按钮首选项 > 订单
覆盖订单控制器并添加一个if
in init()
方法将当前步骤设置为付款步骤如果控制器自行启动交付步骤
public function init()
{
global $orderTotal;
parent::init();
$this->step = (int)Tools::getValue('step');
// HERE IT IS
if((bool)Configuration::get('PS_ORDER_PROCESS_BYPASS_SHIPPING') && $this->step == self::STEP_DELIVERY){
$this->step = self::STEP_PAYMENT;
}
if (!$this->nbProducts) {
$this->step = -1;
}
还可以绕过付款步骤中的 CGV 检查验证initContent()
方法。
如果您不这样做,CGV 将永远不会被检查,它会将您重定向到交付步骤,你会告诉他他实际上在付款步骤,他会再次检查CGV,他会做同样的重定向......然后你就陷入了无限循环
case OrderController::STEP_PAYMENT:
$cgv = Tools::getValue('cgv') || $this->context->cookie->check_cgv;
if (
!(bool)Configuration::get('PS_ORDER_PROCESS_BYPASS_SHIPPING') && // HERE IT IS
$is_advanced_payment_api === false && Configuration::get('PS_CONDITIONS')
&& (!Validate::isBool($cgv) || $cgv == false)
) {
Tools::redirect('index.php?controller=order&step=2');
}
将配置参数传递给视图来修改显示
$this->context->smarty->assign('bypass_shipping_step', (bool)Configuration::get('PS_ORDER_PROCESS_BYPASS_SHIPPING'));
在你看来,你会用一些东西来设计东西吗?if
In 订单步骤.tpl你可以添加一个{if not $bypass_shipping_step}...{/if}
第四个左右li
隐藏它,然后执行以下操作:
{if $bypass_shipping_step}
<style>
ul.step li{
width:25%;
}
</style>
{/if}
或者导入一个更干净的专用样式表。
希望有帮助。