Список городов при регистрации из модуля доставки

Тема в разделе "Регистрация, покупка, управление заказами", создана пользователем FeaMor, 19.07.2012.

  1. FeaMor
    Offline

    FeaMor Пользователь

    Регистрация:
    01.09.2008
    Сообщения:
    104
    Симпатии:
    2
    Пол:
    Мужской
    Добрый день!

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

    Если такое не возможно или крайне сложно, то каким образом можно создать этот список вручную так, чтобы покупатель не вводил, опять таки, наименование города и индекс вручную, а выбирал из имеющихся (введеных заранее), а где-то внутри кода прописать какому городу какой индекс относится, чтобы модуль доставки мог определить стоимость доставки (он же все равно по индексу рассчитывает).

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

    Заранее спасибо!
     
  2.  
  3. FeaMor
    Offline

    FeaMor Пользователь

    Регистрация:
    01.09.2008
    Сообщения:
    104
    Симпатии:
    2
    Пол:
    Мужской
    Я внес изменения на сервере магазина в файле:
    administrator/components/com_virtuemart/classes/ps_userfield.php

    Код (PHP):
    1. ...
    2. ...
    3. case 'title':
    4.    
    5.  
    6. $ps_html->list_user_title($db->sf('title', true, false), "id=\"title_field\"");
    7. break;
    8.  
    9.  
    10. // НАЧАЛО - выпадающий список с выбором городов
    11. case 'city':
    12.    
    13.  
    14. $city_all00 = '<select style=width:300px id="'.$field->name.'_field" name="'.$field->name.'">
    15. <option value="">Выбрать</option>
    16. <optgroup label="Города">
    17. <option value="Абаза">Абаза (Республика Хакасия)</option>
    18. <option value="Абакан">Абакан (Республика Хакасия)</option>
    19. ...
    20. ...
    21. <option value="Ямало-Ненецкий АО">Ямало-Ненецкий АО</option>
    22. <option value="Ярославская область">Ярославская область</option>
    23. </optgroup></select>';
    24. echo str_replace('option value="'.$db->sf("city").'"', 'option value="'.$db->sf("city").'" selected', $city_all00); break;
    25. // КОНЕЦ - выпадающий список с выбором городов
    26.  
    27.  
    28.  
    29. case 'country':
    30. ...
    31. ...


    И теперь у меня выводится список городов, чтобы пользователь не вводил название города сам
    теперь куда-то мне надо воткнуть проверку имени города и определение индекса, типа:
    Код (PHP):
    1. если город=Челны, тогда индекс=423800

    и так для каждого города. Этот список городов и индексов я собрал, но вот куда и как такую проверку воткнуть?
     
  4. FeaMor
    Offline

    FeaMor Пользователь

    Регистрация:
    01.09.2008
    Сообщения:
    104
    Симпатии:
    2
    Пол:
    Мужской
    Я создал дополнительное поле, заполняемое пользователем 'cityall' с типом select, а также создал таблицу 'jos_vm_cityall' в базе, по аналогии с таблицей 'jos_vm_state', в которой есть код страны, имя города и индекс (cityall_id, country_id, cityall_name, zip_1_code, zip_2_code(на всякий случай второй индекс))
    в файле ps_userfield.php создал следующее:
    Код (PHP):
    1. case 'cityall':
    2.                     echo $ps_html->dynamic_cityall_lists( "country", "cityall", $db->sf('country', true), $db->sf('cityall', true, false) );
    3.                     echo "<noscript>\n";
    4.                     $ps_html->list_cityall("cityall", $db->sf('cityall', true, false), "", "id=\"cityall_field\"");
    5.                     echo "</noscript>\n";
    6.                     break;



    а в файле ps_html.php

    Код (PHP):
    1. function list_cityall($list_name,$selected_item="", $cityall_id="", $extra="") {
    2.         global $VM_LANG;
    3.  
    4.         $db = new ps_DB;
    5.         $q = 'SELECT country_name, cityall_name, zip_1_code , zip_2_code
    6.                 FROM #__{vm}_cityall s, #__{vm}_country c
    7.                 WHERE s.country_id = c.country_id';
    8.         if( !empty( $country_id )) {
    9.             $q .= ' AND c.country_id='.(int)$country_id;
    10.         }
    11.         $q .= "\nORDER BY country_name, cityall_name";
    12.         $db->query( $q );
    13.         $list = Array();
    14.         $list["0"] = $VM_LANG->_('PHPSHOP_SELECT');
    15.         $list["NONE"] = "not listed";
    16.         $country = "";
    17.  
    18.         while( $db->next_record() ) {
    19.             if( $country != $db->f("country_name")) {
    20.                 $list[] = "------- ".$db->f("country_name")." -------";
    21.                 $country = $db->f("country_name");
    22.             }
    23.             $list[$db->f("zip_1_code")] = $db->f("cityall_name");
    24.         }
    25.  
    26.         $this->dropdown_display($list_name, $selected_item, $list,"","",$extra);
    27.         return 1;
    28.     }
    29.  
    30.  
    31.     function dynamic_cityall_lists( $country_list_name, $cityall_list_name, $selected_country_code="", $selected_cityall_code="" ) {
    32.         global $vendor_country_3_code, $VM_LANG, $vm_mainframe, $mm_action_url, $page;
    33.         $db = new ps_DB;
    34.         if( empty( $selected_country_code )) {
    35.             $selected_country_code = $vendor_country_3_code;
    36.         }
    37.  
    38.         if( empty( $selected_cityall_code )) {
    39.             $selected_cityall_code = "originalPos";
    40.         } else {
    41.             $selected_cityall_code = "'".$selected_cityall_code."'";
    42.         }
    43.  
    44.         $db->query( "SELECT c.country_id, c.country_3_code, s.cityall_name, s.zip_1_code
    45.                         FROM #__{vm}_country c
    46.                         LEFT JOIN #__{vm}_cityall s
    47.                         ON c.country_id=s.country_id OR s.country_id IS NULL
    48.                         ORDER BY c.country_id, s.cityall_name" );
    49.  
    50.         if( $db->num_rows() > 0 ) {
    51.             if( !vmIsAdminMode() ) {
    52.                 $vm_mainframe->addScript( $mm_action_url.'includes/js/mambojavascript.js');
    53.                 $vm_mainframe->addScript( $mm_action_url.'includes/js/joomla.javascript.js');
    54.             }
    55.             // Build the State lists for each Country
    56.             $script = "<script language=\"javascript\" type=\"text/javascript\">//<![CDATA[\n";
    57.             $script .= "<!--\n";
    58.             $script .= "var originalOrder = '1';\n";
    59.             $script .= "var originalPos = '$selected_country_code';\n";
    60.             $script .= "var cityalls = new Array(); // array in the format [key,value,text]\n";
    61.             $i = 0;
    62.             $prev_country = '';
    63.             while( $db->next_record() ) {
    64.                 $country_3_code = $db->f("country_3_code");
    65.                 if( $db->f('cityall_name') ) {
    66.                     // Add 'none' to the list of countries that have states:
    67.                     if( $prev_country != $country_3_code  && $page == 'tax.tax_form' ) {
    68.                         $script .= "cityalls[".$i++."] = new Array( '".$country_3_code."',' - ','".$VM_LANG->_('PHPSHOP_NONE')."' );\n";
    69.                     }
    70.                     elseif( $prev_country != $country_3_code ) {
    71.                         $script .= "cityalls[".$i++."] = new Array( '".$country_3_code."','',' -= ".$VM_LANG->_('PHPSHOP_SELECT')." =-' );\n";
    72.                     }
    73.                     $prev_country = $country_3_code;
    74.  
    75.                     // array in the format [key,value,text]
    76.                     $script .= "cityalls[".$i++."] = new Array( '".$country_3_code."','".$db->f("zip_1_code")."','".addslashes($db->f("cityall_name"))."' );\n";
    77.                 }
    78.                 else {
    79.                     $script .= "cityalls[".$i++."] = new Array( '".$country_3_code."',' - ','".$VM_LANG->_('PHPSHOP_NONE')."' );\n";
    80.                 }
    81.  
    82.             }
    83.             $script .= "
    84.             function changecityallList() {
    85.               var selected_country = null;
    86.               for (var i=0; i<document.adminForm.".$country_list_name.".length; i++)
    87.                  if (document.adminForm.".$country_list_name."[i].selected)
    88.                     selected_country = document.adminForm.".$country_list_name."[i].value;
    89.               changeDynaList('".$cityall_list_name."',cityalls,selected_country, originalPos, originalOrder);
    90.              
    91.             }
    92.             writeDynaList( 'class=\"inputbox\" name=\"".$cityall_list_name."\" size=\"1\" id=\"cityall\"', cityalls, originalPos, originalPos, $selected_cityall_code );
    93.             //-->
    94.             //]]></script>";
    95.  
    96.             return $script;
    97.         }
    98.     }


    я все делал по аналогии с регионами, т.к. регионы мне не нужны, а вот города нужны.
    Не знаю что конкретно за что отвечает, но вот что получилось:
    в таблице 'jos_vm_user_info' поле добавилось новое поле 'cityall' и туда записывает нужный мне индекс, если в строчке ставить
    Код (PHP):
    1. // array in the format [key,value,text]
    2.                     $script .= "cityalls[".$i++."] = new Array( '".$country_3_code."','".$db->f("zip_1_code")."','".addslashes($db->f("cityall_name"))."' );\n";


    или выбранный город, если ставлю
    Код (PHP):
    1. // array in the format [key,value,text]
    2.                     $script .= "cityalls[".$i++."] = new Array( '".$country_3_code."','".$db->f("cityall_name")."','".addslashes($db->f("cityall_name"))."' );\n";


    но сам город и индекс в полях 'city' и 'zip' не меняется.

    Как мне заменять эти поля из моего выбранного города?
    наверняка просто где-то что-то добавить), типа в файл 'ps_userfield.php'
    Код (PHP):
    1. case 'zip':
    2.                     echo $ps_html->dynamic_cityall_lists( "country", "cityall", $db->sf('country', true), $db->sf('cityall', true, false) );
    3.                     echo "<noscript>\n";
    4.                     $ps_html->list_cityall("cityall", $db->sf('cityall', true, false), "", "id=\"cityall_field\"");
    5.                     echo "</noscript>\n";
    6.                     break;

    только это не срабатывает и я не знаю почему именно. Со структурой программирования в Joomla вообще не знаком (

    Подскажите, как мне сделать так, что бы в таблице 'jos_vm_user_info' менялось не последнее поле 'cityall', а именно 'city' и 'zip'
     
  5. FeaMor
    Offline

    FeaMor Пользователь

    Регистрация:
    01.09.2008
    Сообщения:
    104
    Симпатии:
    2
    Пол:
    Мужской
    Подскажите, как при нажатии кнопки "регистрация" при оформлении заказа или "сохранить данные", выбранный город из добавленного поля вручную сохранялся не только в отдельное поле, добавленное из админки 'cityall' таблицы 'jos_vm_user_info', но и заменял поле 'city' в ней.
    Какой код и где именно вставить надо?
     

Поделиться этой страницей

Загрузка...