Bonjour, вот что я сделал
Override AdminOrderPreferencesController и добавить логическое поле конфигурации для переключения этой functionnality
$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 под Preferences> Приказы
Переопределение OrderController и добавьте if
в init()
способе для установки текущего шага к платежной операции если контроллер inits себя на этапе доставки
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
В порядке-steps.tpl можно добавить {if not $bypass_shipping_step}...{/if}
вокруг четвертого li
, чтобы скрыть это, и сделать что-то вроде:
{if $bypass_shipping_step}
<style>
ul.step li{
width:25%;
}
</style>
{/if}
или импортировать выделенную таблицу стилей, которая была бы чиста.
Надеюсь, это помогло.
Благодарим за это. это действительно помогает.Тем, кто спрашивает, где должен быть назначен назначенный smarty, я поместил его в конец метода init() в OrderController.php. – nosnevetzy
см. Https://stackoverflow.com/questions/47228469/how-to-remove-delivery-shipping-step-on-prestashop-1-7/48859854#48859854 для версии 1.7 – Flo