Magento: Как определить, прервал ли клиент процесс контроля

Я работаю над пользовательским модулем, который должен знать, прервал ли пользователь процесс контроля. "Прерывание" просто означает, что они приземлились на indexAction контроля, но не завершали процесс. Абсолютно необходимо, чтобы я знал, происходит ли это.

Я думал, возможно, устанавливает переменную сеанса, что они ввели контроль. На каждой загрузке страницы выполните блок кода, который проверяет эту переменную. Если true, это проверит, какой контроллер используется. Если это не будет контроллер контроля, то я буду знать, что они уехали.

Две проблемы с моей идеей:

  1. У меня нет малейшей подсказки, куда поместить этот проверяющий контроллер код, таким образом, это работает на каждой загрузке страницы.
  2. Я не знаю, как найти, какой контроллер обрабатывает запрос.

Я был бы очень признателен, если Вы могли бы помочь ответить на те вопросы или даже предложить лучший подход!

1
задан Colin O'Dell 8 July 2010 в 20:00
поделиться

2 ответа

Поскольку мне нужно знать в реальном времени, когда посетитель покинул кассу, я использовал переменную сессии под названием IsUserInCheckout. Она устанавливается в true, когда выполняется indexAction() кассы.

Затем я создал наблюдатель событий, который запускается перед отправкой запроса контроллеру. Он проверяет, какой контроллер вызывается. Если запрос не относится к контроллеру checkout, я смотрю на переменную сессии, чтобы узнать, начал ли пользователь checkout. Как только я запускаю некоторую пользовательскую логику, я изменяю переменную сессии IsUserInCheckout на false.

Мне кажется, что он достаточно легкий. Он действительно запускается при каждой загрузке страницы, но 98% времени он просто читает переменные сессии, видит false и ничего не делает.

0
ответ дан 2 September 2019 в 23:12
поделиться

Я бы применил несколько иной подход к проблеме брошенных корзин.

Каждый раз, когда вы "создаете корзину", добавляя товар, вы создаете объект Mage_Sales_Model_Quote, который magento хранит в базе данных. Каждый раз, когда вы оформляете заказ, вы создаете объект Mage_Sales_Model_Order. Объекты Mage_Sales_Model_Order хранят ссылку на свои исходные идентификаторы котировок.

Таким образом, вы можете запросить все заказы, чтобы получить список идентификаторов котировок, а затем создать коллекцию котировок и отфильтровать котировки, для которых есть заказы. Это даст вам список всех случаев, когда корзина была оставлена.

//may start to degrade as orders pile up.  Add date filters to 
//prevent or look into properly joining things in.
$orders = Mage::getModel('sales/order')
->getCollection()
->addAttributeToSelect('*');

var_dump('Order Count', count($orders));

$quote_ids  = $orders->getColumnValues('quote_id');
$quote_ids = array_filter($quote_ids, 'is_numeric');

$carts      = Mage::getModel('sales/quote')
->getCollection();

var_dump('All Cart Count:');
var_dump(count($carts));

$carts      = Mage::getModel('sales/quote')
->getCollection()
->addFieldToFilter('entity_id',array('nin'=>$quote_ids));

var_dump('Filtered Cart Count:');
var_dump(count($carts));

foreach($carts as $cart)
{
    var_dump('abandoned cart', $cart);
}

Что касается других ваших вопросов, то они слишком сложны, чтобы уместить их в один вопрос stack overflow. Я бы почитал о Magento, чтобы получить представление о базовой архитектуре, а затем использовал живую демонстрацию Commerce Bug, чтобы понять, какой контроллер вам нужен. (оба проекта, ссылки на которые приведены выше, являются моими, самоссылка, покупатель остерегается и т.д.)

.
2
ответ дан 2 September 2019 в 23:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: