Скажу сразу - это не Большой Брат

Задача - отслеживать действия покупателей в корзине: что положили в корзинку, на каком этапе оформления заказа задерживались, с какого этапа отказались делать заказ и т.д.
Настройки Целей в Яндексе и Гугле не очень помогают, особенно при установленном SEF404. Сделал логирование самостоятельно. Теперь в отдельный файл пишется когда, кто (id, email и имя) на каком этапе оформления заказа находился покупатель. Дополнительно выводится содержимое его корзины. Эти данные нужны для улучшения эффективности работы магазина

.
Код писался очень быстро и далек от совершенства, но работает

Правим файл administrator/components/com_virtuemart/html/checkout.index.php. В самом начале с 24-й строки пишем:
function getUserName ( $user_id )
{
$q = 'SELECT `name`, `email` FROM `jos_users` WHERE `id` ='.$user_id;
$db = new ps_DB();
$db->query( $q );
$name = "-----------------";
while ( $db->next_record() ) {
$name = $db->f ( "name" );
$name .= " : " . $db->f ( "email" );
}
return $name;
}
function getProductName ( $id )
{
$q = 'SELECT `product_sku` FROM `jos_vm_product` WHERE `product_id` = ' . $id;
$db = new ps_DB();
$db->query( $q );
$sku = "------------------";
while ( $db->next_record() ) {
$sku = $db->f ( "product_sku" );
}
return $sku;
}
Где-то в районе 304-й строки после кода:
<input type="hidden" name="zone_qty" value="'. $zone_qty .'" />
<input type="hidden" name="ship_to_info_id" value="'. $ship_to_info_id .'" />
<input type="hidden" name="shipping_rate_id" value="'. urlencode($shipping_rate_id).'" />
<input type="hidden" name="payment_method_id" value="'. $payment_method_id .'" />
<input type="hidden" name="checkout_last_step" value="'. $current_stage .'" />';
$theme->set( 'basket_html', $basket_html );
вставляем:
// Определяем имя файла для записи лога
$logfilename = "logs/" . date ( "d-m-Y" ). ".log";
- тут определяем имя файла для лога. Я пишу в файл с именем соответсвующим текущей дате, файлы складываю в папке /logs в корне сайта. Не забываем закрыть ее от посторонних и поисковых роботов!
Буквально через пару строк, после кода:
if( in_array('CHECK_OUT_GET_SHIPPING_ADDR', $checkout_steps[$current_stage]) ) {
echo '<a name="CHECK_OUT_GET_SHIPPING_ADDR"></a>';
echo $theme->fetch( 'checkout/get_shipping_address.tpl.php');
$theme->set('basket_html', '');
пишем:
// Мы на шаге выбора адреса
if ( $logfile = fopen ( $logfilename, 'a+' ) ) {
fwrite ( $logfile, date ( "d-m-Y H:i:s") );
fwrite ( $logfile, " - Adress . UserId = " );
fwrite ( $logfile, (int)$auth['user_id'] . " : " . getUserName ( (int)$auth['user_id'] ). "\n" );
for($i = 0; $i < $cart["idx"]; $i++) {
fwrite ( $logfile, " " . $cart[$i]['quantity'] . " : " . getProductName ( $cart[$i]['product_id'] ). "\n" );
}
fwrite ( $logfile, " \n" );
fclose ( $logfile );
}
// Выбор адреса закончился
- тут производим запись в лог данных о текущем времени, данных пользователя и его корзину.
после:
if( in_array('CHECK_OUT_GET_SHIPPING_METHOD', $checkout_steps[$current_stage]) ) {
echo '<a name="CHECK_OUT_GET_SHIPPING_METHOD"></a>';
echo $theme->fetch( 'checkout/get_shipping_method.tpl.php');
$theme->set('basket_html', '');
вставляем:
// Мы на шаге выбора метода доставки
if ( $logfile = fopen ( $logfilename, 'a+' ) ) {
fwrite ( $logfile, date ( "d-m-Y H:i:s") );
fwrite ( $logfile, " - Shipping. UserId = " );
fwrite ( $logfile, (int)$auth['user_id'] . " : " . getUserName ( (int)$auth['user_id'] ). "\n" );
for($i = 0; $i < $cart["idx"]; $i++) {
fwrite ( $logfile, " " . $cart[$i]['quantity'] . " : " . getProductName ( $cart[$i]['product_id'] ). "\n" );
}
fwrite ( $logfile, "\n" );
fclose ( $logfile );
}
// Выбор метода доставки закончился
,
после кода:
if( in_array('CHECK_OUT_GET_PAYMENT_METHOD', $checkout_steps[$current_stage]) ) {
echo '<a name="CHECK_OUT_GET_PAYMENT_METHOD"></a>';
if(!empty( $paypal_api_payment_method_id ) && $paypalActive)
{
echo $theme->fetch('checkout/get_payment_method_paypal_ex.tpl.php');
}
else
{
echo $theme->fetch( 'checkout/get_payment_method.tpl.php');
}
$theme->set('basket_html', '');
вставляем:
// Мы на шаге выбора метода оплаты
if ( $logfile = fopen ( $logfilename, 'a+' ) ) {
fwrite ( $logfile, date ( "d-m-Y H:i:s") );
fwrite ( $logfile, " - Paymed . UserId = " );
fwrite ( $logfile, (int)$auth['user_id'] . " : " . getUserName ( (int)$auth['user_id'] ). "\n" );
for($i = 0; $i < $cart["idx"]; $i++) {
fwrite ( $logfile, " " . $cart[$i]['quantity'] . " : " . getProductName ( $cart[$i]['product_id'] ). "\n" );
}
fwrite ( $logfile, "\n" );
fclose ( $logfile );
}
// Выбор метода оплаты закончился
после кода:
if( in_array('CHECK_OUT_GET_FINAL_CONFIRMATION', $checkout_steps[$current_stage]) ) {
вставляем:
// Мы на финальном шаге - подтверждение заказа
if ( $logfile = fopen ( $logfilename, 'a+' ) ) {
fwrite ( $logfile, date ( "d-m-Y H:i:s") );
fwrite ( $logfile, " - Final . UserId = " );
fwrite ( $logfile, (int)$auth['user_id'] . " : " . getUserName ( (int)$auth['user_id'] ). "\n" );
for($i = 0; $i < $cart["idx"]; $i++) {
fwrite ( $logfile, " " . $cart[$i]['quantity'] . " : " . getProductName ( $cart[$i]['product_id'] ). "\n" );
}
fwrite ( $logfile, "\n" );
fclose ( $logfile );
}
// Финальный шаг- подтверждение заказа
.
В приложении мой файл, для тех, кому лень ковыряться

[вложение удалено Администратором]