Можно ли сделать в оформлении заказа в адресе доставки город по умолчанию?

#
Можно ли сделать в оформлении заказа в адресе доставки город по умолчанию?
Хотелось бы узнать - кто-нибудь реализовывал подобное?

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

Есть мысли на этот счёт?
#
Re: Можно ли сделать в оформлении заказа в адресе доставки город по умолчанию?
DriveRU, надо в xsl-шаблоне "МагазинАдресДоставки", изменить javascript который находится сразу после закрывающего тега form. Этот javascript загружает элементы списка для выбранной по-умолчанию страны. Можно, например, добавить в функцию doSetLocation() третий параметр в котором указать id области по-умолчанию, и изменить саму функцию в файле /hostcmsfiles/main.js, так чтобы область с указанным id устанавливалась в списке активной.
А после вызова функции doSetLocation() необходимо вызвать doSetCity(), также добавив к ней еще один параметр для города по умолчанию, и модифицировав саму функцию аналогично предыдущей.
Заказов не беру. Консультирую редко.
#
Re: Можно ли сделать в оформлении заказа в адресе доставки город по умолчанию?
не могли бы вы более предметно ответить и подсказать

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <xsl:template match="/locations">
      <!-- Строка шага заказа -->
      <ul class="shop_navigation gray">
      <li class="shop_navigation_current"><span>Адрес доставки</span>&#x2192;</li>
      <li><span>Способ доставки</span>&#x2192;</li>
      <li><span>Форма оплаты</span>&#x2192;</li>
      <li><span>Данные доставки</span></li>
      </ul>
      
      <SCRIPT type="text/javascript" language="JavaScript">
         <xsl:comment>
            <xsl:text disable-output-escaping="yes">
               <![CDATA[
               location_select_id = "location";
               city_select_id = "sel_city";
               cityarea_select_id = "sel_city_area";
               ]]>
            </xsl:text>
         </xsl:comment>
      </SCRIPT>
      
      <form name="address" id="address" method="POST">
         <h1>Адрес доставки</h1>
         <p>
            <a href="{shop/path}cart/">Корзина</a>
         </p>
         <table>
            <tr>
               <td>Страна:</td>
               <td>
                  <select id="country" style="width: 380px;" name="country" onchange="doSetLocation(this.options[this.selectedIndex].value, '{/locations/shop/path}cart/')">
                     <option value="0">..</option>
                     <xsl:apply-templates select="country"/>
                  </select>
                  <span class="red_star" style="position: relative; top: 4px;"> *</span>
               </td>
            </tr>
            
            <tr>
               <td>Область:</td>
               <td>
                  <xsl:variable name="country_id" select="/locations//country[@select = 1]/@id" />
                  
                  <select name="location" style="width: 380px;" id="location" onchange="doSetCity(this.options[this.selectedIndex].value, '{/locations/shop/path}cart/')">
                     <option value="0">..</option>
                     <xsl:apply-templates select="location[@parent = $country_id]"/>
                  </select>
                  <span class="red_star" style="position: relative; top: 4px;"> *</span>
               </td>
            </tr>
            <tr>
               <td>Город:</td>
               <td>
                  <select name="sel_city" style="width: 380px;" id="sel_city" onchange="doSetCityArea(this.options[this.selectedIndex].value, '{/locations/shop/path}cart/')">
                     <option value="0">..</option>
                     <xsl:apply-templates select="city[@parent = location[@parent = $country_id]]"/>
                  </select>
               </td>
            </tr>
            <tr>
               <td>Район города:</td>
               <td>
                  <select name="sel_city_area" style="width: 380px;" id="sel_city_area">
                     <option value="0">..</option>
                  </select>
               </td>
            </tr>
            <tr>
               <td style="vertical-align: middle;">Индекс:</td>
               <td>
                  <input type="text" size="5" class="large_input" style="width: 90px;" name="index" value="{external_propertys/site_users_postcode}"/>
               </td>
            </tr>
            <tr>
               <td  style="vertical-align: middle;">Улица, дом, квартира:<br/>
               (город, район, если не выбраны)</td>
               <td>
                  <input type="text" size="30" class="large_input" style="width: 390px;" name="full_address" value="{external_propertys/site_users_address}"/>
               </td>
            </tr>
            <tr>
               <td  style="vertical-align: middle;">Фамилия, Имя, Отчество:</td>
               <td>
                  <input type="text" size="30" class="large_input" style="width: 124px; margin-right: 5px;" name="site_users_surname" value="{external_propertys/site_users_surname}"/>
                  <input type="text" size="30" class="large_input" style="width: 124px; margin-right: 5px;" name="site_users_name" value="{external_propertys/site_users_name}"/>
                  <input type="text" size="30" class="large_input" style="width: 124px; margin-right: 0px;" name="site_users_patronymic" value="{external_propertys/site_users_patronymic}"/>
               </td>
            </tr>
            <tr>
               <td  style="vertical-align: middle;">Компания:</td>
               <td>
                  <input type="text" size="30" class="large_input" style="width: 390px;" name="site_users_company" value="{external_propertys/site_users_company}"/>
               </td>
            </tr>
            <tr>
               <td  style="vertical-align: middle;">Телефон:</td>
               <td>
                  <input type="text" size="30" class="large_input" style="width: 390px;" name="site_users_phone" value="{external_propertys/site_users_phone}"/>
               </td>
            </tr>
            <tr>
               <td  style="vertical-align: middle;">Факс:</td>
               <td>
                  <input type="text" size="30" class="large_input" style="width: 390px;" name="site_users_fax" value="{external_propertys/site_users_fax}"/>
               </td>
            </tr>
            <tr>
               <td  style="vertical-align: middle;">E-mail:</td>
               <td>
                  <input type="text" size="30" class="large_input" style="width: 390px;" name="site_users_email" value="{external_propertys/site_users_email}"/>
               </td>
            </tr>
            <tr>
               <td  style="vertical-align: middle;" >Комментарий к заказу:</td>
               <td>
                  <textarea rows="2" class="large_input" style="width: 390px;" name="description"></textarea>
               </td>
            </tr>
            <tr>
               <td>
                  <div class="gray_button">
                     <div>
                        <input name="step_2" value="Далее &#8594;" type="submit" class="cart_button"></input>
                     </div>
                  </div>
               </td>
            </tr>
         </table>
      </form>
      
      <!-- Заполняем все дочерние элементы страны -->
      <SCRIPT type="text/javascript" language="JavaScript">
         var oldHandler=window['onload'];
         window['onload']=function(){if(typeof(oldHandler)=='function'){oldHandler();}newHandler();};
         function newHandler(){
         doSetLocation(document.getElementById('country').options[document.getElementById('country').selectedIndex].value, '<xsl:value-of select="/locations/shop/path" />cart/');
         }
      </SCRIPT>
      
   </xsl:template>
   
   <!-- Шаблон заполняет options для стран -->
   <xsl:template match="country">
      <xsl:choose>
         <!-- Если страна задана по умолчанию -->
         <xsl:when test="@select=1">
            <option value="{@id}" selected="selected" style="font-weight: bold;">
               <xsl:value-of disable-output-escaping="yes" select="name"/>
            </option>
         </xsl:when>
         <xsl:otherwise>
            <option value="{@id}">
               <xsl:value-of disable-output-escaping="yes" select="name"/>
            </option>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:template>
   
   <!-- Шаблон заполняет options для местоположений (областей) -->
   <xsl:template match="location">
      <option value="{@id}">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </option>
   </xsl:template>
   
   <!-- Шаблон заполняет options для городов -->
   <!--<xsl:template match="city">
      <option value="{@id}">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </option>
   </xsl:template>-->
   
   <xsl:template match="city">
      
      <xsl:choose>
         <!-- Если страна задана по умолчанию -->
         <xsl:when test="@id=2391">
            <option value="{@id}" selected="selected" style="font-weight: bold;">
               <xsl:value-of disable-output-escaping="yes" select="name"/>
            </option>
         </xsl:when>
         <xsl:otherwise>
            <option value="{@id}">
               <xsl:value-of disable-output-escaping="yes" select="name"/>
            </option>
         </xsl:otherwise>
   </xsl:choose>   </xsl:template>
   
   <!-- Шаблон заполняет options для районов -->
   <xsl:template match="cityarea">
      <option value="{@id}">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </option>
   </xsl:template>
   
</xsl:stylesheet>
#
Re: Можно ли сделать в оформлении заказа в адресе доставки город по умолчанию?
вот область main.js

// Магазин

function doSetLocation(shop_country_id, path)

{

   var req = new JsHttpRequest();



   // Отображаем экран загрузки

   ShowLoadingScreen();



   req.onreadystatechange = function()

   {

      if (req.readyState == 4)

      {

         // Убираем затемнение.

         HideLoadingScreen();



         if (req.responseJS != undefined)

         {

            // Данные.

            if (req.responseJS.result != undefined)

            {

               oSelect = document.getElementById(location_select_id);



               // Очищаем select

               oSelect.options.length = 0;



               // Добавляем значение " ... "

               oSelect.options[oSelect.options.length] = new Option(" ... ", 0);



               for (var key in req.responseJS.result)

               {

                  oSelect.options[oSelect.options.length] = new Option(req.responseJS.result[key], key);

               }



               // Устанавливаем города

               //doSetCity(oSelect.options[oSelect.selectedIndex].value);

               oCity = document.getElementById(city_select_id);

               oCity.options.length = 0;

               oCity.options[oCity.options.length] = new Option(" ... ", 0);



               oCityarea = document.getElementById(cityarea_select_id);

               oCityarea.options.length = 0;

               oCityarea.options[oCityarea.options.length] = new Option(" ... ", 0);

            }

         }

         return true;

      }

   }



   req.open('get', path + "?action=get_location&shop_country_id="+shop_country_id, true);



   // Отсылаем данные в обработчик.

   req.send(null);

}



function doSetCity(shop_location_id, path)

{

   var req = new JsHttpRequest();



   // Отображаем экран загрузки

   ShowLoadingScreen();



   req.onreadystatechange = function()

   {

      if (req.readyState == 4)

      {

         // Убираем затемнение.

         HideLoadingScreen();



         if (req.responseJS != undefined)

         {

            // Данные.

            if (req.responseJS.result != undefined)

            {

               oSelect = document.getElementById(city_select_id);



               // Очищаем select

               oSelect.options.length = 0;



               // Добавляем значение " ... "

               oSelect.options[oSelect.options.length] = new Option(" ... ", 0);



               for (var key in req.responseJS.result)

               {

                  oSelect.options[oSelect.options.length] = new Option(req.responseJS.result[key], key);

               }



               // Устанавливаем районы

               //doSetCityArea(oSelect.options[oSelect.selectedIndex].value);



               oCityarea = document.getElementById(cityarea_select_id);

               oCityarea.options.length = 0;

               oCityarea.options[oCityarea.options.length] = new Option(" ... ", 0);

            }

         }

         return true;

      }

   }



   req.open('get', path + "?action=get_city&shop_location_id="+shop_location_id, true);



   // Отсылаем данные в обработчик.

   req.send(null);

}
#
Re: Можно ли сделать в оформлении заказа в адресе доставки город по умолчанию?
DriveRU, куда уж предметнее-то?
А файлы-то можно было сюда и не выкладывать, я их видел неоднократно
Но то что вы их нашли - это уже хорошо.
Теперь попробуйте сделать с ними те действия, которые я написал выше
Заказов не беру. Консультирую редко.
#
Re: Можно ли сделать в оформлении заказа в адресе доставки город по умолчанию?
К сожалению я не программист - и логикой не обладаю программной.

Но руки растут оттуда откуда надо - много получал здесь сведений - поэтому и спрашиваю)
#
Re: Можно ли сделать в оформлении заказа в адресе доставки город по умолчанию?
и почему то они тут закомментированы - нужно ли это снимать или нте?

// Устанавливаем города
//doSetCity(oSelect.options[oSelect.selectedIndex].value);
#
Re: Можно ли сделать в оформлении заказа в адресе доставки город по умолчанию?
DriveRU, ну так и руки вам в руки!
Javascript в xsl-шаблоне после тега form нашли?
Вызов функции doSetLocation() в нем обнаружили?
В конце вызова этой функции, перед закрывающей скобкой поставьте запятую, и укажите цифрой id той области, которая должны быть по умолчанию.

Потом перейдите в файл main.js и в заголовке этой функции, после параметра path поставьте запятую и напишите любое название переменной для третьего параметра.

Это еще не все, но сохраните оба файла и обновите страницу с адресом доставки, чтобы убедиться что вы ничего не поломали

Если все работает как раньше, то переходим к следующему шагу:
Находим в функции doSetLocation() вот этот фрагмент
for (var key in req.responseJS.result)

               {

                  oSelect.options[oSelect.options.length] = new Option(req.responseJS.result[key], key);

               }
и вставляем в него проверку условия что третий параметр у нас задан и что он равен текущему id области, и если да, то добавляем в new Option() признак выделения строки по-умолчанию (подробнее о параметрах new Option() см. здесь - http://www.tigir.com/javascript_select.htm), а если условие ложно то оставляем строку new Option() без изменений.
Ну и все, собственно. Сохраняем файл и проверяем что ничего не поломали. Область по-умолчанию должна загрузиться автоматически после загрузки страницы.
С городом - по аналогии.
Заказов не беру. Консультирую редко.
#
Re: Можно ли сделать в оформлении заказа в адресе доставки город по умолчанию?
for (var key in req.responseJS.result)
{if (key==25){oSelect.options[oSelect.options.length] = new Option(req.responseJS.result[key], key, true, true);}
else {oSelect.options[oSelect.options.length] = new Option(req.responseJS.result[key], key);}
                  }

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

Ничего более в main.js (\admin\js\main.js) я не менял.
Авторизация