Фильтр по полям или автозаполнение категl

  • 2 Ответов
  • 605 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Risenab

  • **
  • 13
  • 0
День добрый. Имею простенький сайт анкет на Ads с тонной категорий и полей.

Было решено сразу - в категориях копаться пользователю нельзя. Это и дискомфорт, и "мало ли"... Так что немного пошаманил в файле jquerty.doubleselect.js (com_adsmanager/js/jquerty.doubleselect.js) и сделал автозаполнение категорией по умолчанию для любой анкеты. То есть, при добавлении анкеты та сразу летит в нужную мне категорию. Имеет это вот такой вид, если кому интересно.

Код
		$('<div id="'+container+'" class="doubleselect_container row-fluid row"> \
   <div class="doubleselect_notselected span5 col-md-5"> \
    <select multiple="multiple" id="'+not_selected_list+'" name="'+not_selected_list+'" size="'+size+'" /> \
   </div> \
   <div class="doubleselect_action span2 col-md-2"> \
    <div> \
    <input id="'+add_button+'" name="'+add_button+'" value="'+options.add_button+'" type="button" class="button " /> \
    <input id="'+remove_button+'" name="'+remove_button+'" value="'+options.remove_button+'" type="button" class="button " /> \
    </div> \
   </div> \
   <div class="doubleselect_selected span5 col-md-5"> \
    <select multiple="multiple" id="'+selected_list+'" name="'+selected_list+'" size="'+size+'"> <option price="0" value="1">Анкеты (по умолчанию)</option> </select> \
   </div> \
   <div class="doubleselect_hidden"> \
   </div> \
   </div>').insertAfter(this);
           
not_selected_list = "#"+not_selected_list;
selected_list = "#"+selected_list;
add_button = "#"+add_button;
remove_button = "#"+remove_button;
container = "#"+container;
$("option",this).each(function(){
$(this).appendTo($(not_selected_list));
});

+ блок вывода категорий при добавлении закомментировал, чтобы пользователю тот глаза не мозолил.

Однако, база анкет растет. Вручную уже не могу справляться с присвоением категорий на основе многочисленных полей и было решено сделать автоматизацию - автоматическое присвоение категории если поле имеет значение X (и автоматическое удаление категории, если это значение меняется или удаляется вовсе) либо создать фильтрацию по полям. И тут проблема - что к чему черт его знает. Знаний php и jquerty не хватает (сделал 1 решение, но оно не работает; решение ниже).

Код
			   <div class="doubleselect_selected span5 col-md-5"> \
    <select multiple="multiple" id="'+selected_list+'" name="'+selected_list+'" size="'+size+'"> <option price="0" value="1">Анкеты (по умолчанию)</option> <?php if (isset($content->ad_rf[0])) {echo '<option price="0" value="11">123</option>';}?> </select> \
   </div> \

Может кто готов за плату реализовать задумку или уже имеет готовое решение данной проблемы?  *DRINK*

P.S.> Путем проб и ошибок выяснил, что последний код (выше) работает, но требует безопасной интеграции в общий скрипт. А вот с интеграцией проблемы, тут то знаний уже маловато.
« Последнее редактирование: 16.01.2017, 19:19:04 от Risenab »

*

grinat

  • ****
  • 356
  • 32
Да проще чем с jquery дело иметь, задавать правила в php. В contoller.php есть функция save, там и пропишите правила в духе:
Код: php
$mycat = 1; //категория по умолчанию
//правила присвоения
if(JRequest::getVar( 'поле')=='трынь' && JRequest::getVar( 'поле2')=='дрынь'){
      $mycat = 20;
}
//либо без фильтра Joomla(JRequest::getVar) если эти переменные в правилах не перезаписываются, так будет быстрее работать
if($_POST[ 'поле']=='трынь' && $_POST[ 'поле2']=='дрынь'){
      $mycat = 20;
}
//конец правила
//после правил во все переменные записать категорию, потому что дальше обработчик возьмет ее из массива post данных Joomla
$_POST['category'] = $mycat;
$_REQUEST['category'] = $mycat;
JRequest::setVar('category', $mycat);

Если через jquery, то код определения категория надо поместить в функцию, которая в форме в onsubmit задана(т.е. функция которая осуществляет проверку данных полей перед их передачей на сервер), там в таком же духе код написать
Код: javascript
var mycat = 1; //категория по умолчанию
//правила
if($('#поле').val()=='трынь' && $('#поле2').val()=='дрынь'){
     mycat = 20;
}
//запись id в поле категории для передачи
$("input[name='category']").val(mycat);

*

Risenab

  • **
  • 13
  • 0
За глобальную подсказку благодарю. Лучше, чем ничего.

После теста отпишусь.