В материале есть n-ное количество числовых полей (услуга/цена). Если настраивать фильтры через views, то для каждой стоки необходимо вводить значение. Получается громоздко и не удобно. Возможно ли при помощи стандартных модулей вводить цену один раз, а поля к которым она будет применяться отмечать чекбоксами?
Если коряво изложил праттачил рисунок, для пояснения)
Вложение | Размер |
---|---|
problem.jpg | 9.7 КБ |
Комментарии
вопрос стал более конкретным: можно ли это сделать путем теменизации Exposed Filter?
UP!
Быстрое решение, которое приходит на ум:
<?php
//$query->where['0']['args']['0'] = $view->args['1'];
function mymodule_views_query_alter(&$view, &$query){
// Переписываем нужный аргумент в нужную графу запроса
//В помощь:
}//drupal_set_message('<pre>1: '. print_r($view->args, 1).'</pre>',status);
//drupal_set_message('<pre>2: '. print_r($view->query, 1).'</pre>',status);
?>
У вас на каждое значение новое поле цены?
UnnamedNETUA натолкнул меня на мысль что можно все это сделать через JQuery, т.е.
на ваши радио-буттоны установить обработчик который будет скрывать поле цены для одной услуги и отображать для другой.
Так сделайте одно поле - цена на все условия...
к сожаленю, тут есть еще пара условий, которые (как мне кажется) выполняются только при подобной организации:
- готовый список услуг (over 9000)
- у каждой свое название и стоимость
- группировка полей по категориям услуг
- зависимые от вида организации поля
- они должны выводиться и редактироваться в профиле организации.
если есть другие способы организации подобного с радостью выслушаю)
Решили сделать через темизцию фильтров и js. Возник вопрос, как при использовании оператора "между" присвоить дополнительный класс для строк минимальных и максимальных значений? Причем для каждого свой?
На данный момент имем:
<?php
<div id="test1-wrapper" class="form-item">
<input id="test1-min" class="form-text" type="text" value="" size="30" name="test1[min]" maxlength="128">
</div>
<div id="test2-wrapper" class="form-item">
<label for="test2-max">И: </label>
<input id="test2-max" class="form-text" type="text" value="" size="30" name="test2[max]" maxlength="128">
?>
Надо:
<?php
<div id="test1-wrapper" class="form-item">
<input id="test1-min" class="form-text MIN" type="text" value="" size="30" name="test1[min]" maxlength="128">
</div>
<div id="test2-wrapper" class="form-item">
<label for="test2-max">И: </label>
<input id="test2-max" class="form-text MAX" type="text" value="" size="30" name="test2[max]" maxlength="128">
?>
эээ
$('#test2-max').addClass('MAX');
решили следующим способом. темезируем views-exposed-form.tpl.php следующим образом:
<?php if (!empty($q)): ?> <?php print $q; ?> <?php endif; ?>
<div class="views-exposed-form">
<?php if ($widgets) { ?>
<div id="filter">
<form name="form" method="post" action="" id="mayform">
<div id="filter_area">
<?php foreach ($widgets as $id => $widget): ?>
<div class="filtr_box">
<input type="checkbox" name="checkbox[]" value="checkbox" class="selektor" onclick="Go()" />
<label for="<?php print $widget->id; ?>"><?php print $widget->label; ?></label>
<div class="filter_widget"><?php print $widget-> widget ; ?></div>
</div>
<?php endforeach; ?>
</div>
<input type="checkbox" name="total" id="selektor" value="checkbox" onClick="checkAll(this.form,'checkbox[]',this.checked)">все<br>
</form>
<input id="text_1" name="textarea"> <input id="text_2" name="textarea">
</div>
<?php } ?>
<div id="sort">
<?php if (!empty($sort_by)): ?>
<div class="sort_by"> <?php print $sort_by; ?> </div>
<div class="sort_order"> <?php print $sort_order; ?> </div>
<?php endif; ?>
<div class="submit_button"> <?php print $button; ?> </div>
</div>
</div>
<script type="text/javascript" >
// выделяем все чекбоксы
function checkAll(oForm, cbName, checked)
{for (var i=0; i < oForm[cbName].length; i++) oForm[cbName][i].checked = checked;}
// копируем текст в текстовые области
$(document).ready(function() {
$('input[class*=form-text]').val('');
var g=1;
$('input[class*=form-text]:even').each(function() {
$(this).attr('srs','text_1_' + g + '_ch');
g ++;
});
var s=1;
$('input[class*=form-text]:odd').each(function() {
$(this).attr('srs','text_2_' + s + '_ch');
s ++;
});
var a=1;
$('input[name=checkbox[]]').each(function() {
$(this).attr('srs', a + '_ch');
a ++;
});
//добавляем класс
$('.selektor').change(function(event){
srs = $(this).attr('srs');
var div = $('input[srs=text_1_'+ srs +']');
$(this).prop('checked') ? div.addClass('checked_1') : $div.removeClass('checked_1');
var div = $('input[srs=text_2_'+ srs +']');
$(this).prop('checked') ? div.addClass('checked_2') : $div.removeClass('checked_2');
});
$('#text_1').keyup(function(){
data = $(this).val();
$('input:checkbox:checked').each(function() {
if($(this).attr('name') == "checkbox[]") {
srs = $(this).attr('srs');
$('input[srs=text_1_'+ srs +']').val('').val(data);
}
});
});
$('#text_2').keyup(function(){
data = $(this).val();
$('input:checkbox:checked').each(function() {
if($(this).attr('name') == "checkbox[]") {
srs = $(this).attr('srs');
$('input[srs=text_2_'+ srs +']').val('').val(data);
}
});
});
});
</script>
?>
ну и немного css магии:
idшников слишком много, они views генеряться, в зависимости от поля.