• Уважаемый Гость! Если вы зарегистрировались на нашем форуме, значит вам нужна помощь! Мы всегда рады вам помочь, еще ни один пользователь не получил отказа! Но мы так же нуждаемся в Вашей поддержке. Проект полностью бесплатный, мы не имеем права требовать от вас денег, нам это и не нужно! Но от любой финансовой поддержки не откажемся. Проект развивается, но иногда очень тяжело его поддерживать, особенно в финансовом отношении. Если у вас есть возможность поддержать нас финансово, мы будем вам очень благодарны! С уважением, команда Оскласс Россия!
  • Изменение в правилах форума! В связи с огромным количеством вопросов поступающих в адрес технической поддержки мы решили изменить правила форума! Просим всех пользователей обратить внимание на данные изменения и четко их соблюдать!
  • Ребята, нуждаемся в программистах! Если хотите зарабатывать и есть время, пишите администраторам сайта. Есть база и инструменты, нужен опыт и знания =)
  • Уважаемые пользователи! На форуме появились разделы по работе с системой Yclas. Yclas - это скрипт доски объявлений. Нужны разработчики.

Как сделать выпадающий список регионов и городов?

Bastard

Новичок
Что бы не плодить темы, спрошу здесь, поскольку тема смежная:
Ситуация следующая:

Jv5iz7hh00e2uEHKlAFv8g.jpg

Как в выпадающем списке городов сделать только города выбранной области? Фишка в том (видно на картинке в адресной строке браузера) что параметр область (region) определяется автоматом, но не по RegionId а по названию. Следовательно код
Код:
  $('#regionId').change(function updateCityList() {
						var actualRegionId  = $(this).val();

						if ( Math.floor(actualRegionId) == actualRegionId && $.isNumeric(actualRegionId)) {
							/*Get cities per region*/
							$.ajax({
								url: "<?php echo osc_base_url(true); ?>?page=ajax&action=cities",
								data: { regionId: actualRegionId },
								success: function( cities, err){
									var $el = $("#sCity"),
										citiesOptions = {};
								  
									$('#sCity option:gt(0)').remove();
									$el.val("");
									$el.prev("span").text("Any City");
									$.each(cities, function(key, value) {
									  $el.append($("<option></option>")
										.attr("value", value.s_name).text(value.s_name));
									});
									$("#sRegion").attr("value", $("#regionId option[value='"+actualRegionId+"']").text());
								},
								dataType: "json"
							});
						}
					});

автозаполнение не срабатывает (поскольку используется название региона - getParam('sRegion') - а не RegionID)

Можно как то сделать автозаполнение City, основываясь не на RegionID ?
 

Кирилл

Новичок
Сайт kypito.ru
Перепробывал уже все варианты, не получается.
Помогите!!!
 

Вложения

  • kypito.zip
    529,5 КБ · Просмотры: 14

kiril901

Новичок
Здравтсвуйте! Мне на доске объявлений надо сделать регион и город не не текстовыми полями а выпадающим списком, я сделал

<?php ItemForm::location_javascript_new(); ?>
на
<?php ItemForm::location_javascript(); ?>
в item-edit.php
<?php ItemForm::region_text() ; ?>
...
<?php ItemForm::city_text() ; ?>
на
<?php ItemForm::region_select() ; ?>
...
<?php ItemForm::city_select() ; ?>
в item-post.php
<?php ItemForm::region_text(osc_user()) ; ?>
...
<?php ItemForm::city_text(osc_user()) ; ?>
на
<?php ItemForm::region_select(osc_get_regions(osc_user_country()), osc_user()) ; ?>
...
<?php ItemForm::city_select(osc_get_cities(osc_user_region()), osc_user()) ; ?>

и написано надо вызов JS сделать в трех файлах, я сделал только в двух, третий не нашел. Что я сделал не правильно? Подскажите пожалуйста.
 

kotelok

Новичок
Так дизайн полей поехал и ошибки js сыпятся. Чтоб нормально было,надо поменять оба файла.
Попробовал залить два Ваших файла — выбор городов начинает работать правильно, но перестаёт работать карта на главной странице (шаблон Russia). Как быть?
 

Saska19

Пользователь
Что бы не плодить темы, спрошу здесь, поскольку тема смежная:
Ситуация следующая:

Jv5iz7hh00e2uEHKlAFv8g.jpg

Как в выпадающем списке городов сделать только города выбранной области? Фишка в том (видно на картинке в адресной строке браузера) что параметр область (region) определяется автоматом, но не по RegionId а по названию. Следовательно код
Код:
  $('#regionId').change(function updateCityList() {
						var actualRegionId  = $(this).val();
 
						if ( Math.floor(actualRegionId) == actualRegionId && $.isNumeric(actualRegionId)) {
							/*Get cities per region*/
							$.ajax({
								url: "<?php echo osc_base_url(true); ?>?page=ajax&action=cities",
								data: { regionId: actualRegionId },
								success: function( cities, err){
									var $el = $("#sCity"),
										citiesOptions = {};
								 
									$('#sCity option:gt(0)').remove();
									$el.val("");
									$el.prev("span").text("Any City");
									$.each(cities, function(key, value) {
									  $el.append($("<option></option>")
										.attr("value", value.s_name).text(value.s_name));
									});
									$("#sRegion").attr("value", $("#regionId option[value='"+actualRegionId+"']").text());
								},
								dataType: "json"
							});
						}
					});

автозаполнение не срабатывает (поскольку используется название региона - getParam('sRegion') - а не RegionID)

Можно как то сделать автозаполнение City, основываясь не на RegionID ?


Здравствуйте,
если Вы решили эту задачу, то опишите подробнее, как сделать в поиске выпадающий список регионов и городов. Думаю всем будет интересно!
 

Andy Larkin

Активный пользователь
В item-post.php прописал в выборе города <?php ItemForm::city_select(osc_get_cities(osc_user_region()), osc_user()) ; ?>
но на сайте выводятся только 4 города, в чем проблема?
 

drakon

Активный пользователь
Что бы не плодить темы, спрошу здесь, поскольку тема смежная:
Ситуация следующая:
Я думаю вам надо сменить чпу на латиницу и проблема уйдет. на форуме где то есть как поменять. % уйдут будет нормально искать
 

i7p

Новичок
Друзья, хэлп плиз..
Сделал все по инструкции http://doc.osclass.org/Changing_between_drop-down_and_autocomplete_for_locations
поменял в трех местах на <?php ItemForm::location_javascript(); ?>
обновил item-edit.php и item-post.php

Теперь есть выпадающие пункты на выбор, но по-прежнему только 4 города из первого региона..
1.jpg
 

i7p

Новичок
И, чтобы 2 раза не вставать, второй вопрос:

Как сделать на главной странице поиск с выпадающим меню как при подаче объявления?
Т.е. вот такое же выпадающее меню (как при подаче объявления) хочу видеть на главной при поиске по параметрам.
2.jpg
 
Последнее редактирование:

drakon

Активный пользователь
по 1 вопросу
2 файла по образцу.txt , можете сделать с модерна все работает, только поменяйте расширение на php.
по 2 вопросу вставить нужно там где хотите в форме поиска выбор категорий вод код.
только стилями нужно будет подкорректировать
PHP:
<input type="text" name="sPattern"  id="query" value="<?php echo osc_esc_html( ( osc_search_pattern() != '' ) ? osc_search_pattern() : $sQuery ); ?>" />
		<?php  if ( osc_count_categories() ) { ?>
			<?php osc_categories_select('sCategory', null, __('Select a category', 'modern')) ; ?><?php }?>
Форма поиска на главной странице в файле inc.search.php
Найдите там строки типа <fieldset class="main"> или просто <fieldset> и вставьте данную форму выбора категорий. Так вслепую сложно сказать, что там у Вас.
 

Вложения

  • item-post.txt
    10,2 КБ · Просмотры: 26
  • item-edit.txt
    9,6 КБ · Просмотры: 25

Andy Larkin

Активный пользователь
Все равно в списке городов выводится 4 первые города из базы..
 

i7p

Новичок
Drakon, спасибо за ответ. Но в теме realestate по-прежнему не работает... Если вставляю ваш код полностью, то вообще дважды предлагает выбрать город и область.

Сейчас так:
<div id="publish-right" class="publish-right">
<h2><?php _e('Местонахождение', 'realestate'); ?></h2>
<div class="content add_item">
<div class="ui-generic-form ">
<div class="ui-generic-form-content">
<div class="row">
<label for="countryId"><?php _e('Country', 'realestate'); ?></label>
<?php ItemForm::country_select(osc_get_countries(), osc_user()) ; ?>
</div>
<div class="row ui-row-text">
<label for="regionId"><?php _e('Region', 'realestate'); ?></label>
<?php ItemForm::region_select(osc_get_regions(osc_user_country()), osc_user()) ; ?>
</div>
<div class="row ui-row-text">
<div class="row ui-row-text">
<label for="city"><?php _e('City', 'realestate'); ?></label>
<?php ItemForm::city_select(osc_get_cities(osc_user_region()), osc_user()) ; ?>
</div>
<div class="row ui-row-text">
<label for="city"><?php _e('City Area', 'realestate'); ?></label>
<?php ItemForm::city_area_text(osc_user()) ; ?>
</div>
<div class="row ui-row-text">
<label for="address"><?php _e('Address', 'realestate'); ?></label>
<?php ItemForm::address_text(osc_user()) ; ?>
</div>


При этом все устраивает, кроме четырех городов.
 

drakon

Активный пользователь
Drakon, спасибо за ответ. Но в теме realestate по-прежнему не работает... Если вставляю ваш код полностью, то вообще дважды предлагает выбрать город и область.

В теме realestate работает после таких манипуляций:
Находите код в item-post.php :
PHP:
<div class="row">
<label for="countryId"><?php _e('Country', 'realestate'); ?></label>
<?php ItemForm::country_select(osc_get_countries(), osc_user()) ; ?>
</div>
<div class="row ui-row-text">
<label for="regionId"><?php _e('Region', 'realestate'); ?></label>
<?php ItemForm::region_select(osc_get_regions(osc_user_country()), osc_user()) ; ?>
</div>
<div class="row ui-row-text">
<div class="row ui-row-text">
<label for="city"><?php _e('City', 'realestate'); ?></label>
<?php ItemForm::city_select(osc_get_cities(osc_user_region()), osc_user()) ; ?>
</div>
И вставляете вместо этого - вот этот должно все работать покрайней мере у меня на денвере работает прекрасно.:
PHP:
<?php UserForm::location_javascript(); ?>
				<form action="<?php echo osc_base_url(true) ; ?>" method="post">
					<input type="hidden" name="page" value="user" />
					<input type="hidden" name="action" value="profile_post" />
<fieldset>
							<label for="country"><?php _e('Country', 'realestate') ; ?> *</label>
							<?php UserForm::country_select(osc_get_countries(), osc_user()) ; ?>
						</div>
						<div class="row ui-row-text">
							<label for="region"><?php _e('Region', 'realestate') ; ?> *</label>
							<?php UserForm::region_select(osc_get_regions(), osc_user()) ; ?>
						</div>
						<div class="row ui-row-text">
							<label for="city"><?php _e('City', 'realestate') ; ?> *</label>
							<?php UserForm::city_select(osc_get_cities(), osc_user()) ; ?>
						</div> </fieldset>

Вот этот вывод скрипт выше у вас там <?php UserForm::location_javascript(); ?> удаляете так как во вставленном коде он присутствует. Попробуйте отпишитесь.
 

i7p

Новичок
Уважаемый Drakon, огромное спасибо, Вы меня спасли! ) Все заработало. Но немного пришлось подкорректировать Ваш код. Т.к. ругался из-за </fieldset> и растягивал меню на всю ширину экрана. В итоге работает так:
Код:
<h2><?php _e('Местонахождение', 'realestate'); ?></h2>
<div class="content add_item">
	<div class="ui-generic-form ">
		<div class="ui-generic-form-content">		   
			<div class="row">
				<?php UserForm::location_javascript(); ?>
				<form action="<?php echo osc_base_url(true) ; ?>" method="post">
					<input type="hidden" name="page" value="user" />
					<input type="hidden" name="action" value="profile_post" />
<fieldset>
				<label for="countryId"><?php _e('Country', 'realestate'); ?></label>
				<?php ItemForm::country_select(osc_get_countries(), osc_user()) ; ?>
			</div>
			<div class="row ui-row-text">
				<label for="regionId"><?php _e('Region', 'realestate'); ?></label>
			   <?php ItemForm::region_select(osc_get_regions(osc_user_country()), osc_user()) ; ?>
			</div>
			<div class="row ui-row-text">
		 <div class="row ui-row-text">
				<label for="city"><?php _e('City', 'realestate'); ?></label>
				<?php ItemForm::city_select(osc_get_cities(osc_user_region()), osc_user()) ; ?>
			</div>
			<div class="row ui-row-text">
				<label for="city"><?php _e('City Area', 'realestate'); ?></label>
				<?php ItemForm::city_area_text(osc_user()) ; ?>
			</div>
			<div class="row ui-row-text">
				<label for="address"><?php _e('Address', 'realestate'); ?></label>
				<?php ItemForm::address_text(osc_user()) ; ?>
			</div>

Теперь просто прекрасно! Я Вам очень благодарен!
По второму вопросу (о размещении поиска по категориям на главной) еще не пробовал, руки не дошли.
 

drakon

Активный пользователь
http://hvostyk.ru/
Bender theme, последняя версия os class
В бендер теме другие манипуляции нужно сделать, в item.post:
найти код:
PHP:
 <div class="control-group">
							  <label class="control-label" for="country"><?php _e('Country', 'bender'); ?></label>
							  <div class="controls">
								<?php ItemForm::country_select(osc_get_countries(), osc_user()); ?>
							  </div>
							</div>
вместо него вставить этот:
PHP:
							<?php
							$rCountries = osc_get_countries() ;
							switch( count($rCountries) ) {
							  case 0:	?>
 
 
 
 
								  <div class="control-group">
									<label class="control-label" for="country"><?php _e('Country', 'bender'); ?></label>
									<div class="controls">
									  <input class="country_name" id="country_name" type="text" name="country" value="<?php echo get_country_name($item) ; ?>" />
									</div>
								  </div>
	 
							  <?php
							  break;
							  case 1:   ?>
 
							   <input class="country_id" id="country_id" type="hidden" name="countryId" value="<?php echo $rCountries[0]['pk_c_code'] ; ?>" />
							   
							  <?php
							  break;
							  default: 
								if($edit) { ?>
								  <div class="control-group">
									<label class="control-label" for="country"><?php _e('Country', 'bender'); ?></label>
									<div class="controls">
									  <?php ItemForm::country_select(); ?>
									</div>
								  </div>
								<?php 
								} else { ?>
								  <div class="control-group">
									<label class="control-label" for="country"><?php _e('Country', 'bender'); ?></label>
									<div class="controls">
									  <?php ItemForm::country_select(osc_get_countries(), osc_user()); ?>
									</div>
								  </div>
								<?php
								}
							  break;
							  } ?>
Далее найти этот вывод региона:
PHP:
<?php ItemForm::region_text(osc_user()); ?>
и вставить вместо этого этот:
PHP:
<?php
								if($edit){
								  ItemForm::region_select() ;
								} else { 
								  ItemForm::region_select(osc_get_regions(), osc_user()) ;
								} ?>

Далее найти этот вывод города:
PHP:
<?php ItemForm::city_text(osc_user()); ?>
и вставить вместо этого этот:
PHP:
								<?php if($edit){
								   ItemForm::city_select() ;
								} else { 
								   ItemForm::city_select(osc_get_cities(), osc_user()) ;
								} ?>
Далее нужно подключить скрипт выбора внизу найти кусок кода:
PHP:
	<?php }; ?>
</script>
<?php osc_current_web_theme_path('footer.php'); ?>
и вставить вместо этого этот:
PHP:
	   $('#countryId').change(function() {
		$('#labelregionId').text('<?php _e("Select a region..."); ?>');
		$("#region").before('<select name="cityId" id="cityId" ></select>');
		$("#region").remove();
		$("#regionId").html('<option selected value=""><?php _e("Select a region..."); ?></option>')
		$('#labelcityId').text('<?php _e("Select a city..."); ?>');
		$("#city").before('<select name="cityId" id="cityId" ></select>');
		$("#city").remove();
		$("#cityId").html('<option selected value=""><?php _e("Select a city..."); ?></option>')
});
 
 
 
 
$('#regionId').change(function() {
		$('#labelcityId').text('<?php _e("Select a city..."); ?>');
		$("#city").before('<select name="cityId" id="cityId" ></select>');
		$("#city").remove();
		$("#cityId").html('<option selected value=""><?php _e("Select a city..."); ?></option>')
});
	<?php }; ?>
</script>
<?php osc_current_web_theme_path('footer.php'); ?>
Далее нужно подкорректировать этот файл скрипта oc-content/themes/bender/js/global.js
Найти код:
PHP:
function selectUi(thatSelect){
и вставить вместо него этот:
PHP:
function selectUi(thatSelect,thatid){
Далее в этом же файле найти код:
PHP:
	var uiSelected = $('<span class="select-box-label">'+thatSelect.find("option:selected").text().replace(/^\s*/gm, '')+'</span>');
и вставить вместо него этот:
PHP:
	var uiSelected = $('<span class="select-box-label" id="label'+thatid+'">'+thatSelect.find("option:selected").text().replace(/^\s*/gm, '')+'</span>');
Далее в этом же файле найти код:
PHP:
	$('body').on("created", '[name^="select_"]',function(evt) {
		selectUi($(this));
	});
 
 
 
 
	$('select').each(function(){
		selectUi($(this));
	});
и вставить вместо него этот:
PHP:
	$('body').on("created", '[name^="select_"]',function(evt) {
		selectUi($(this),this.id);
	});
 
 
 
 
	$('select').each(function(){
		selectUi($(this),this.id);
	});
На этом все. Все работает на ура если все правильно подкорректировать как написано выше. Для выбора нескольких стран нужно корректировать ядро скрипта. Если кому надо будет напишу.
Да еще забыл это надо сделать самым первым по ходу, выше найти код js:
PHP:
<?php ItemForm::location_javascript_new(); ?>
поменять на этот:
PHP:
<?php ItemForm::location_javascript(); ?>
 

kotelok

Новичок
Наконец-то хоть кто-то начал отвечать на наши вопросы! Drakon, спасибо Вам огромное!
Подскажите, а в теме Russia каким из этих двух способов починить выбор городов?
 
Верх