Автоопределение города пользователя при оформлении заказа (на основе GeoIP)
В точночти, как у вас указано сделал. Сейчас буду проверять скобки
Даже не знаю, что и думать - все скобки в порядке. А у вас там точно опечаток нет?

Даже не знаю, что и думать - все скобки в порядке. А у вас там точно опечаток нет?

да вроде не должно быть 
Ну вот вам полный код ТДС с вышеупомянутого test.pskelectro.ru
В основе - ТДС "Интернет-магазин Корзина" с демосайта, от версии 5.9.2, с добавлением поддержки GeoIP

Ну вот вам полный код ТДС с вышеупомянутого test.pskelectro.ru
В основе - ТДС "Интернет-магазин Корзина" с демосайта, от версии 5.9.2, с добавлением поддержки GeoIP
<?php
$shop = &singleton('shop');
if (class_exists("SiteUsers")) {
/* Получаем id текущего пользователя сайта */
$SiteUsers = &singleton('SiteUsers');
$site_users_id = $SiteUsers->GetCurrentSiteUser();
} else {
$site_users_id = false;
}
######################################################
### Обработка принятия заказа от платежной системы ###
######################################################
// ------------------------------------------------
// Подготовка редиректа для PayPal
// ------------------------------------------------
if (isset($_POST['paymentType'])) {
// Получаем ID заказа
$order_id = to_int($_POST['order_id']);
$order_row = $shop->GetOrder($order_id);
if ($order_row) {
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
// ------------------------------------------------
// Обработка уведомления об оплате от RBK Money
// ------------------------------------------------
if (isset($_POST['paymentStatus']) || isset($_GET['PayPalOrderConfirmation'])) {
// Получаем ID заказа
$order_id = to_int($_POST['orderId']);
$order_row = $shop->GetOrder($order_id);
if ($order_row) {
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
// ------------------------------------------------
// Обработка уведомления об оплате от WebMoney
// ------------------------------------------------
if (isset($_POST['LMI_PAYEE_PURSE'])) {
// Получаем ID заказа
$order_id = to_int($_POST['LMI_PAYMENT_NO']);
$order_row = $shop->GetOrder($order_id);
if ($order_row) {
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
// ------------------------------------------------
// Вывод информации о статусе платежа после его совершения и перенаправления с платежной системы
// ------------------------------------------------
if (isset($_REQUEST['payment']) && isset($_REQUEST['order_id'])) {
// Получаем ID заказа
$order_id = to_int($_REQUEST['order_id']);
$order_row = $shop->GetOrder($order_id);
// Если заказ принадлежит текущему авторизированному пользователю
if ($order_row['site_users_id'] == $site_users_id) {
if (to_str($_REQUEST['payment']) == 'success') {
?><h1>Подтверждение платежа</h1>
<p>Спасибо, информация об оплате заказа <strong>№ <?php echo $order_row['shop_order_account_number'] ?></strong>
получена.</p>
<?php
} else {
?><h1>Платеж не получен</h1>
<p>К сожалению при оплате заказа <strong>№ <?php echo $order_row['shop_order_account_number'] ?></strong>
произошла ошибка.</p>
<?php
}
}
// Для случаев, когда отключен модуль "Пользователи сайта"
elseif ($site_users_id === false) {
?><h1>Подтверждение платежа</h1>
<p>Благодарим за посещение нашего магазина!</p>
<?php
} else {
?><h1>Ошибка</h1>
<p>Неверный номер заказа!</p>
<?php
}
// Прерываем выполнение типовой динамической страницы
return true;
}
// ------------------------------------------------
// Обработка уведомления об оплате от ROBOKASSA
// ------------------------------------------------
if (isset($_REQUEST['SignatureValue'])) {
// Получаем ID заказа
$order_id = to_int($_REQUEST['InvId']);
$order_row = $shop->GetOrder($order_id);
if ($order_row) {
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
############################################################
### [END] Обработка принятия заказа от платежной системы ###
############################################################
/* Идентификатор интернет-магазина */
$shop_id = to_int($GLOBALS['LA']['shop_id']);
/* Проверяем наличие текущего пользователя */
/* Пользователь не авторизироаан */
if ($site_users_id == 0) {
/* Быстрая регистрация пользователя */
if (isset($_POST['step1_2'])) {
/* пароль необязателен при обновлении данных о пользователе */
if (isset($_POST['site_users_login']) && isset($_POST['site_users_password']) &&
isset($_POST['site_users_email']) && isset($_POST['site_users_password_retry']) &&
strpos($_POST['site_users_login'], 'http://') === false
// Логин не начинается с http://
) {
if (to_str($_POST['site_users_password']) == to_str($_POST['site_users_password_retry'])) {
// В массив дополнительных параметров пишем адрес магазина
$shop_row = $shop->GetShop($shop_id);
// Получаем путь к магазину
$Structure = &singleton('Structure');
$shop_path = "/" . $Structure->GetStructurePath($shop_row['structure_id'], 0);
$param['location'] = $shop_path . "cart/";
$param['site_users_login'] = to_str($_POST['site_users_login']);
$param['site_users_password'] = to_str($_POST['site_users_password']);
$param['site_users_email'] = to_str($_POST['site_users_email']);
$param['site_users_name'] = to_str($_POST['site_users_name']);
$param['site_users_surname'] = to_str($_POST['site_users_surname']);
$param['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
$param['site_users_country'] = to_str($_POST['site_users_country']);
$param['site_users_company'] = to_str($_POST['site_users_company']);
$param['site_users_phone'] = to_str($_POST['site_users_phone']);
// Группа по умолчанию
$param['site_users_group_id'] = $SiteUsers->GetDefaultGroup();
$param['xslname'] = to_str($GLOBALS['LA']['xsl_registaration_letter']);
/* Не отправлять письмо о подтверждении регистрации,
необходим при автоматическом подтрвеждении регистрации (ниже подтверждение) */
/*
ДАННЫЙ ПАРАМЕТР НЕОБХОДИМО УСТАНОВИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ПОДТВЕРЖДЕНИЕ РЕГИСТРАЦИИ
ПОЛЬЗОВАТЕЛЯ ПОСЛЕ БЫСТРОГО ЗАКАЗА
*/
$param['not_send_mail_confirm'] = true;
// добавляем пользователя, отправляем уведомление о регистрации
$result = $SiteUsers->InsertSiteUser($param);
/* Если не отправляли подтверждение - */
if ($result > 0 && $param['not_send_mail_confirm']) {
/* Подтверждаем регистрацию */
$SiteUsers->SetConfirmationID($result);
/* Авторизируем пользователя */
$SiteUsers->SetCurrentSiteUser($result);
$site_users_id = $result;
/* Перенсоим товары из cookies в корзину пользователя */
$shop->GetItemsFromCookiesToCart($site_users_id);
// Проверяем куки пользователя на предмет наличия в них логина аффилиата
if (isset($_COOKIE['affiliate_name'])) {
$affiliate = new affiliate();
$affiliate_login = quote_smart($_COOKIE['affiliate_name']);
$affiliate_row = $SiteUsers->GetSiteUserByLogin($affiliate_login);
if ($affiliate_row) {
$affiliate_id = $affiliate_row['site_users_id'];
// Проводим вставку пользователя аффилиата
$affiliate->InsertAffiliate(array('site_users_id' => $result,
'affiliate_plans_id' => 0, 'affiliate_site_users_id' => $affiliate_id,
'affiliate_active' => 1));
}
}
}
/* Если пользователь зарегистрирован и необходимо подтверждать авторизацию */
if ($result > 0 && !$param['not_send_mail_confirm']) {
?>
<h1>Спасибо за регистрацию</h1>
<p>Для продолжения работы необходимо подтвердить регистрацию Ваших
данных. В Ваш адрес отправлено письмо, содержащее ссылку для
подтверждения регистрации.</p>
<?php
}
// Проверяем наличие ошибки при регистрации
if ($result < 0) {
// -3 - Пользователь с таким логином зарегистрирован ранее
// -2 - Пользователь с таким e-mail зарегистрирован ранее
// -1 - Введен некорректный e-mail
$GLOBALS['external_propertys']['error'] = $result;
}
} else {
$GLOBALS['external_propertys']['error'] = -7;
/*Повторный пароль введен неверно*/
}
} else {
$GLOBALS['external_propertys']['error'] = -4;
/* Пожалуйста, задайте все обязательные параметры */
}
}
}
/* Если отключен модуль пользователей сайта */
if (isset($_POST['step_1_1a']) && isset($_POST['step_1'])) {
if (strlen(to_str($_POST['site_users_name'])) < 1) {
$message = 'Введите имя!';
}
if (strlen(to_str($_POST['site_users_surname'])) < 1) {
$message = 'Введите фамилию!';
}
if (strlen(to_str($_POST['site_users_email'])) < 1 || !valid_email(to_str($_POST['site_users_email']))) {
$message = 'Введите e-mail!';
}
}
if (empty($message) && ($site_users_id > 0 || $site_users_id === false)) {
/* Ввод адреса доставки */
if (isset($_POST['step_1'])) {
$external_propertys = array();
/* Если отключен модуль пользователей сайта, то вызывается этот подэтап */
if (isset($_POST['step_1_1a'])) {
/* Данные о пользователе передаем через внешние параметры и сохраним в сессию */
$external_propertys['site_users_name'] = $_SESSION['site_users_name'] = to_str($_POST['site_users_name']);
$external_propertys['site_users_surname'] = $_SESSION['site_users_surname'] =
to_str($_POST['site_users_surname']);
$external_propertys['site_users_patronymic'] = $_SESSION['site_users_patronymic'] =
to_str($_POST['site_users_patronymic']);
$external_propertys['site_users_email'] = $_SESSION['site_users_email'] = to_str($_POST['site_users_email']);
$external_propertys['site_users_phone'] = $_SESSION['site_users_phone'] = to_str($_POST['site_users_phone']);
$external_propertys['site_users_fax'] = $_SESSION['site_users_fax'] = to_str($_POST['site_users_fax']);
$external_propertys['site_users_address'] = $_SESSION['site_users_address'] =
to_str($_POST['site_users_address']);
$external_propertys['site_users_company'] = $_SESSION['site_users_company'] =
to_str($_POST['site_users_company']);
} else {
$aInfoSiteUser = $SiteUsers->GetSiteUser($site_users_id);
$external_propertys['site_users_name'] = $_SESSION['site_users_name'] = to_str($aInfoSiteUser['site_users_name']);
$external_propertys['site_users_surname'] = $_SESSION['site_users_surname'] =
to_str($aInfoSiteUser['site_users_surname']);
$external_propertys['site_users_patronymic'] = $_SESSION['site_users_patronymic'] =
to_str($aInfoSiteUser['site_users_patronymic']);
$external_propertys['site_users_email'] = $_SESSION['site_users_email'] = to_str($aInfoSiteUser['site_users_email']);
$external_propertys['site_users_phone'] = $_SESSION['site_users_phone'] = to_str($aInfoSiteUser['site_users_phone']);
$external_propertys['site_users_fax'] = $_SESSION['site_users_fax'] = to_str($aInfoSiteUser['site_users_fax']);
$external_propertys['site_users_address'] = $_SESSION['site_users_address'] =
to_str($aInfoSiteUser['site_users_address']);
$external_propertys['site_users_company'] = $_SESSION['site_users_company'] =
to_str($aInfoSiteUser['site_users_company']);
$external_propertys['site_users_postcode'] = $_SESSION['index'] = to_str($aInfoSiteUser['site_users_postcode']);
}
/* Запоминаем купон */
$_SESSION['shop_coupon_text'] = to_str($_POST['shop_coupon_text']);
// Определяем город пользователя
@include_once (CMS_FOLDER . '/modules/geoip.class.php');
if (defined('IPGEO_SERVER')) {
$user_ip = ($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : getenv("HTTP_X_FORWARDED_FOR");
$IPGeo = new IPGeo($user_ip);
$city = trim(to_str($IPGeo->ip($user_ip)));
if ($city) {
$cities = $shop->GetAllCity();
while ($city_row = mysql_fetch_assoc($cities)) {
if (strtolower($city_row['shop_city_name']) == strtolower($city)) {
$city_id = $city_row['shop_city_id'];
$location_id = $city_row['shop_location_id'];
break;
}
}
if (isset($city_id)) {
$location_row = $shop->GetLocation($location_id);
$country_id = $location_row['shop_country_id'];
}
}
}
/* Отображаем форму ввода адреса */
if (isset($city_id)) {
$external_propertys['city_id'] = $city_id;
$external_propertys['location_id'] = $location_id;
$external_propertys['country_id'] = $country_id;
$shop->ShowAddress(to_str($GLOBALS['LA']['xsl_delivery_address']), $shop_id,
array('show_location' => true, 'show_city' => true, 'show_city_area' => true), $external_propertys);
} else {
// Не выбираем show_location, show_city и show_city_area, т.к. подгружаются через AJAX
$shop->ShowAddress(to_str($GLOBALS['LA']['xsl_delivery_address']), $shop_id,
array('show_location' => false, 'show_city' => false, 'show_city_area' => false),
$external_propertys);
}
}
/* Отображаем доступные доставки */ elseif (isset($_POST['step_2'])) {
/* Сохраняем данные, введенные на первом этапе */
$country = to_int($_POST['country']);
$location = to_int($_POST['location']);
$city = to_int($_POST['sel_city']);
$city_area = to_int($_POST['sel_city_area']);
// Сбрасываем информацию о последнем заказе
$_SESSION['last_order_id'] = 0;
/* Пишем информацию об адресе доставки в сессию */
$_SESSION['country'] = $country;
$_SESSION['location'] = $location;
$_SESSION['city'] = $city;
$_SESSION['city_area'] = $city_area;
$_SESSION['index'] = to_int($_POST['index']);
$_SESSION['full_address'] = to_str($_POST['full_address']);
$_SESSION['site_users_name'] = to_str($_POST['site_users_name']);
$_SESSION['site_users_surname'] = to_str($_POST['site_users_surname']);
$_SESSION['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
$_SESSION['site_users_email'] = to_str($_POST['site_users_email']);
$_SESSION['site_users_phone'] = to_str($_POST['site_users_phone']);
$_SESSION['site_users_fax'] = to_str($_POST['site_users_fax']);
$_SESSION['site_users_company'] = to_str($_POST['site_users_company']);
$_SESSION['description'] = to_str($_POST['description']);
/* Индекс и полный адрес (в массив дополнительных параметров) */
$external_propertys['index'] = to_str($_POST['index']);
$external_propertys['full_address'] = to_str($_POST['full_address']);
/* Получаем количество элементов, их общую цену, вес, валюту для заданного пользователя */
$a_param = $shop->SelectAllItemsFromCartForUser($shop_id, $site_users_id);
/* Выбираем все доступные типы доставки (с группировкой по типу доставки) */
$param = array();
$param['shop_coupon_text'] = to_str($_SESSION['shop_coupon_text']);
// Передаем количество товара
$param['count'] = $a_param['quantity'];
$shop->ShowTypeOfDelivery($shop_id, $country, $location, $city, $city_area, $a_param['weight'],
$a_param['price'], to_str($GLOBALS['LA']['xsl_shop_delivery']), $param, $external_propertys);
}
/* Показываем страницу доступных платежных систем */ elseif (isset($_POST['step_3'])) {
/* Обрабатываем полученные данные о типе доставки */
$_SESSION['cond_of_delivery'] = to_int($_POST['cond_of_delivery']);
/* Расчитываем цену доставки */
/* Получаем данные о магазине */
$shop_row = $shop->GetShop($shop_id);
$row = $shop->GetCondOfDelivery($_SESSION['cond_of_delivery']);
/* идентификатор валюты магазина */
$shop_currency_id = to_int($shop_row['shop_currency_id']);
$coefficient = $shop->GetCurrencyCoefficientToShopCurrency($row['shop_currency_id'],
$shop_currency_id);
$aPriceDelivery = $shop->GetPriceForCondOfDelivery($row['shop_cond_of_delivery_id']);
$price_delivery = sprintf("%.2f", $aPriceDelivery['price_tax'] * $coefficient);
$_SESSION['cond_of_delivery_price'] = $price_delivery;
if ($row && $row['shop_tax_id'] != 0) {
$row_tax = $shop->GetTax($row['shop_tax_id']);
if ($row_tax) {
$_SESSION['cond_of_delivery_price_tax'] = $row_tax['shop_tax_rate'];
} else {
$_SESSION['cond_of_delivery_price_tax'] = 0;
}
} else {
$_SESSION['cond_of_delivery_price_tax'] = 0;
}
/* Выводим платежные системы */
$external_propertys['cond_of_delivery'] = to_int($_POST['cond_of_delivery']);
$shop->ShowSystemOfPay(to_str($GLOBALS['LA']['xsl_system_of_pay']), $external_propertys,
array('shop_shops_id' => $shop_id));
} elseif (isset($_POST['step_4'])) {
/* Если выбрана (существует) платежная система */
if (to_int($_POST['system_of_pay_id']) != 0) {
/* Вызываем обработчик платежной системы */
if (!$shop->ExecSystemsOfPayHandler(to_int($_POST['system_of_pay_id']))) {
/* Не удалось найти обработчик */
show_error_message("Не найден обработчик платежной системы с номером " . to_int
($_POST['system_of_pay_id']));
}
} else {
/* Ошибка, не указана платежная система! */
show_error_message('Ошибка! Не указана ни одна платежная система.');
}
} else {
/* Очищаем сессию */
if (isset($_SESSION['CART'][$shop_id])) {
unset($_SESSION['CART'][$shop_id]);
}
/* Отображаем корзину */
$shop->ShowCart($shop_id, $site_users_id, to_str($GLOBALS['LA']['xsl_cart']),
array('shop_coupon_text' => to_str($_REQUEST['shop_coupon_text'])));
}
} elseif ($site_users_id === 0 || !empty($message)) {
/* Выводим корзину */
$external_propertys = array();
if (!empty($message)) {
$external_propertys['message'] = $message;
}
$external_propertys['site_users_name'] = to_str($_POST['site_users_name']);
$external_propertys['site_users_surname'] = to_str($_POST['site_users_surname']);
$external_propertys['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
$external_propertys['site_users_email'] = to_str($_POST['site_users_email']);
$external_propertys['site_users_phone'] = to_str($_POST['site_users_phone']);
$external_propertys['site_users_fax'] = to_str($_POST['site_users_fax']);
$external_propertys['site_users_address'] = to_str($_POST['site_users_address']);
$external_propertys['site_users_company'] = to_str($_POST['site_users_company']);
$shop->ShowCart($shop_id, $site_users_id, to_str($GLOBALS['LA']['xsl_cart']),
array('shop_coupon_text' => to_str($_REQUEST['shop_coupon_text'])), $external_propertys);
if (class_exists("SiteUsers")) {
/* Выводим форму быстрой регистрации (регистрация для пользователей) */
$GLOBALS['external_propertys']['ПоказатьАвторизацию'] = 'true';
$SiteUsers->ShowSiteUserRegistartion($site_users_id, to_str($GLOBALS['LA']['xsl_quick_registration']),
$GLOBALS['external_propertys']);
}
} else {
?>
Вам необходимо подтвердить регистрацию!
<?php
}
?>
$shop = &singleton('shop');
if (class_exists("SiteUsers")) {
/* Получаем id текущего пользователя сайта */
$SiteUsers = &singleton('SiteUsers');
$site_users_id = $SiteUsers->GetCurrentSiteUser();
} else {
$site_users_id = false;
}
######################################################
### Обработка принятия заказа от платежной системы ###
######################################################
// ------------------------------------------------
// Подготовка редиректа для PayPal
// ------------------------------------------------
if (isset($_POST['paymentType'])) {
// Получаем ID заказа
$order_id = to_int($_POST['order_id']);
$order_row = $shop->GetOrder($order_id);
if ($order_row) {
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
// ------------------------------------------------
// Обработка уведомления об оплате от RBK Money
// ------------------------------------------------
if (isset($_POST['paymentStatus']) || isset($_GET['PayPalOrderConfirmation'])) {
// Получаем ID заказа
$order_id = to_int($_POST['orderId']);
$order_row = $shop->GetOrder($order_id);
if ($order_row) {
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
// ------------------------------------------------
// Обработка уведомления об оплате от WebMoney
// ------------------------------------------------
if (isset($_POST['LMI_PAYEE_PURSE'])) {
// Получаем ID заказа
$order_id = to_int($_POST['LMI_PAYMENT_NO']);
$order_row = $shop->GetOrder($order_id);
if ($order_row) {
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
// ------------------------------------------------
// Вывод информации о статусе платежа после его совершения и перенаправления с платежной системы
// ------------------------------------------------
if (isset($_REQUEST['payment']) && isset($_REQUEST['order_id'])) {
// Получаем ID заказа
$order_id = to_int($_REQUEST['order_id']);
$order_row = $shop->GetOrder($order_id);
// Если заказ принадлежит текущему авторизированному пользователю
if ($order_row['site_users_id'] == $site_users_id) {
if (to_str($_REQUEST['payment']) == 'success') {
?><h1>Подтверждение платежа</h1>
<p>Спасибо, информация об оплате заказа <strong>№ <?php echo $order_row['shop_order_account_number'] ?></strong>
получена.</p>
<?php
} else {
?><h1>Платеж не получен</h1>
<p>К сожалению при оплате заказа <strong>№ <?php echo $order_row['shop_order_account_number'] ?></strong>
произошла ошибка.</p>
<?php
}
}
// Для случаев, когда отключен модуль "Пользователи сайта"
elseif ($site_users_id === false) {
?><h1>Подтверждение платежа</h1>
<p>Благодарим за посещение нашего магазина!</p>
<?php
} else {
?><h1>Ошибка</h1>
<p>Неверный номер заказа!</p>
<?php
}
// Прерываем выполнение типовой динамической страницы
return true;
}
// ------------------------------------------------
// Обработка уведомления об оплате от ROBOKASSA
// ------------------------------------------------
if (isset($_REQUEST['SignatureValue'])) {
// Получаем ID заказа
$order_id = to_int($_REQUEST['InvId']);
$order_row = $shop->GetOrder($order_id);
if ($order_row) {
// Вызов обработчика платежной системы
$shop->ExecSystemsOfPayHandler($order_row['shop_system_of_pay_id']);
}
}
############################################################
### [END] Обработка принятия заказа от платежной системы ###
############################################################
/* Идентификатор интернет-магазина */
$shop_id = to_int($GLOBALS['LA']['shop_id']);
/* Проверяем наличие текущего пользователя */
/* Пользователь не авторизироаан */
if ($site_users_id == 0) {
/* Быстрая регистрация пользователя */
if (isset($_POST['step1_2'])) {
/* пароль необязателен при обновлении данных о пользователе */
if (isset($_POST['site_users_login']) && isset($_POST['site_users_password']) &&
isset($_POST['site_users_email']) && isset($_POST['site_users_password_retry']) &&
strpos($_POST['site_users_login'], 'http://') === false
// Логин не начинается с http://
) {
if (to_str($_POST['site_users_password']) == to_str($_POST['site_users_password_retry'])) {
// В массив дополнительных параметров пишем адрес магазина
$shop_row = $shop->GetShop($shop_id);
// Получаем путь к магазину
$Structure = &singleton('Structure');
$shop_path = "/" . $Structure->GetStructurePath($shop_row['structure_id'], 0);
$param['location'] = $shop_path . "cart/";
$param['site_users_login'] = to_str($_POST['site_users_login']);
$param['site_users_password'] = to_str($_POST['site_users_password']);
$param['site_users_email'] = to_str($_POST['site_users_email']);
$param['site_users_name'] = to_str($_POST['site_users_name']);
$param['site_users_surname'] = to_str($_POST['site_users_surname']);
$param['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
$param['site_users_country'] = to_str($_POST['site_users_country']);
$param['site_users_company'] = to_str($_POST['site_users_company']);
$param['site_users_phone'] = to_str($_POST['site_users_phone']);
// Группа по умолчанию
$param['site_users_group_id'] = $SiteUsers->GetDefaultGroup();
$param['xslname'] = to_str($GLOBALS['LA']['xsl_registaration_letter']);
/* Не отправлять письмо о подтверждении регистрации,
необходим при автоматическом подтрвеждении регистрации (ниже подтверждение) */
/*
ДАННЫЙ ПАРАМЕТР НЕОБХОДИМО УСТАНОВИТЬ, ЕСЛИ НЕ ТРЕБУЕТСЯ ПОДТВЕРЖДЕНИЕ РЕГИСТРАЦИИ
ПОЛЬЗОВАТЕЛЯ ПОСЛЕ БЫСТРОГО ЗАКАЗА
*/
$param['not_send_mail_confirm'] = true;
// добавляем пользователя, отправляем уведомление о регистрации
$result = $SiteUsers->InsertSiteUser($param);
/* Если не отправляли подтверждение - */
if ($result > 0 && $param['not_send_mail_confirm']) {
/* Подтверждаем регистрацию */
$SiteUsers->SetConfirmationID($result);
/* Авторизируем пользователя */
$SiteUsers->SetCurrentSiteUser($result);
$site_users_id = $result;
/* Перенсоим товары из cookies в корзину пользователя */
$shop->GetItemsFromCookiesToCart($site_users_id);
// Проверяем куки пользователя на предмет наличия в них логина аффилиата
if (isset($_COOKIE['affiliate_name'])) {
$affiliate = new affiliate();
$affiliate_login = quote_smart($_COOKIE['affiliate_name']);
$affiliate_row = $SiteUsers->GetSiteUserByLogin($affiliate_login);
if ($affiliate_row) {
$affiliate_id = $affiliate_row['site_users_id'];
// Проводим вставку пользователя аффилиата
$affiliate->InsertAffiliate(array('site_users_id' => $result,
'affiliate_plans_id' => 0, 'affiliate_site_users_id' => $affiliate_id,
'affiliate_active' => 1));
}
}
}
/* Если пользователь зарегистрирован и необходимо подтверждать авторизацию */
if ($result > 0 && !$param['not_send_mail_confirm']) {
?>
<h1>Спасибо за регистрацию</h1>
<p>Для продолжения работы необходимо подтвердить регистрацию Ваших
данных. В Ваш адрес отправлено письмо, содержащее ссылку для
подтверждения регистрации.</p>
<?php
}
// Проверяем наличие ошибки при регистрации
if ($result < 0) {
// -3 - Пользователь с таким логином зарегистрирован ранее
// -2 - Пользователь с таким e-mail зарегистрирован ранее
// -1 - Введен некорректный e-mail
$GLOBALS['external_propertys']['error'] = $result;
}
} else {
$GLOBALS['external_propertys']['error'] = -7;
/*Повторный пароль введен неверно*/
}
} else {
$GLOBALS['external_propertys']['error'] = -4;
/* Пожалуйста, задайте все обязательные параметры */
}
}
}
/* Если отключен модуль пользователей сайта */
if (isset($_POST['step_1_1a']) && isset($_POST['step_1'])) {
if (strlen(to_str($_POST['site_users_name'])) < 1) {
$message = 'Введите имя!';
}
if (strlen(to_str($_POST['site_users_surname'])) < 1) {
$message = 'Введите фамилию!';
}
if (strlen(to_str($_POST['site_users_email'])) < 1 || !valid_email(to_str($_POST['site_users_email']))) {
$message = 'Введите e-mail!';
}
}
if (empty($message) && ($site_users_id > 0 || $site_users_id === false)) {
/* Ввод адреса доставки */
if (isset($_POST['step_1'])) {
$external_propertys = array();
/* Если отключен модуль пользователей сайта, то вызывается этот подэтап */
if (isset($_POST['step_1_1a'])) {
/* Данные о пользователе передаем через внешние параметры и сохраним в сессию */
$external_propertys['site_users_name'] = $_SESSION['site_users_name'] = to_str($_POST['site_users_name']);
$external_propertys['site_users_surname'] = $_SESSION['site_users_surname'] =
to_str($_POST['site_users_surname']);
$external_propertys['site_users_patronymic'] = $_SESSION['site_users_patronymic'] =
to_str($_POST['site_users_patronymic']);
$external_propertys['site_users_email'] = $_SESSION['site_users_email'] = to_str($_POST['site_users_email']);
$external_propertys['site_users_phone'] = $_SESSION['site_users_phone'] = to_str($_POST['site_users_phone']);
$external_propertys['site_users_fax'] = $_SESSION['site_users_fax'] = to_str($_POST['site_users_fax']);
$external_propertys['site_users_address'] = $_SESSION['site_users_address'] =
to_str($_POST['site_users_address']);
$external_propertys['site_users_company'] = $_SESSION['site_users_company'] =
to_str($_POST['site_users_company']);
} else {
$aInfoSiteUser = $SiteUsers->GetSiteUser($site_users_id);
$external_propertys['site_users_name'] = $_SESSION['site_users_name'] = to_str($aInfoSiteUser['site_users_name']);
$external_propertys['site_users_surname'] = $_SESSION['site_users_surname'] =
to_str($aInfoSiteUser['site_users_surname']);
$external_propertys['site_users_patronymic'] = $_SESSION['site_users_patronymic'] =
to_str($aInfoSiteUser['site_users_patronymic']);
$external_propertys['site_users_email'] = $_SESSION['site_users_email'] = to_str($aInfoSiteUser['site_users_email']);
$external_propertys['site_users_phone'] = $_SESSION['site_users_phone'] = to_str($aInfoSiteUser['site_users_phone']);
$external_propertys['site_users_fax'] = $_SESSION['site_users_fax'] = to_str($aInfoSiteUser['site_users_fax']);
$external_propertys['site_users_address'] = $_SESSION['site_users_address'] =
to_str($aInfoSiteUser['site_users_address']);
$external_propertys['site_users_company'] = $_SESSION['site_users_company'] =
to_str($aInfoSiteUser['site_users_company']);
$external_propertys['site_users_postcode'] = $_SESSION['index'] = to_str($aInfoSiteUser['site_users_postcode']);
}
/* Запоминаем купон */
$_SESSION['shop_coupon_text'] = to_str($_POST['shop_coupon_text']);
// Определяем город пользователя
@include_once (CMS_FOLDER . '/modules/geoip.class.php');
if (defined('IPGEO_SERVER')) {
$user_ip = ($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : getenv("HTTP_X_FORWARDED_FOR");
$IPGeo = new IPGeo($user_ip);
$city = trim(to_str($IPGeo->ip($user_ip)));
if ($city) {
$cities = $shop->GetAllCity();
while ($city_row = mysql_fetch_assoc($cities)) {
if (strtolower($city_row['shop_city_name']) == strtolower($city)) {
$city_id = $city_row['shop_city_id'];
$location_id = $city_row['shop_location_id'];
break;
}
}
if (isset($city_id)) {
$location_row = $shop->GetLocation($location_id);
$country_id = $location_row['shop_country_id'];
}
}
}
/* Отображаем форму ввода адреса */
if (isset($city_id)) {
$external_propertys['city_id'] = $city_id;
$external_propertys['location_id'] = $location_id;
$external_propertys['country_id'] = $country_id;
$shop->ShowAddress(to_str($GLOBALS['LA']['xsl_delivery_address']), $shop_id,
array('show_location' => true, 'show_city' => true, 'show_city_area' => true), $external_propertys);
} else {
// Не выбираем show_location, show_city и show_city_area, т.к. подгружаются через AJAX
$shop->ShowAddress(to_str($GLOBALS['LA']['xsl_delivery_address']), $shop_id,
array('show_location' => false, 'show_city' => false, 'show_city_area' => false),
$external_propertys);
}
}
/* Отображаем доступные доставки */ elseif (isset($_POST['step_2'])) {
/* Сохраняем данные, введенные на первом этапе */
$country = to_int($_POST['country']);
$location = to_int($_POST['location']);
$city = to_int($_POST['sel_city']);
$city_area = to_int($_POST['sel_city_area']);
// Сбрасываем информацию о последнем заказе
$_SESSION['last_order_id'] = 0;
/* Пишем информацию об адресе доставки в сессию */
$_SESSION['country'] = $country;
$_SESSION['location'] = $location;
$_SESSION['city'] = $city;
$_SESSION['city_area'] = $city_area;
$_SESSION['index'] = to_int($_POST['index']);
$_SESSION['full_address'] = to_str($_POST['full_address']);
$_SESSION['site_users_name'] = to_str($_POST['site_users_name']);
$_SESSION['site_users_surname'] = to_str($_POST['site_users_surname']);
$_SESSION['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
$_SESSION['site_users_email'] = to_str($_POST['site_users_email']);
$_SESSION['site_users_phone'] = to_str($_POST['site_users_phone']);
$_SESSION['site_users_fax'] = to_str($_POST['site_users_fax']);
$_SESSION['site_users_company'] = to_str($_POST['site_users_company']);
$_SESSION['description'] = to_str($_POST['description']);
/* Индекс и полный адрес (в массив дополнительных параметров) */
$external_propertys['index'] = to_str($_POST['index']);
$external_propertys['full_address'] = to_str($_POST['full_address']);
/* Получаем количество элементов, их общую цену, вес, валюту для заданного пользователя */
$a_param = $shop->SelectAllItemsFromCartForUser($shop_id, $site_users_id);
/* Выбираем все доступные типы доставки (с группировкой по типу доставки) */
$param = array();
$param['shop_coupon_text'] = to_str($_SESSION['shop_coupon_text']);
// Передаем количество товара
$param['count'] = $a_param['quantity'];
$shop->ShowTypeOfDelivery($shop_id, $country, $location, $city, $city_area, $a_param['weight'],
$a_param['price'], to_str($GLOBALS['LA']['xsl_shop_delivery']), $param, $external_propertys);
}
/* Показываем страницу доступных платежных систем */ elseif (isset($_POST['step_3'])) {
/* Обрабатываем полученные данные о типе доставки */
$_SESSION['cond_of_delivery'] = to_int($_POST['cond_of_delivery']);
/* Расчитываем цену доставки */
/* Получаем данные о магазине */
$shop_row = $shop->GetShop($shop_id);
$row = $shop->GetCondOfDelivery($_SESSION['cond_of_delivery']);
/* идентификатор валюты магазина */
$shop_currency_id = to_int($shop_row['shop_currency_id']);
$coefficient = $shop->GetCurrencyCoefficientToShopCurrency($row['shop_currency_id'],
$shop_currency_id);
$aPriceDelivery = $shop->GetPriceForCondOfDelivery($row['shop_cond_of_delivery_id']);
$price_delivery = sprintf("%.2f", $aPriceDelivery['price_tax'] * $coefficient);
$_SESSION['cond_of_delivery_price'] = $price_delivery;
if ($row && $row['shop_tax_id'] != 0) {
$row_tax = $shop->GetTax($row['shop_tax_id']);
if ($row_tax) {
$_SESSION['cond_of_delivery_price_tax'] = $row_tax['shop_tax_rate'];
} else {
$_SESSION['cond_of_delivery_price_tax'] = 0;
}
} else {
$_SESSION['cond_of_delivery_price_tax'] = 0;
}
/* Выводим платежные системы */
$external_propertys['cond_of_delivery'] = to_int($_POST['cond_of_delivery']);
$shop->ShowSystemOfPay(to_str($GLOBALS['LA']['xsl_system_of_pay']), $external_propertys,
array('shop_shops_id' => $shop_id));
} elseif (isset($_POST['step_4'])) {
/* Если выбрана (существует) платежная система */
if (to_int($_POST['system_of_pay_id']) != 0) {
/* Вызываем обработчик платежной системы */
if (!$shop->ExecSystemsOfPayHandler(to_int($_POST['system_of_pay_id']))) {
/* Не удалось найти обработчик */
show_error_message("Не найден обработчик платежной системы с номером " . to_int
($_POST['system_of_pay_id']));
}
} else {
/* Ошибка, не указана платежная система! */
show_error_message('Ошибка! Не указана ни одна платежная система.');
}
} else {
/* Очищаем сессию */
if (isset($_SESSION['CART'][$shop_id])) {
unset($_SESSION['CART'][$shop_id]);
}
/* Отображаем корзину */
$shop->ShowCart($shop_id, $site_users_id, to_str($GLOBALS['LA']['xsl_cart']),
array('shop_coupon_text' => to_str($_REQUEST['shop_coupon_text'])));
}
} elseif ($site_users_id === 0 || !empty($message)) {
/* Выводим корзину */
$external_propertys = array();
if (!empty($message)) {
$external_propertys['message'] = $message;
}
$external_propertys['site_users_name'] = to_str($_POST['site_users_name']);
$external_propertys['site_users_surname'] = to_str($_POST['site_users_surname']);
$external_propertys['site_users_patronymic'] = to_str($_POST['site_users_patronymic']);
$external_propertys['site_users_email'] = to_str($_POST['site_users_email']);
$external_propertys['site_users_phone'] = to_str($_POST['site_users_phone']);
$external_propertys['site_users_fax'] = to_str($_POST['site_users_fax']);
$external_propertys['site_users_address'] = to_str($_POST['site_users_address']);
$external_propertys['site_users_company'] = to_str($_POST['site_users_company']);
$shop->ShowCart($shop_id, $site_users_id, to_str($GLOBALS['LA']['xsl_cart']),
array('shop_coupon_text' => to_str($_REQUEST['shop_coupon_text'])), $external_propertys);
if (class_exists("SiteUsers")) {
/* Выводим форму быстрой регистрации (регистрация для пользователей) */
$GLOBALS['external_propertys']['ПоказатьАвторизацию'] = 'true';
$SiteUsers->ShowSiteUserRegistartion($site_users_id, to_str($GLOBALS['LA']['xsl_quick_registration']),
$GLOBALS['external_propertys']);
}
} else {
?>
Вам необходимо подтвердить регистрацию!
<?php
}
?>
Заказов не беру. Консультирую редко.
Вот это жесть - не работает у меня и этот полный код...
Причем когда ставлю код из стандатртной поставки - все работает...
Значит видимо вставляю я код правильно, что-то в самом коде странное, что не везде работает...
Причем когда ставлю код из стандатртной поставки - все работает...
Значит видимо вставляю я код правильно, что-то в самом коде странное, что не везде работает...
Стукнитесь в аську с доступом, погляжу в чем дело.
Заказов не беру. Консультирую редко.
А причина-то была даже не в ТДС, а в хостинге и классе для работы с сервисом.
Код класса, приведенный на первой странице работает только на хостингах с PHP5. Для хостингов с PHP4 следует использовать вот такой класс:
Код класса, приведенный на первой странице работает только на хостингах с PHP5. Для хостингов с PHP4 следует использовать вот такой класс:
<?php
// файл /modules/geoip.class.php
only for PHP4!
/*
This program is free software. You can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License.
Home:
Author: Egor N. Zuskin
Adapted for HostCMS on PHP4 by James V. Kotoff
Simple for php:
$ipList = new IPGeo("xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx");
print $ipList->ip("xxx.xxx.xxx.xxx"); // city: xxxx
or
$ipList = new IPGeo(array("xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx"));
print $ipList->ip("xxx.xxx.xxx.xxx","region"); // region: xxxx
or
$ipList = new IPGeo("xxx.xxx.xxx.xxx");
print $ipList->ip("xxx.xxx.xxx.xxx", "district"); // district: xxxx
*/
DEFINE("IPGEO_SERVER", "194.85.91.253"); // сервер ip geo
DEFINE("IPGEO_SERVER_PORT", 8090); // порт
DEFINE("IPGEO_DEFAULT_PARAM", "city"); // поле возвращаемое поумолчанию
DEFINE("IPGEO_DEBUG", false); // признак отладки (не обращается к серверу)
/**
* @author ice
* Класс для получения ip адресов с сервиса ipgeobase.ru
*/
class IPGeo
{
var $xml = ""; // текст возвращаемого xml
var $ip_arr = array(); // массив ip адресов
var $fields_arr = array("all"); // список запрашиваемых полей
// var $fields_arr = array("city");
var $cache = array(); // кешь ответа
/**
* Создание класса и запрос к серверу
* @param $AIpList список ip адресов, строкой либо строкой через запятую либо массивом
* @return bool
*/
function IPGeo($AIpList)
{
if (IPGEO_DEBUG) {
return true;
}
if (is_array($AIpList)) {
$ip_arr = $AIpList;
} else {
if (strpos($AIpList, ",") === false) {
$ip_arr = array(trim($AIpList));
} else {
$ip_arr = explode(",", trim($AIpList));
}
}
$ip_arr = array_unique($ip_arr);
$ip_arr = $this->check_ip_list_valid($ip_arr);
if (count($ip_arr) == 0)
return false;
$ips = "<ip>" . implode("</ip><ip>", $ip_arr) . "</ip>";
$fields = "<" . implode("/><", $this->fields_arr) . "/>";
$post_string = "<ipquery><fields>" . $fields . "</fields><ip-list>" . $ips .
"</ip-list></ipquery>";
if (!$socket = fsockopen(IPGEO_SERVER, IPGEO_SERVER_PORT))
return false;
$query = "POST /geo/geo.html HTTP/1.1\r\n";
$query .= "Content-Length: " . strlen($post_string) . "\r\n";
$query .= "\r\n";
$query .= $post_string;
$query .= "\r\n\r\n";
$response = "";
fwrite($socket, $query);
while (!feof($socket)) {
$response .= fgets($socket, 2048);
}
fclose($socket);
$this->xml = trim(substr($response, strpos($response, "\r\n\r\n")));
return true;
}
/**
* Возвращает запрошенное поле для ip адреса
* @param $AIp IP адрес
* @param $AFieldName Поле
* @return string
*/
function ip($AIp, $AFieldName = IPGEO_DEFAULT_PARAM)
{
if (IPGEO_DEBUG) {
return false;
}
if ($this->xml) {
$arr = $this->xml2array($this->xml, true);
foreach ($arr as $ip_data) {
if (isset($ip_data['message']) && $ip_data['message'] != '')
return false;
if (isset($ip_data[$AFieldName]) && $ip_data[$AFieldName] != '')
return $ip_data[$AFieldName];
}
}
return false;
}
/**
* Возвращает список правельных ip адресов проверенных по маске xxx.xxx.xxx.xxx < 256
* @param $AIpList масив ip адресов
* @return array
*/
function check_ip_list_valid($AIpList)
{
$return = array();
foreach ($AIpList as $ip) {
if (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}).([0-9]{1,3})", $ip, $par)) {
if ($par[1] < 256 && $par[2] < 256 && $par[3] < 256 && $par[4] < 256) {
$return[] = $ip;
}
}
}
return $return;
}
function xml2array($originalXML, $attributes = true)
{
$xmlArray = array();
$search = $attributes ? '|<((\S+)(.*))\s*>(.*)</\2>|Ums' : '|<((\S+)()).*>(.*)</\2>|Ums';
// normalize data
$xml = preg_replace('|>\s*<|', ">\n<", $originalXML); // one tag per line
$xml = preg_replace('|<\?.*\?>|', '', $xml); // remove XML declarations
$xml = preg_replace('|<(\S+?)(.*)/>|U', '<$1$2></$1>', $xml); //Expand singletons
if (!preg_match_all($search, $xml, $xmlMatches))
return trim($originalXML); // bail out - no XML found
foreach ($xmlMatches[1] as $index => $key) {
if (!isset($xmlArray[$key]))
$xmlArray[$key] = array();
// $xmlArray[$key][] = $this->xml2array($xmlMatches[4][$index], $attributes); // для более сложных структур
$xmlArray[$key] = $this->xml2array($xmlMatches[4][$index], $attributes);
}
return $xmlArray;
}
}
?>
// файл /modules/geoip.class.php
only for PHP4!
/*
This program is free software. You can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License.
Home:
Author: Egor N. Zuskin
Adapted for HostCMS on PHP4 by James V. Kotoff
Simple for php:
$ipList = new IPGeo("xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx");
print $ipList->ip("xxx.xxx.xxx.xxx"); // city: xxxx
or
$ipList = new IPGeo(array("xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx"));
print $ipList->ip("xxx.xxx.xxx.xxx","region"); // region: xxxx
or
$ipList = new IPGeo("xxx.xxx.xxx.xxx");
print $ipList->ip("xxx.xxx.xxx.xxx", "district"); // district: xxxx
*/
DEFINE("IPGEO_SERVER", "194.85.91.253"); // сервер ip geo
DEFINE("IPGEO_SERVER_PORT", 8090); // порт
DEFINE("IPGEO_DEFAULT_PARAM", "city"); // поле возвращаемое поумолчанию
DEFINE("IPGEO_DEBUG", false); // признак отладки (не обращается к серверу)
/**
* @author ice
* Класс для получения ip адресов с сервиса ipgeobase.ru
*/
class IPGeo
{
var $xml = ""; // текст возвращаемого xml
var $ip_arr = array(); // массив ip адресов
var $fields_arr = array("all"); // список запрашиваемых полей
// var $fields_arr = array("city");
var $cache = array(); // кешь ответа
/**
* Создание класса и запрос к серверу
* @param $AIpList список ip адресов, строкой либо строкой через запятую либо массивом
* @return bool
*/
function IPGeo($AIpList)
{
if (IPGEO_DEBUG) {
return true;
}
if (is_array($AIpList)) {
$ip_arr = $AIpList;
} else {
if (strpos($AIpList, ",") === false) {
$ip_arr = array(trim($AIpList));
} else {
$ip_arr = explode(",", trim($AIpList));
}
}
$ip_arr = array_unique($ip_arr);
$ip_arr = $this->check_ip_list_valid($ip_arr);
if (count($ip_arr) == 0)
return false;
$ips = "<ip>" . implode("</ip><ip>", $ip_arr) . "</ip>";
$fields = "<" . implode("/><", $this->fields_arr) . "/>";
$post_string = "<ipquery><fields>" . $fields . "</fields><ip-list>" . $ips .
"</ip-list></ipquery>";
if (!$socket = fsockopen(IPGEO_SERVER, IPGEO_SERVER_PORT))
return false;
$query = "POST /geo/geo.html HTTP/1.1\r\n";
$query .= "Content-Length: " . strlen($post_string) . "\r\n";
$query .= "\r\n";
$query .= $post_string;
$query .= "\r\n\r\n";
$response = "";
fwrite($socket, $query);
while (!feof($socket)) {
$response .= fgets($socket, 2048);
}
fclose($socket);
$this->xml = trim(substr($response, strpos($response, "\r\n\r\n")));
return true;
}
/**
* Возвращает запрошенное поле для ip адреса
* @param $AIp IP адрес
* @param $AFieldName Поле
* @return string
*/
function ip($AIp, $AFieldName = IPGEO_DEFAULT_PARAM)
{
if (IPGEO_DEBUG) {
return false;
}
if ($this->xml) {
$arr = $this->xml2array($this->xml, true);
foreach ($arr as $ip_data) {
if (isset($ip_data['message']) && $ip_data['message'] != '')
return false;
if (isset($ip_data[$AFieldName]) && $ip_data[$AFieldName] != '')
return $ip_data[$AFieldName];
}
}
return false;
}
/**
* Возвращает список правельных ip адресов проверенных по маске xxx.xxx.xxx.xxx < 256
* @param $AIpList масив ip адресов
* @return array
*/
function check_ip_list_valid($AIpList)
{
$return = array();
foreach ($AIpList as $ip) {
if (ereg("([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3}).([0-9]{1,3})", $ip, $par)) {
if ($par[1] < 256 && $par[2] < 256 && $par[3] < 256 && $par[4] < 256) {
$return[] = $ip;
}
}
}
return $return;
}
function xml2array($originalXML, $attributes = true)
{
$xmlArray = array();
$search = $attributes ? '|<((\S+)(.*))\s*>(.*)</\2>|Ums' : '|<((\S+)()).*>(.*)</\2>|Ums';
// normalize data
$xml = preg_replace('|>\s*<|', ">\n<", $originalXML); // one tag per line
$xml = preg_replace('|<\?.*\?>|', '', $xml); // remove XML declarations
$xml = preg_replace('|<(\S+?)(.*)/>|U', '<$1$2></$1>', $xml); //Expand singletons
if (!preg_match_all($search, $xml, $xmlMatches))
return trim($originalXML); // bail out - no XML found
foreach ($xmlMatches[1] as $index => $key) {
if (!isset($xmlArray[$key]))
$xmlArray[$key] = array();
// $xmlArray[$key][] = $this->xml2array($xmlMatches[4][$index], $attributes); // для более сложных структур
$xmlArray[$key] = $this->xml2array($xmlMatches[4][$index], $attributes);
}
return $xmlArray;
}
}
?>
Заказов не беру. Консультирую редко.
Добавить
еще надо, чтоб районы подгрузились.
<script type="text/javascript">document.forms[0].sel_city.onchange();</script>
еще надо, чтоб районы подгрузились.
VAshot, так районы вроде не заполнены нигде.
Заказов не беру. Консультирую редко.
Так забить, кому надо. Если город берется при заполнении через xml из системной базы городов, то район возьмется из пользовательской.
Хром отрабатывает нормально, а опера что-то глючила
вот с таким кодом перестала. в чем суть тормоза - не понятно.
Хром отрабатывает нормально, а опера что-то глючила
setTimeout("document.forms[0].sel_city.onchange()", 1000);
вот с таким кодом перестала. в чем суть тормоза - не понятно.
oriflame, сервис по первой ссылке определил что я в России
Приятно, но определения с точностью до страны в данном случае маловато )
Сервис по второй ссылке перепутал Санкт-Петербург с Калининградом
хотя спорный IP Екатеринбургского Билайна (который половиной сайтов определяется как московский) он определил верно.
И к сожалению, ни у первого ни у второго сервиса нет XML-интерфейса. На одной из страниц ip2city я обнаружил что можно
Цитата:

Как-то так
Приятно, но определения с точностью до страны в данном случае маловато )Сервис по второй ссылке перепутал Санкт-Петербург с Калининградом
хотя спорный IP Екатеринбургского Билайна (который половиной сайтов определяется как московский) он определил верно. И к сожалению, ни у первого ни у второго сервиса нет XML-интерфейса. На одной из страниц ip2city я обнаружил что можно
Цитата:
можно воспользоваться главной страницей или веб-сервисом, обратившись по URL: где вместо 0.0.0.0 необходимо подставить интересующий IP адрес.
, но обращение по этой ссылке с моим IP показало мне 404ю ошибку 
Как-то так

Заказов не беру. Консультирую редко.
Авторизация