Перейти к содержимому


Выбор адреса доставки при оформлении заказа


  • Вы не можете ответить в тему
В этой теме нет ответов

#1 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 05 November 2015 - 08:43 PM

Это дополнение делает чуть удобнее оформление заказа, если наличие адреса доставки обязательно и необходимо:
1. при добавлении клиентом в личном кабинете нового адреса этот адрес автоматически становится его адресом по умолчанию.
2. при удалении адреса в случае, если это был адрес по умолчанию и есть другие адреса делает адресом по умолчанию предыдущий адрес.
3. при оформлении заказа выдается селект (либо радибоксы) с выбором из существующих адресов.
4. при оформлении заказа и отсутствиии адресов вообще строка "Пожалуйста, укажите свой адрес в личном профайле для продолжения оформления заказа" становится ссылкой, по которой можно перейти к штатному заданию адреса.
Прикрепленный файл  3.JPG   17.5К   9 Количество загрузок:
В п.2 вариант с радиобаттонами (на мой взгляд он удобнее), вариант с селектом закомментирован.

Установка:

1. в файле registration_functions.php

1.1. в функции regAddAddress

вместо


return db_insert_id();


вставляем


# BEGIN адрес клиента - корректировка алгоритма
#return db_insert_id();
$dbid = db_insert_id();
db_query("UPDATE ".CUSTOMERS_TABLE." set addressID=$dbid WHERE customerID=$customerID");
return $dbid;
# END адрес клиента - корректировка алгоритма



1.1. в функции redDeleteAddress

вместо


db_query("update ".CUSTOMERS_TABLE." set addressID=NULL where addressID=".(int)$addressID);
db_query("delete from ".CUSTOMER_ADDRESSES_TABLE." where addressID=".(int)$addressID);


вставляем


# BEGIN адрес клиента - корректировка алгоритма
#db_query("update ".CUSTOMERS_TABLE." set addressID=NULL where addressID=".(int)$addressID);
#db_query("delete from ".CUSTOMER_ADDRESSES_TABLE." where addressID=".(int)$addressID);
// получим customerID для этого адреса
$row = db_fetch_assoc(db_query("SELECT customerID FROM ".CUSTOMER_ADDRESSES_TABLE." WHERE addressID=".(int)$addressID." LIMIT 1"));
// удалим этот адрес
db_query("DELETE FROM ".CUSTOMER_ADDRESSES_TABLE." WHERE addressID=".(int)$addressID);
//получим текущий дефолтовый addressID нашего customerID
$defaddr = db_fetch_assoc(db_query("SELECT addressID FROM ".CUSTOMERS_TABLE." WHERE customerID=".(int)$row['customerID']." LIMIT 1"));
if ($defaddr['addressID'] == $addressID) // если удаленный адрес был дефолтовым
{
// получим addressID последнего из оставшихся адресов либо false
$addr = db_fetch_assoc(db_query("SELECT addressID FROM ".CUSTOMER_ADDRESSES_TABLE." WHERE customerID=".(int)$row['customerID']." ORDER BY addressID DESC LIMIT 1"));
// заполним дефолтовый адрес нашего customerID либо последним адресом, либо NULL (если адресов не осталось).
db_query("UPDATE ".CUSTOMERS_TABLE." SET addressID=".($addr?(int)$addr['addressID']:0)." WHERE addressID=".(int)$addressID);
}
# END адрес клиента - корректировка алгоритма



2. в файле order2_shipping.php

перед


$smarty->assign( "main_content_template", "order2_shipping.tpl.html" );


вставляем


# BEGIN адрес клиента - корректировка алгоритма
$smarty->assign( "addresses", regGetAllAddressesByLogin($_SESSION["log"]));
# END адрес клиента - корректировка алгоритма



3. в файле order2_shipping.tpl.html

3.1. вместо


{if $shippingAddressID==0}
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="hdbtop error" align="center">{$smarty.const.STRING_PLEASE_SPECIFY_ADDRESS}</td>
</tr>
</table>
</tr>
</table>
{/if}


вставляем


{* BEGIN адрес клиента - корректировка алгоритма *}
{*
{if $shippingAddressID==0}
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="hdbtop error" align="center">{$smarty.const.STRING_PLEASE_SPECIFY_ADDRESS}</td>
</tr>
</table>
</tr>
</table>
{/if}
*}
<table cellspacing="0" cellpadding="0" width="100%" class="gre">
{if $addresses|@count}

{* BEGIN вариант с селектом *}
{*
<tr>
<td class="hdbtop">
<select name="selected_addressID" onchange="window.location='index.php?order2_shipping=yes&shippingAddressID='+this.value;">
<option value="0">Пожалуйста, выберите адрес доставки</option>
{foreach from=$addresses item=addr}
<option value="{$addr.addressID}">{$addr.first_name}, {$addr.last_name}, {$addr.address}</option>
{/foreach}
</select>
</td>
</tr>
*}
{* END вариант с селектом *}

{* BEGIN вариант с радиобаттонами *}
<tr><td class="lt pad" valign="middle" colspan="2">Пожалуйста, выберите адрес доставки</td></tr>
{foreach from=$addresses item=addr}
<tr>
<td class="pad" align="center" valign="middle"><input type="radio" name="selected_addressID" value="{$addr.addressID}"{if $addr.addressID == $shippingAddressID} checked{/if} onchange="window.location='index.php?order2_shipping=yes&shippingAddressID='+this.value;"></td>
<td class="pad" align="left" valign="middle" width="99%"><b>{$addr.first_name}, {$addr.last_name}, {$addr.address}</b></td>
</tr>
{/foreach}
{* END вариант с радиобаттонами *}

{else}
<tr>
<td class="hdbtop" align="center"><a href="index.php?add_new_address=yes" class="error">Нет ни одного адреса доставки!<br>Задайте в личном кабинете хотя бы один адрес и повторите оформление заказа.</a></td>
</tr>
{/if}
</table>
{* END адрес клиента - корректировка алгоритма *}


3.1. вместо


<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="hdbot"><a href="#" onclick="select_shipping_methodClickHandler(); return false;">{$smarty.const.CONTINUE_BUTTON}</a></td>
</tr>
</table>


вставляем


{* BEGIN адрес клиента - корректировка алгоритма *}
{*
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="hdbot"><a href="#" onclick="select_shipping_methodClickHandler(); return false;">{$smarty.const.CONTINUE_BUTTON}</a></td>
</tr>
</table>
*}
{if $shippingAddressID>0}
<table cellspacing="0" cellpadding="0" width="100%">
<tr><td class="hdbot"><a href="#" onclick="select_shipping_methodClickHandler(); return false;">{$smarty.const.CONTINUE_BUTTON}</a></td></tr>
</table>
{/if}
{* END адрес клиента - корректировка алгоритма *}

  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)