.... вы можете использовать ваше поле с датой, как поле для фильтра.
$FORMS['reflection_field_date'] = <<<END
<tr>
<td style="width:100%;">
%title%:
</td>
<td>
<input class="datepicker" type="text" name="%input_name%" value="%value%" size="20" />
</td>
</tr>
END;
- сделать так чтобы в поле подставлялось значение из всплывающего календаря?
- фильтрация по значению выбранному в сплывающем календаре
<input type="hidden" class="textinputs" id="publish_time_hidden" value="" name="fields_filter[publish_time][0]">
<input type="text" class="textinputs datepicker_class" id="publish_time" value="">
$( ".datepicker_class" ).datepicker({
altField: '#publish_time_hidden',
altFormat: "@",
numberOfMonths: 2,
dateFormat :'d MM, yy',
firstDay: 1,
dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
monthNames: [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря" ],
monthNamesShort: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
onSelect: function(dateText, inst) {
var alt_Field = jQuery('#'+jQuery(this).attr('id')+'_hidden');
var altFieldVal = jQuery(alt_Field).val();
jQuery(alt_Field).val(Math.round((altFieldVal / 1000)));
}
});
подстановка значения выбранного в datepicker (а я предполагаю вы используете именно его) это задача не к umi механизмам, а к js самого datepicket, посмотрите примеры с его использованием.
- вывод всплывающего календаря
<form>
<input type="hidden" class="textinputs" id="publish_time_hidden" value="" name="fields_filter[start_tour][0]" />
<input type="text" class="textinputs datepicker_class" id="publish_time" value="" />
<input type="submit" value="Искать" />
</form>
<form>
<input type="hidden" class="textinputs" id="publish_time_hidden" value="" name="fields_filter[publish_time][0]" />
<input type="text" class="textinputs datepicker_class" id="publish_time" value="" />
<input type="submit" value="Искать" />
</form>
<xsl:apply-templates select="document('udata://news/lastlist/?extProps=publish_time,anons')" mode="select-to-data" />
?fields_filter[start_tour]=123 означает выводить элементы, у которых в поле start_tour значение равно 123Этот вариант я уже пробовал, но туры выводятся по прежнему не только за выбранное число (например 10 июля), но и за остальные последующие числа тоже (после 10-го июля).
и если вы используете поля типа дата указывайте время в unix timestamp формате
и если вы используете поля типа дата указывайте время в unix timestamp форматеУточните, пожалуйста, где конкретно указать формат даты - в шаблоне объекта (тура) ?
<xsl:value-of select="document(concat('udata://system/convertDate/', page/properties/group/property/value/@unix-timestamp, '/(d.m.Y)/'))/udata"/>
Для полей типа "дата" можно задать формат значения для поиска, используя атрибут format ("timestamp" либо "UTC").
<property name="last_request_time">
<min-value format="timestamp">3600</min-value>
<max-value format="UTC">2007-11-10 14:48:10</max-value>
</property>
/travel_tours/prefabricated_tours_to_st_petersburg_for_individual_tourists/?fields_filter[start_tour][0]=1372622400&fields_filter[start_tour][1]=1373400000вот в этом то всё и дело, что диапозон "с и по" не нужен, нужна только одна дата которая выводит только те туры, которые проходят по этой дате как активные.
В итоге, у вас вывелись только те туры, которые начинаются в этом диапазоне дат.
Дело осталось за малым, передавать эти параметры в адресную строку при загрузке страницы.Вот здесь я и застопорился... пробую использовать такую строку по вашей рекомендации
/travel_tours/prefabricated_tours_to_st_petersburg_for_individual_tourists/?fields_filter[start_tour][0]=1372622400&fields_filter[start_tour][1]=1373400000вот в этом то всё и дело, что диапозон "с и по" не нужен, нужна только одна дата которая выводит только те туры, которые проходят по этой дате как активные.
В итоге, у вас вывелись только те туры, которые начинаются в этом диапазоне дат.Дело осталось за малым, передавать эти параметры в адресную строку при загрузке страницы.Вот здесь я и застопорился... пробую использовать такую строку по вашей рекомендации
<form>
<div class="buttom-link2">
<input type="hidden" class="textinputs" id="publish_time_hidden" value="" name="fields_filter[start_tour]" />
<input type="text" class="textinputs datepicker_class" id="publish_time" value="" />
<input class="button4" type="submit" value="Найти" />
</div>
</form>
, но всё равно выводятся все туры начиная с этой даты,а не только в эту дату, а в адресной строке такое содержание:
/travel_tours/prefabricated_tours_to_st_petersburg_for_individual_tourists/?fields_filter[start_tour]=1373400000
для вывода конкретной даты попробуйте такие параметры fields_filter[start_tour][0]=1372622400&fields_filter[start_tour][1]=1372622400, то есть одну дату для значение от и до.я так уже пробовал вставлять в адресную строку и мне действительно выводились туры на одну конкретную дату и как в данном случае только туры на 1-е июля.
Соответственно input в форме, которую вы отправляете, поменяйте, чтобы в адресной строке получился вышеописанный примерВот у меня и вопрос об этом - как же её эту форму <input type="hidden" class="textinputs" id="publish_time_hidden" value="" name="fields_filter[start_tour]" /> так поменять, что бы
Вот так пробовал:
<input type="hidden" class="textinputs" id="publish_time_hidden" value="" name="fields_filter[start_tour{0}&fields_filter[start_tour]{1}" />
но ошибка получается
Warning: XSLTProcessor::importStylesheet(): /var/www/clients/client0/web106/web/templates/rusgorod/xslt/modules/catalog/category-view-id150.xsl:17: parser error : EntityRef: expecting ';'
и далее по тексту...
<input type="hidden" class="textinputs" id="publish_time_hidden" value="1373400000" name="fields_filter[start_tour][0]" />
<input type="hidden" class="textinputs" id="publish_time_hidden" value="1373400000" name="fields_filter[start_tour][1]" />
НО в действительности если не в ручную, а через выбор из календаря дату 22 июля, то вот с таким адресомТеперь о вашей задаче. Если вам надо вывести все мероприятия, дата начала которых лежит в определенном диапазоне, то задайте 2 вышеприведенных параметр указав им соответствующие даты начала и конца временного диапазона. Что вы в общем то и сделали, только перепутали даты у вас получилось вывести мероприятия дата начала которых меньше 09 Jul 2013 и больше 21 Jul 2013, но система за вас поменяла их местами.
?fields_filter[start_tour][0]=1374436800&fields_filter[start_tour][1]=1373400000
выводятся туры и за 22 июля и за 10 июля... очевидно что только первое значени подставляется 1374436800 вместо 1373400000 для fields_filter[start_tour][0], а для fields_filter[start_tour][1] значение остаётся прежним 1373400000
я честно говоря не вижу, в вашем случае, неверного поведения системы.Результат устраивает на половину, то есть система выводит туры ОТ выбранной даты, но вот пока не решён вопрос с датой которая ДО.
В итоге у меня вопрос вы получили именно то что и хотели, но вы явно пишите что что-то работает не так. Что вы хотели получить в результате?
а тут вы встали на грабли неправильного использования js... так как, у обоих input одинаковый id, который и используется js для подставки значения в input.. что и приводит ошибке
<script>
$(function() {
$( ".datepicker_class" ).datepicker({
altField: '#publish_time_hidden',
altFormat: "@",
numberOfMonths: 1,
dateFormat :'d MM, yy',
firstDay: 1,
dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
monthNames: [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря" ],
monthNamesShort: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
onSelect: function(dateText, inst) {
var alt_Field = jQuery('#'+jQuery(this).attr('id')+'_hidden');
var altFieldVal = jQuery(alt_Field).val();
jQuery(alt_Field).val(Math.round((altFieldVal / 1000)));
}
});
});
</script>
<script>
$(function() {
$( ".datepicker_class" ).datepicker({
altField: '#publish_time_hidden',
altField: '#publish_time_hidden1',
altFormat: "@",
numberOfMonths: 1,
dateFormat :'d MM, yy',
firstDay: 1,
dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
monthNames: [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря" ],
monthNamesShort: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
onSelect: function(dateText, inst) {
var alt_Field = jQuery('#'+jQuery(this).attr('id')+'_hidden');
var altFieldVal = jQuery(alt_Field).val();
jQuery(alt_Field).val(Math.round((altFieldVal / 1000)));
}
});
});
</script>
это вопрос к js. вы не верно используете указание параметров , второй параметр просто перекрывает первый.да, я понимаю, что перекрытие случается при таких условиях, однако как сделать так, что бы последний параметр не перекрывал предыдущий, ведь в нашем случает без второго ID не обойтись ?
перешустрить интернет на тему того, как при выборе даты в datepicker вписать значение в 2 поля. Это вопрос уже не к umi а к js, а так как дальше будет только больше такого, стоит потратить время и разобраться с этими вопросамиСпасибо, ясно.
подстановка значения выбранного в datepicker (а я предполагаю вы используете именно его) это задача не к umi механизмам, а к js самого datepicket, посмотрите примеры с его использованием.
Добавлю лишь что datepicker возвращает значение unix timestamp в не совсем верном виде/ Поэтому делаем 2 поля одно скрытое для фильтрации и одно подставное для вывода
Пример js которая кКод: [Выделить]привязывает datepicker<input type="hidden" class="textinputs" id="publish_time_hidden" value="" name="fields_filter[publish_time][0]">
<input type="text" class="textinputs datepicker_class" id="publish_time" value="">Код: [Выделить]$( ".datepicker_class" ).datepicker({
altField: '#publish_time_hidden',
altFormat: "@",
numberOfMonths: 2,
dateFormat :'d MM, yy',
firstDay: 1,
dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
monthNames: [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря" ],
monthNamesShort: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
onSelect: function(dateText, inst) {
var alt_Field = jQuery('#'+jQuery(this).attr('id')+'_hidden');
var altFieldVal = jQuery(alt_Field).val();
jQuery(alt_Field).val(Math.round((altFieldVal / 1000)));
}
});
конечно заливайте конечный результат, такая работа была сделанна, явно может быть полезна другим
<head>
<!-- Calendar -->
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<script>
$(function() {
$( ".datepicker_class" ).datepicker({
altField: '#publish_time_hidden',
altFormat: "@",
numberOfMonths: 1,
dateFormat :'d MM, yy',
firstDay: 1,
dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
monthNames: [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря" ],
monthNamesShort: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
onSelect: function(dateText, inst) {
var alt_Field = jQuery('#'+jQuery(this).attr('id')+'_hidden');
var altFieldVal = jQuery(alt_Field).val();
jQuery(alt_Field).val(Math.round((altFieldVal / 1000)));
}
});
});
</script>
<script>
$(function() {
$( ".datepicker_class2" ).datepicker({
altField: '#publish_time2_hidden2',
altFormat: "@",
numberOfMonths: 1,
dateFormat :'d MM, yy',
firstDay: 1,
dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
monthNames: [ "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря" ],
monthNamesShort: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
onSelect: function(dateText, inst) {
var alt_Field = jQuery('#'+jQuery(this).attr('id')+'_hidden2');
var altFieldVal = jQuery(alt_Field).val();
jQuery(alt_Field).val(Math.round((altFieldVal / 1000)));
}
});
});
</script>
<!-- / Calendar -->
</head>
<form>
<div class="buttom-link2">
с <input type="hidden" class="textinputs" id="publish_time_hidden" value="" name="fields_filter[start_tour][0]" />
<input type="text" class="textinputs datepicker_class" id="publish_time" value="" />
<input type="hidden" class="textinputs" id="publish_time2_hidden2" value="" name="fields_filter[start_tour][1]" />
по <input type="text" class="textinputs datepicker_class2" id="publish_time2" value="" />
<input class="button4" type="submit" value="Найти" />
</div>
</form>