Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Динамическая подгрузка данных по событию. Как реализовать?

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
KimIV
phpBB 2.0.1
Сообщения: 286
Стаж: 8 лет 6 месяцев
Откуда: Кунгур
Благодарил (а): 166 раз
Поблагодарили: 21 раз

Динамическая подгрузка данных по событию. Как реализовать?

Сообщение KimIV »

Делаю форму регистрации. Там выбор стран и выбор регионов. Хочу, чтобы список регионов наполнялся после выбора страны.

В качестве идеального ответа на мой вопрос вижу ссылку на реально работающее расширение, в котором реализовано динамическое наполнение второго <select> после выбора одного из <option> в первом <select>.

Спасибо!
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 2 месяца
Откуда: Калининград не Кенигсберг
Благодарил (а): 41 раз
Поблагодарили: 1716 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение Sheer »

Поиск в гугле: связанные списки
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
KimIV
phpBB 2.0.1
Сообщения: 286
Стаж: 8 лет 6 месяцев
Откуда: Кунгур
Благодарил (а): 166 раз
Поблагодарили: 21 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение KimIV »

Sheer, в яндексе я нашёл и уже делаю... но хотелось бы пример в виде расширения. Тут же не голые php и JS, а всё с какими-то своими обвёртками.

Отправлено спустя 1 минуту 24 секунды:
Я имею в виду, что может уже всё написано и классы соответствующие есть...
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 830 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение LavIgor »

KimIV, быстрый ответ QuickReply Reloaded основан на подгрузке данных через Ajax и может являться примером для старта.
Аватара пользователя
KimIV
phpBB 2.0.1
Сообщения: 286
Стаж: 8 лет 6 месяцев
Откуда: Кунгур
Благодарил (а): 166 раз
Поблагодарили: 21 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение KimIV »

LavIgor, спасибо! Как раз его и смотрю. И ещё спасибки которое раздаёт. Там тоже AJAX применяется.
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
Аватара пользователя
KEMnEP
phpBB 2.0.17
Сообщения: 1118
Стаж: 9 лет 1 месяц
Благодарил (а): 42 раза
Поблагодарили: 279 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение KEMnEP »

Даже в videobbredy есть кросдоменная подгрузка данных методом гет, но это так к слову. А вообще первое что выдал гугл http://webersoft.ru/select-ajax-mysql/ и имхо подробней некуда.
Аватара пользователя
KimIV
phpBB 2.0.1
Сообщения: 286
Стаж: 8 лет 6 месяцев
Откуда: Кунгур
Благодарил (а): 166 раз
Поблагодарили: 21 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение KimIV »

KEMnEP писал(а): А вообще первое что выдал гугл
Там тоже пример приведён в виде отдельного php-файла. И он не работает, когда серверную сторону начинаешь заворачивать в класс. В частности вот этот код print json_encode($result); возвращает "Cannon modify header information - headers already sent by (здесь указание на контроллер, в котором вышеуказанный код)"
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 73 раза
Поблагодарили: 248 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение Алг »

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

Т. Шаов
Аватара пользователя
KEMnEP
phpBB 2.0.17
Сообщения: 1118
Стаж: 9 лет 1 месяц
Благодарил (а): 42 раза
Поблагодарили: 279 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение KEMnEP »

KimIV,

Код: Выделить всё

<script type="text/javascript">
/*! Chained 1.0.0 - MIT license - Copyright 2010-2014 Mika Tuupola */
!function(a,b){"use strict";a.fn.chained=function(c){return this.each(function(){function d(){var d=!0,g=a("option:selected",e).val();a(e).html(f.html());var h="";a(c).each(function(){var c=a("option:selected",this).val();c&&(h.length>0&&(h+=b.Zepto?"\\\\":"\\"),h+=c)});var i;i=a.isArray(c)?a(c[0]).first():a(c).first();var j=a("option:selected",i).val();a("option",e).each(function(){a(this).hasClass(h)&&a(this).val()===g?(a(this).prop("selected",!0),d=!1):a(this).hasClass(h)||a(this).hasClass(j)||""===a(this).val()||a(this).remove()}),1===a("option",e).size()&&""===a(e).val()?a(e).prop("disabled",!0):a(e).prop("disabled",!1),d&&a(e).trigger("change")}var e=this,f=a(e).clone();a(c).each(function(){a(this).bind("change",function(){d()}),a("option:selected",this).length||a("option",this).first().attr("selected","selected"),d()})})},a.fn.chainedTo=a.fn.chained,a.fn.chained.defaults={}}(window.jQuery||window.Zepto,window,document);
</script>
+ Не надо нечего сторонего, не пхп не базы данных, чистый джиквери плагин.
Здесь по русски http://awesome-design.com/stati/javascr ... ectes.html (кривая русификация, файл скрипта взять из оригинала, или из кода приведённого мной выше)
Оригинал http://www.appelsiini.net/projects/chained
упд, проверенно, работает

Отправлено спустя 8 минут 45 секунд:
готовый пример из коробки

Код: Выделить всё

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
/*! Chained 1.0.0 - MIT license - Copyright 2010-2014 Mika Tuupola */
!function(a,b){"use strict";a.fn.chained=function(c){return this.each(function(){function d(){var d=!0,g=a("option:selected",e).val();a(e).html(f.html());var h="";a(c).each(function(){var c=a("option:selected",this).val();c&&(h.length>0&&(h+=b.Zepto?"\\\\":"\\"),h+=c)});var i;i=a.isArray(c)?a(c[0]).first():a(c).first();var j=a("option:selected",i).val();a("option",e).each(function(){a(this).hasClass(h)&&a(this).val()===g?(a(this).prop("selected",!0),d=!1):a(this).hasClass(h)||a(this).hasClass(j)||""===a(this).val()||a(this).remove()}),1===a("option",e).size()&&""===a(e).val()?a(e).prop("disabled",!0):a(e).prop("disabled",!1),d&&a(e).trigger("change")}var e=this,f=a(e).clone();a(c).each(function(){a(this).bind("change",function(){d()}),a("option:selected",this).length||a("option",this).first().attr("selected","selected"),d()})})},a.fn.chainedTo=a.fn.chained,a.fn.chained.defaults={}}(window.jQuery||window.Zepto,window,document);
</script>
</head>
<body>
<select id="categories">
  <option value="">Какие статьи мы можем Вам предложить?</option>
  <option value="php-snippets" class="programming">PHP snippets</option>
  <option value="php-oop" class="programming">PHP ООП</option>
  <option value="php-work-with-images" class="programming">PHP и изображения</option>
</select>
<select id="articles">
  <option value="">Статьи</option>
  <option value="what-is-snippets" class="php-snippets">PHP - что такое snippets?</option>
  <option value="snippets-web-sites" class="php-snippets">PHP snippets - ресурсы?</option>
  <option value="php5-whats-new" class="php-oop">PHP 5 - что нового?</option>
  <option value="php-code-templates" class="php-oop">PHP - шаблоны проектрирования</option>
  <option value="php-uploading-images" class="php-work-with-images">PHP - загружаем изображения</option>
  <option value="php-images-and-watermarks" class="php-work-with-images">PHP - размещаем watermark</option>
</select>
<script type="text/javascript">
jQuery(document).ready(function(){
	jQuery("#articles").chained("#categories");
});
</script>
</body>
</html>
Аватара пользователя
KimIV
phpBB 2.0.1
Сообщения: 286
Стаж: 8 лет 6 месяцев
Откуда: Кунгур
Благодарил (а): 166 раз
Поблагодарили: 21 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение KimIV »

Ещё вопрос возник такого рода. Почему-то интернет изобилует примерами на основе XMLHTTP-объекта. Например, вот типовая функция его создания:

Код: Выделить всё

function getXmlHttp() {
	var xmlhttp;
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
}
А в расширениях для phpBB3.1 применяется конструкция вида:

Код: Выделить всё

$.ajax({
	type: "POST",
	url: url,
	data: { ........... },
	success: function (data) { ........... },
	error: function ( .............) {
		alert(...........);
	}
});
Чем плох объект XMLHTTP? С совместимостью с браузерами проблема? На мобильных не будет работать или что ещё?
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 830 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение LavIgor »

KimIV писал(а): Чем плох объект XMLHTTP?
Тем, что он устарел.
Эта функция, скорее всего, просто раньше появилась.
Аватара пользователя
Алг
Former team member
Сообщения: 933
Стаж: 11 лет 8 месяцев
Откуда: Израиль
Благодарил (а): 73 раза
Поблагодарили: 248 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение Алг »

KimIV писал(а): Чем плох объект XMLHTTP
объект называется XMLHttpRequest и он не устарел. Поддерживается всеми современными браузерами и ИЕ, начиная с 10-й версии. Просто Вы привели два разных метода:
1. на чистом джаваскипт с использованием этого объекта или ActiveXObject для ИЕ старых версий
2. с использованием jquery.ajax , а он внутри себя пользуется теми же объектами
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
KimIV
phpBB 2.0.1
Сообщения: 286
Стаж: 8 лет 6 месяцев
Откуда: Кунгур
Благодарил (а): 166 раз
Поблагодарили: 21 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение KimIV »

Алг писал(а): 2. с использованием jquery.ajax , а он внутри себя пользуется теми же объектами
После ответа LavIgor, у меня как раз такая мысль и возникла. Изучаю внутренности jQuery...

KEMnEP, а смысл снаружи тянуть jQuery? <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> Тем более в полной версии (с пробелами и всеми читабельными форматами). В phpBB уже подключена ужатая библиотека 1.11.0

Отправлено спустя 3 минуты 41 секунду:
Алг писал(а): а он внутри себя пользуется теми же объектами
Истинно так. jQuery - это всего лишь обёртка для XMLHttpRequest
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.
Аватара пользователя
KEMnEP
phpBB 2.0.17
Сообщения: 1118
Стаж: 9 лет 1 месяц
Благодарил (а): 42 раза
Поблагодарили: 279 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение KEMnEP »

KimIV писал(а): а смысл снаружи тянуть jQuery? <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
Естественно это был технологический пример штмл файла. а не полностью готовое решение встройки в phpbb. Странно что Вас теги <html><head> не смутили)))
Аватара пользователя
KimIV
phpBB 2.0.1
Сообщения: 286
Стаж: 8 лет 6 месяцев
Откуда: Кунгур
Благодарил (а): 166 раз
Поблагодарили: 21 раз

Re: Динамическая подгрузка данных по событию. Как реализовать?

Сообщение KimIV »

KEMnEP писал(а): Странно что Вас теги <html><head> не смутили)))

Меня ничё не смущает, даже полный бред, потому как полный ноль в предмете и только-только пытаюсь разобраться :D
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.

Вернуться в «Для разработчиков»