Shop-Script 5: хак для брошенных корзин

18 декабря 2013

Актуально для плагина "Брошенные корзины" версии 0.0.2. В следующих версиях реализована отправка любым покупателям, заполнившим контактные данные.

Плагин "Брошенные корзины для Shop-Script 5" отсылает автоматические напоминания на почту зарегистрированным пользователям через заданное количество часов после последнего добавления товара в корзину.

К сожалению, интернет магазин на Shop-Script 5 не сохраняет контакты пользователя не оформившего заказ. Т.е. если был пройден первый шаг "Контактная информация", но дальше покупатель не пошёл, данные в базу не будут записаны. Поэтому отсылать уведомление некуда.

Есть небольшой хак для тех, кому вопрос возврата покупателей действительно важен. С обновлениями, естественно, несовместим.

После внедрения хака, покупатель будет сохранён как контакт сразу после заполнения контактной информации. (В противном случае контакт сохраняется только после оформления заказа. Соответственно, речи о брошенных корзинах идти не может.)

Все остальные функции должны работать как обычно.

Возможны конфликты с плагинами, которые влияют на оформление заказа

Не тестировалось для 5.2.1

Итак, нужно отредактировать 3 файла:

  1. wa-apps/shop/lib/actions/frontend/shopFrontendCheckout.action.php:

    Убрать строчку 169:
    $contact = $this->getUser()->isAuth() ? $this->getUser() : $checkout_data['contact'];
    Вместо неё:
    $contact = $this->getUser()->isAuth() ? $this->getUser() : new waContact($checkout_data['contact']);

     

  2. wa-apps/shop/lib/classes/checkout/shopCheckout.class.php:

    Убрать строчку 35:
    $contact = $this->getSessionData('contact');
    Вместо неё:
    $contact_id = $this->getSessionData('contact');
    $contact = new waContact($contact_id);

     

  3. wa-apps/shop/lib/classes/checkout/shopCheckoutContactinfo.class.php:

    Убрать строчку 99:
    $this->setSessionData('contact', $contact);
    Вместо неё:
    $contact->save();
    $this->setSessionData('contact', $contact->getId());

    $cart = new shopCart();
    $code = $cart->getCode();
    $cart_items_model = new shopCartItemsModel();
    $cart_items_model->updateByField('code', $code, array('contact_id' => $contact->getId()));

     

Всё :)

На Гитхабе есть данный хак в виде Pull request. Для просмотра нужен доступ к репозиторию.

Внедрение данной функциональности в ядро Shop-Script 5 — действительно спорный вопрос. Хотя на мой взгляд пользователь, оставивший добровольно свои контакты, никак не может быть лишним. Интересно Ваше мнение.