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 адрес клиента - корректировка алгоритма *}