0 Пользователей и 1 Гость просматривают эту тему.
  • 20 Ответов
  • 11990 Просмотров
*

Adam Bazaroff

  • Захожу иногда
  • 112
  • 10 / 5
Запрос имеет вид

insert into jos_vm_state (state_id, country_id, state_name, state_3_code, state_2_code) values ('166', '176', 'Адыгея Республика', '385', '01');

где 
'166' - Начало нумерации штатов. (165 - последний штат, который ставится по-умолчанию в VM) Это число можно узнать в таблице jos_vm_state (Статистика ряда, Ряды: XXX)
'176' - это код принадлежности штата к стране 176 (Россия)
'Адыгея Республика' - собственно сам штат.
'385' - Первые три цифры одного из индексов штата (в VM - это 3х-буквенная аббревиатура) /уникальное число/
'01' - в VM - это 2х-буквенная аббревиатура /уникальное число/

2х и 3х буквенные аббревиатуры - излишек, который для России не нужен, но эти поля обязательны для VM и должны быть уникальными. Эти аббревиатуры затем показываются перед адресами. Править придется ручками в коде VM.

Чтобы запустить запрос, откройте phpMyAdmin и выберите вкладку SQL. Затем скопируйте содержимое прикрепленного файла в область "Выполнить SQL запрос(ы) на БД" и нажмите кнопку "Пошел".
Всего добавляется 88 областей.

Внимание! Во избежание неприятностей - обязательно сделайте BACKUP базы!

[вложение удалено Администратором]
« Последнее редактирование: 16.04.2009, 17:21:57 от beagler »
*

Adam Bazaroff

  • Захожу иногда
  • 112
  • 10 / 5
Re: [howto] Делаем области России (штаты)
« Ответ #1 : 09.11.2006, 02:00:36 »
Осталась жестокая проблема с цифрами, вместо нормального названия региона в заказе. Т.е. вместо региона "Магаданская область" в заказе будет написано "39", вместо "Приморский край" - "54"...
Я попытался реализовать отображения хотябы в админке.
Редактируем файл order.order_print.php

Вместо строки 184
Код
<td width="65%"><?php $dbt->p("state"); ?>

Ставим
Код
<td width="65%"><?php
$dbzz = new ps_DB;
$dbzz->query( "SELECT state_name FROM #__{vm}_state WHERE state_2_code = '".$dbt->f("state")."'");
$dbzz->next_record();
echo $dbzz->f("state_name");?>

Со строкой 255 проделываем тоже самое (только тег </td> не надо удалять).
Теперь в админке всё работает. Буду копать дальше...
« Последнее редактирование: 09.11.2006, 02:06:34 от Adam Bazaroff »

Re: [howto] Делаем области России (штаты)
« Ответ #2 : 21.11.2006, 14:45:25 »
При проблемах с кодировкой
Динамика, млин... это как я понимаю баг самого ПХП... он при вызове функции htmlentities с пустым параметром charset не отлавливает его (как меж прочим заявлено) из системы...
решил так
в файле "administrator/components/com_virtuemart/classes/ps_html.php"
строка 247 (VM 1.0.7)
заменить htmlentities($dbs->f('state_name'), ENT_QUOTES); на htmlentities($dbs->f('state_name'), ENT_QUOTES'windows-1251');
« Последнее редактирование: 04.01.2007, 12:08:45 от tug »
*

tug

  • Захожу иногда
  • 333
  • 40 / 4
Re: [howto] Делаем области России (штаты)
« Ответ #3 : 04.01.2007, 12:11:49 »
Выкладываю новую версию.
Файл с расширение sql
Данному файлу всё равно есть ли у вас в базе данных штаты и сколько их. Просто залейте его удобным вам способом.
Внимание! Данный файл только для баз с префиксом jos_vm

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

Adam Bazaroff

  • Захожу иногда
  • 112
  • 10 / 5
Re: [howto] Делаем области России (штаты)
« Ответ #4 : 04.01.2007, 13:06:22 »
А какие изменения произошли? Стоит ли обновлять существующие штаты?
*

tug

  • Захожу иногда
  • 333
  • 40 / 4
Re: [howto] Делаем области России (штаты)
« Ответ #5 : 04.01.2007, 13:09:05 »
Нет, твой файл. Просто я сделал чтоб им номера автоматом назначались, т.к. в 1.0.8 штатов больше, а некоторые на пустой магазин добавляют и тоже с 166 как-то неправильно.
*

Adam Bazaroff

  • Захожу иногда
  • 112
  • 10 / 5
Re: [howto] Делаем области России (штаты)
« Ответ #6 : 04.01.2007, 14:47:43 »
Новые штаты появились?.. Как бы их добавить при обновлении с 1.0.7 до 1.0.8...

Re: [howto] Делаем области России (штаты)
« Ответ #7 : 06.01.2007, 09:18:24 »
Большое спасибо, все работает!!!

Единственно, я зашел в офрмление заказа и надеялся. что эта информация появится в адресе доставки, но там запрашивается только страна...

Как сделать так, чтобы клиент вносил еще регион?
*

tug

  • Захожу иногда
  • 333
  • 40 / 4
Re: [howto] Делаем области России (штаты)
« Ответ #8 : 07.01.2007, 17:24:08 »
В настройках магазина установить опцию "Разрешить указывать регион"

Re: [howto] Делаем области России (штаты)
« Ответ #9 : 08.01.2007, 12:03:01 »
Опа... не все работает. Кодировка не определилась, выскакивают "кракозябы".

Где это можно подправить?

Кстати, никак не решу проблему с тем, что везде выскакивает дата в английском написании...

Re: [howto] Делаем области России (штаты)
« Ответ #10 : 08.01.2007, 12:11:03 »
Извените, не прочитал сразу.... Проблема решилась и в 108.


При проблемах с кодировкой
Динамика, млин... это как я понимаю баг самого ПХП... он при вызове функции htmlentities с пустым параметром charset не отлавливает его (как меж прочим заявлено) из системы...
решил так
в файле "administrator/components/com_virtuemart/classes/ps_html.php"
строка 247 (VM 1.0.7)
заменить htmlentities($dbs->f('state_name'), ENT_QUOTES); на htmlentities($dbs->f('state_name'), ENT_QUOTES'windows-1251');

*

AZ

  • Осваиваюсь на форуме
  • 30
  • 3 / 4
  • Здесь вам не ТУТ...
Re: [howto] Делаем области России (штаты)
« Ответ #11 : 24.05.2007, 19:53:50 »
Цитировать
Всего добавляется 88 областей.
Вроде бы областей 89 :o и цифровая нумерация регионов указанная в файле не соответствует реальной.
Да, а кто-нибудь умудрился добиться отображения (в "Информация о заказе") области в нормальном виде , то есть не цифрами?  :'(
« Последнее редактирование: 18.07.2007, 12:23:17 от AZ »
*

AZ

  • Осваиваюсь на форуме
  • 30
  • 3 / 4
  • Здесь вам не ТУТ...
Re: [howto] Делаем области России (штаты)
« Ответ #12 : 18.07.2007, 12:20:36 »
Господа-товарищи, чего-то никаких движений в этой актуальной теме.
Если я правильно понимаю.., отображения (в информации о заказе) названия региона прописью, а не цифрами добиться не получится?  :(
Вероятно это интересно только мне.

Re: [howto] Делаем области России (штаты)
« Ответ #13 : 01.08.2007, 14:52:39 »
Отображение имени области и страны, а не кода:

Файл "order.order_print.php" (админка):

Строка 186: заменяем код <?php $dbt->p("state");  ?> на
Код
<?php 
$state = $dbt->f("state");
$dbc->query( "SELECT state_name FROM #__{vm}_state WHERE state_2_code = '$state'");
$dbc->next_record();
$state_name = $dbc->f("state_name");
echo $state_name;
?>

Строка 289: заменяем код <?php $dbt->p("state");  ?> на
Код
<?php
if( $state != $dbt->f("state")) {
$state = $dbt->f("state");
$dbc->query( "SELECT state_id, state_name FROM #__{vm}_state WHERE state_2_code = '$state'");
$dbc->next_record();
$state_name = $dbc->f("state_name");
}
echo $state_name;
?>

Файл "account.order_details.php" (инфо о заказе в учетной записи пользователя)

Строка 28: добавляем базу
Код
$dbtemp = new ps_DB;

Строка 189: заменяем код <?php $dbbt->p("state");  ?> на
Код
<?php $state = $dbbt->f("state");
$dbtemp->query( "SELECT state_name FROM #__{vm}_state WHERE state_2_code = '$state'");
$dbtemp->next_record();
$state_name = $dbtemp->f("state_name");
echo $state_name;
?>

Строка 202: заменяем код <?php $dbbt->p("country");  ?> на
Код
<?php $country = $dbbt->f("country");
$dbtemp->query( "SELECT country_name FROM #__{vm}_country WHERE country_3_code = '$country'");
$dbtemp->next_record();
$country_name = $dbtemp->f("country_name");
echo $country_name;
?>

Строка 289: заменяем код <?php $dbbt->p("state");  ?> на
Код
<?php 
if( $state != $dbbt->f("state")) {
$state = $dbbt->f("state");
$dbtemp->query( "SELECT state_name FROM #__{vm}_state WHERE state_2_code = '$state'");
$dbtemp->next_record();
$state_name = $dbtemp->f("state_name");
}
echo $state_name;
?>

Строка 305: заменяем код <?php $dbbt->p("country");  ?> на
Код
<?php
if( $country != $dbbt->f("country")) {
$country = $dbbt->f("country");
$dbtemp->query( "SELECT country_name FROM #__{vm}_country WHERE country_3_code = '$country'");
$dbtemp->next_record();
$country_name = $dbtemp->f("country_name");
}
echo $country_name;
?>

Файл "checkout.customer_info.php" (адрес доставки, при оформлении заказа)

Строка 23: добавляем базу
Код
$db_temp = new ps_DB;

Строка 61: вместо
Код
<?php
             $db->p("city");
             echo ",";
             $db->p("state");
             echo " ";
             $db->p("zip");
             echo "<br /> ";
             $db->p("country");
           ?>
Вставляем
Код
           <?php
             $db->p("city");
             echo ", ";
             $state = $db->f("state");
$db_temp->query( "SELECT state_name FROM #__{vm}_state WHERE state_2_code = '$state'");
$db_temp->next_record();
$state_name = $db_temp->f("state_name");
echo $state_name;
             echo ", ";
             $db->p("zip");
             echo "<br /> ";
             $country = $db->f("country");
$db_temp->query( "SELECT country_name FROM #__{vm}_country WHERE country_3_code = '$country'");
$db_temp->next_record();
$country_name = $db_temp->f("country_name");
echo $country_name;
           ?>

Файл "ps_checkout.php" (список дополнительных адресов, адрес в подтверждении заказа(последний шаг),  mail-HTML, mail-text)

Изменений много, впадлу писать, просто выложу файл.

Файлы для VM 1.0.12

[вложение удалено Администратором]
« Последнее редактирование: 01.08.2007, 19:36:36 от Bones »

Re: [howto] Делаем области России (штаты)
« Ответ #14 : 01.08.2007, 19:38:49 »
Залил заново файл "account.order_details.php" а также поправил код в описании. Была ошибка.
*

AZ

  • Осваиваюсь на форуме
  • 30
  • 3 / 4
  • Здесь вам не ТУТ...
Re: [howto] Делаем области России (штаты)
« Ответ #15 : 03.08.2007, 16:24:43 »
Да-а-а... Долгая тема была :'(
И вот изменения! ^-^

to Bones
Ок, спасибо, попробую...
*

DWolf

  • Захожу иногда
  • 75
  • 21 / 0
Re: [howto] Делаем области России (штаты)
« Ответ #16 : 10.02.2009, 15:16:57 »
К сожалению этих строк нет в 1.1.3
Может кто-нибудь делал для этой версии?
*

DWolf

  • Захожу иногда
  • 75
  • 21 / 0
Re: [howto] Делаем области России (штаты)
« Ответ #17 : 10.02.2009, 16:58:09 »
Отображение имени области, а не кода для VM 1.1.3:
В конце файла /classes/ps_country.php (в админке) добавить функцию:
Код
function &get_state_by_code( $code, $c_id ) {
$_table_name = '#__{vm}_state';
$db = new ps_DB();
$state_code_type = strlen( $code );
switch ($state_code_type) {
case 2:
$state_code_type_field = 'state_2_code';
break;
case 3:
$state_code_type_field = 'state_3_code';
break;
default:
return false;
}
$db->query('SELECT `state_id`, `state_name`, `state_2_code`, `state_3_code`
FROM `'.$_table_name.'` WHERE country_id = '.$c_id.' and `'.$state_code_type_field.'` = \''.$db->getEscaped($code).'\'' );
$db->next_record();
return $db;
}

Для нормального отображения в админке в файле order.order_print.php делаем изменения:
строка 203:
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbt->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          break;
          default:
            $fieldvalue = $dbt->f($field->name);
          if ( is_null($fieldvalue) OR $fieldvalue == "" ) {
            echo "&nbsp;";
          } else {
                    echo $fieldvalue;
                  }
          break;

необходимо исправить на
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbt->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          $country_id=$dbc->f('country_id');
          break;
case 'state':
require_once(CLASSPATH.'ps_country.php');
          $state = new ps_country();
          $dbs = $state->get_state_by_code($dbt->f($field->name), $country_id);
          if( $dbs !== false ) echo $dbs->f('state_name');
break;
          default:
            $fieldvalue = $dbt->f($field->name);
          if ( is_null($fieldvalue) OR $fieldvalue == "" ) {
            echo "&nbsp;";
          } else {
                    echo $fieldvalue;
                  }
          break;

строка 248, отсчитываем после добавления предыдущего куска кода:
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbt->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
break;
          default:
            $fieldvalue = $dbt->f($field->name);
          if ( is_null($fieldvalue) OR $fieldvalue == "" ) {
            echo "&nbsp;";
          } else {
                    echo $fieldvalue;
                  }
          break;


заменить на:
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbt->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
$country_id=$dbc->f('country_id');
          break;
case 'state':
require_once(CLASSPATH.'ps_country.php');
          $state = new ps_country();
          $dbs = $state->get_state_by_code($dbt->f($field->name), $country_id);
          if( $dbs !== false ) echo $dbs->f('state_name');
break;
          default:
            $fieldvalue = $dbt->f($field->name);
          if ( is_null($fieldvalue) OR $fieldvalue == "" ) {
            echo "&nbsp;";
          } else {
                    echo $fieldvalue;
                  }
          break;


для изменения в информации о заказе в учетной записи пользователя правим файл /pages/accaunt.order_details.tpl.php (в шаблонах)
строка 105:
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbbt->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          break;
          default:
          echo $dbbt->f($field->name);
          break;

заменить на:
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbbt->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
$country_id=$dbc->f('country_id');
          break;
case 'state':
require_once(CLASSPATH.'ps_country.php');
          $state = new ps_country();
          $dbs = $state->get_state_by_code($dbbt->f($field->name), $country_id);
          if( $dbs !== false ) echo $dbs->f('state_name');
break;
          default:
          echo $dbbt->f($field->name);
          break;


строка 148:
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbst->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          break;
          default:
          echo $dbst->f($field->name);
          break;

заменить на:
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbst->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          $country_id=$dbc->f('country_id');
          break;
case 'state':
require_once(CLASSPATH.'ps_country.php');
          $state = new ps_country();
          $dbs = $state->get_state_by_code($dbbt->f($field->name), $country_id);
          if( $dbs !== false ) echo $dbs->f('state_name');
break;
          default:
          echo $dbst->f($field->name);
          break;

Для изменения адреса доставки, при оформлении заказа правим файл /checkout/customer_info.tpl.php (в шаблонах)
строка 55:
Код
$db->p("state_2_code");
echo " ";
$db->p("zip");

заменить на
Код
$db->p("state_name");
echo ", ";
$db->p("zip");

Вроде бы всё! Надеюсь, очень, сильно!
*

OlegKor

  • Осваиваюсь на форуме
  • 30
  • 1 / 0
Re: [howto] Делаем области России (штаты)
« Ответ #18 : 03.03.2009, 13:45:41 »
Уважаемый DWolf

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

Тестировалось на:
Joomla 1.5.9
VirtueMart 1.1.3

В моем случае при формировании заказа из корзины, когда проходиш по шагам все выглядит вот так:

1 шаг "Адрес получателя"
Здесь указанная Вами поправка не работает вовсе. В адресе "Контактная информация" совсем не работает, а если добавить дополнительный адрес доставки, то и вовсе не отображается ОБЛАСТЬ и СТРАНА. Сведения об этом выглядят так:


2 шаг "Варианиты доставки" и 3 шаг "Способ оплаты"
Ну здесь адрес не отображается, этот шаг в нашем случае не интересен.

4 шаг "Оформить заказ"
Сведения об адресе доставки так же отображаются не верно. Просто наименование области исключено из адреса и все. Т.е. как я понимаю, если наименование ГОРОДА и ОБЛАСТИ разные, тогда должно было бы быть написано оба значения, иначе только одно. Но в моем случае, почему-то наименование области просто проигнорировано ... хотя значения разные. Те теперь не берет значение из поля "Код региона (2)", но и не пишет Наименование в любом случае.


Далее, при подтверждении заказа - Заказ принят и есть возможность просмотреть Информацию о заказе. Так вот здесь сведения об адресе отображаются так, как исправления вовсе не вносились в скрипт. Т.е. пишутся значения из "Код региона (2)".


Я в точности внес все поправки, как вы рекомендовали во все указанные вам файлы (скрипты измененных мною файлов прилагаю)
Не знаю почему у меня не получилось решить этот вопрос, но вопрос этот стоит очень остро и мне кажется касается не только меня. Пожалуйста, подскажите как все же реализовать это до конца.

С уважением OlegKor

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

DWolf

  • Захожу иногда
  • 75
  • 21 / 0
Re: [howto] Делаем области России (штаты)
« Ответ #19 : 04.03.2009, 08:07:59 »
OlegKor, вы приводите пример из другой линейки (1.5).... на ней к сожалению я не тестировал...
Кстати, этот форум находится в ветке 1.0.

Если у меня будет свободное время, то я обязательно установлю и протестирую на 1.5.
Как только разберусь в чем дело, сразу же отвечу.

Re: [howto] Делаем области России (штаты)
« Ответ #20 : 06.03.2009, 16:09:17 »
Выкладываю новую версию.
Файл с расширение sql
Данному файлу всё равно есть ли у вас в базе данных штаты и сколько их. Просто залейте его удобным вам способом.
Внимание! Данный файл только для баз с префиксом jos_vm
У меня небольшая проблема, загрузил в SQL,  и вкладка регионы вообще исчезла, просто пустота, а Область/регион, стоит надпись, в чем может быть проблема? vertuemart 1.0.15 joomla lavra 1.0.15
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться