Весьма обыденная ситуация: вам нужно запретить "наложенный платеж" при доставке "транспортной компанией" (собственно, варианты могут быть любые, например ваш курьер не принимает карты, не важно - принцип один).
Как правило, в крупных, давно и правильно настроенных ИМ (типа Озона) это делается путем последовательного отображения пользователю страниц выбора адреса - вариантов доставки - вариантов оплаты. В X-Cart 5 же (и это ЛУЧШЕ - потому что наглядно, потому что все видно сразу) все это собрано на одной странице, а значит (де)активация способов оплаты должна происходить динамически, в зависимости от выбранного пользователем способа доставки.
Мой вопрос на офф форуме, его обсуждение и ссылку на статью в документации по X-Cart можно посмотреть по ссылке.
В моем случае есть два способа доставки:
= Почта (ID=1) и Транспортная Компания (ID=2)
и два способа оплаты:
= Яндекс Касса (ID=67) и Наложенный Платеж (ID=73).
ID методов доставки и оплаты можно увидев, зайдя в админке в их настройку - ID отобразится в урле соответствующей страницы, например так: site.ru/admin.php?target=payment_method&method_id=67.
Мне нужно запретить Наложенный Платеж в случае, если доставка будет осуществляться транспортной компанией. Для этого в вашем модуле, который отвечает за бизнес логику вашего ИМ, создаем файл XLite\Module\DAG\SpecialOffer\Model\Order.php (на имя конкретно моего модуля внимания не обращаем, так вышло, что я начал со скидок, а теперь уже просто лень его переименовывать)
Как правило, в крупных, давно и правильно настроенных ИМ (типа Озона) это делается путем последовательного отображения пользователю страниц выбора адреса - вариантов доставки - вариантов оплаты. В X-Cart 5 же (и это ЛУЧШЕ - потому что наглядно, потому что все видно сразу) все это собрано на одной странице, а значит (де)активация способов оплаты должна происходить динамически, в зависимости от выбранного пользователем способа доставки.
Мой вопрос на офф форуме, его обсуждение и ссылку на статью в документации по X-Cart можно посмотреть по ссылке.
В моем случае есть два способа доставки:
= Почта (ID=1) и Транспортная Компания (ID=2)
и два способа оплаты:
= Яндекс Касса (ID=67) и Наложенный Платеж (ID=73).
ID методов доставки и оплаты можно увидев, зайдя в админке в их настройку - ID отобразится в урле соответствующей страницы, например так: site.ru/admin.php?target=payment_method&method_id=67.
Мне нужно запретить Наложенный Платеж в случае, если доставка будет осуществляться транспортной компанией. Для этого в вашем модуле, который отвечает за бизнес логику вашего ИМ, создаем файл XLite\Module\DAG\SpecialOffer\Model\Order.php (на имя конкретно моего модуля внимания не обращаем, так вышло, что я начал со скидок, а теперь уже просто лень его переименовывать)
<?Красным цветом выделены ID методов доставки и оплаты, комбинация которых недопустима. Перезагружаем магазин, убеждаемся что работает. Честно говоря, я не ожидал, что будет работать так здорово!
// vim: set ts=4 sw=4 sts=4 et:
namespace XLite\Module\DAG\SpecialOffer\Model;
/**
* Class represents an order
*/
abstract class Order extends \XLite\Model\Order implements \XLite\Base\IDecorator
{
public function getPaymentMethods()
{
if (0 < $this->getOpenTotal())
{
$list = \XLite\Core\Database::getRepo('XLite\Model\Payment\Method')
->findAllActive();
foreach ($list as $i => $method)
{
if (!$method->isEnabled() || !$method->getProcessor()->isApplicable($this, $method)
|| $this->getShippingId() == 2 && $method->getMethodId() == 73)
{
unset($list[$i]);
}
}
}
else
{
$list = array();
}
return $list;
}
}
Комментариев нет:
Отправить комментарий