Как сделать кликабельные фильтры?

голоса: 0

Добрый день! А можно ли на ucoz сделать кликабельные фильтры? Например добавил фильтр в модуле load - Раздел: "Фильмы", "мультфильмы", "Сериалы". Вывил значение на страницу с материалом и комментариев кодом 
<b>Раздел</b>: $FILTER1_VALUE$.

 
| Автор: | Категория: Каталоги
Изменение категории | | Автор: Yuri_Geruk

Ответов: 1

Голоса: +1
 
Лучший ответ
Что-то подобное ранее уже рассматривалось, ознакомьтесь с материалом https://www.ucoz.ru/qa/index.php/138833
| Автор:
Выбор ответа лучшим | | Автор: DirtyDog

Это я видел, но как работает этот код?

<?ifnot(strpos($FILTER1_VALUE$,'Off Road')=-1)?><a href="$SECTION_URL$-1-3-0-0-53-0">Off Road</a><?endif?>

 

Мне кажется на моем сайте не получится сделать! У меня  главная страница "Каталог файлов." Я хотел реализовать такую вещь! При добавлении материала я добавил выбор разрешений экранов, релиз-группы и разделов "Фильм, мультфильм, сериал" путем добавления новых разделом и категорий в модуле load. Но столкнулся с такой проблемой, получилось что при добавлении материала, при выборе категорий приходится выбирать (ставить отметок) много категорий. Зачастую забываю ставить, какие то категории! Решил вынести раздел, разрешение и релиз-группу в отдельные фильтры (фильтр 1, фильтр 2, фильтр 3), а жанры оставить в категориях, чтобы было удобнее заполнять поля при добавлении. но походу не получится, так как фильтры работают ТОЛЬКО в разделах и категориях модулей.

DirtyDog,
В вопросе по ссылке все детально описано и озвучено откуда берутся и какие значения.

$SECTION_URL$

это ссылка в раздел. Но мне надо чтоб фильтр выводил все значения выбранные фильтом во всем модуле load, то есть если у меня на сайте останутся категории(жанры) и находясь в категории(жанр) "комедии", выбрав значение фильтр " Фильмы", то фильтр покажет все материалы в категории(жанр) комедия. А мне нужно во всем модуле! То есть фильмы других категорий(жанров) он не показывает!

PS. Мне нужно сделать все тоже самое как и с тегами (показ всех материалов на сайте в модуле), но при добавлении не писать их, а выбирать как поле категории! Вот не могу сообразить как это реализовать в ucoz!

Все спасибо. Кажется понял!

<?ifnot(strpos($FILTER1_VALUE$,'Фильмы')=-1)?><a href="zhanr?sort=2&filter1=1">Фильмы</a><?endif?> <?ifnot(strpos($FILTER1_VALUE$,'Сериалы')=-1)?><a href="zhanr?sort=2&filter1=2">Сериалы</a><?endif?> <?ifnot(strpos($FILTER1_VALUE$,'Мультфильмы')=-1)?><a href="zhanr?sort=2&filter1=3">Мультфильмы</a><?endif?>

И также с разрешениями и релиз-группами! нужно просто оставить один раздел "Жанры" и тогда все фильтры (их будет 3) будет показывать материалы в разделе жанры, а не только в категориях (напр.комедии, ужасы и тд)!

 

Опа, а фильтов то можно только 2 создавать?

DirtyDog,
Да, системных 2, но не забывайте, что доп поля еще добавили в каталог и их можно делать фильтрами http://joxi.ru/v293QxEHGnkKWr

О, вот это хорошее обновлении. А чем в $OTHER1_FL$ и $OTHER1_VAL$ отличаются в форме добавления?

И мануале написано

У полей, для которых активирована опция "Фильтр", при добавлении материала можно либо выбрать значение фильтра из выпадающего списка

А как сделать выпадающий список то?

    <?if($OTHER1_FL$)?>
    <li><label for="other1">$OTHER1_SIGN$:</label>      <li>$OTHER1_FL$<?endif?>

    <?if($OTHER2_FL$)?>
    <li><label for="other2">$OTHER2_SIGN$:</label>      <li>$OTHER2_FL$<?endif?>

    <?if($OTHER3_FL$)?>
    <li><label for="other3">$OTHER3_SIGN$:</label>      <li>$OTHER3_FL$<?endif?>

DirtyDog,
Первый оператор просто означает что это первое доп поле, а второй выводит значения первого доп поля подобно $FILTER1_VALUE$ только оператор $OTHER1_VAL$ для формы добавления лишь используется, на странице комментариев модуля он не доступен, лишь в шаблоне страницы категории http://joxi.ru/Y2Lzj37TnXVzQr

И мануале написано

У полей, для которых активирована опция "Фильтр", при добавлении материала можно либо выбрать значение фильтра из выпадающего списка

А как сделать выпадающий список то?

    <?if($OTHER1_FL$)?>
    <li><label for="other1">$OTHER1_SIGN$:</label>      <li>$OTHER1_FL$<?endif?>

    <?if($OTHER2_FL$)?>
    <li><label for="other2">$OTHER2_SIGN$:</label>      <li>$OTHER2_FL$<?endif?>

    <?if($OTHER3_FL$)?>
    <li><label for="other3">$OTHER3_SIGN$:</label>      <li>$OTHER3_FL$<?endif?>

DirtyDog,

Список выводится операторами:

$OFILTER1_MENU$

выводится в шаблоне страницы категории соответственно 1 это айди первого доп поля которое используется как фильтр, в стандартном наборе их доступно для бесплатников от 3 и для платников до 30 и соответственно вместо цифры 1 прописываем айди в зависимости от того какое поле подключили. Список формируется при каждом новом добавлении материала вы в доп поле добавляете свое значение, список не формируется так как в стандартних 2-х фильтрах когда они заранее созданы и отмечаются галочками при добавлении материала, каждому новому материалу добавляете и в итоге формируется список с значений фильтра и потом он выводится общим оператором как описал уже выше. Больше деталей в посте в блоге https://blog.ucoz.ru/updates/may_up

Спасибо. Понял. При добавлении материала выбор производится по типу "автозаполнения", а не выбор. А написано как у обычных системных фильтов. Системные фильтры же выбираешь из указанных заранее в настройках фильтра.

У полей, для которых активирована опция "Фильтр", при добавлении материала можно либо выбрать значение фильтра из выпадающего списка (как при использовании обычных системных фильтров), либо вписать новое значение прямо внутри дополнительного поля.

DirtyDog,

Выпадающий список делается скриптом, например для доп поля1

 <?if($OTHER1_FL$)?>
 <li><label for="other1">$OTHER1_SIGN$:</label> 
 <script type="text/javascript"> var descr = new Array(); descr[0] = 'название1'; descr[1] = 'название2'; descr[2] = 'название3'; descr[3] = 'название4'; function catalog_rebuild(x) { $("#input_extrafl1").val(descr[x]); } </script>
<li><select class="select" name="myselect" onchange="catalog_rebuild(this.value)"> 
<option>-Выбрать-</option>
<option value="0">название1</option> 
<option value="1">название2</option> 
<option value="2">название3</option> 
<option value="3">название4</option> 
</select> 
<span style="display:none;">$OTHER1_FL$<?endif?>

Sentimo,
Спасибо большое, то что нужно!
Sentimo,

Установил код:

 <?if($OTHER1_FL$)?>
 <li><label for="other1">$OTHER1_SIGN$:</label> 
 <script type="text/javascript"> var descr = new Array(); descr[0] = 'Фильмы'; descr[1] = 'Сериалы'; descr[2] = 'Мультфильмы'; function catalog_rebuild(x) { $("#input_extrafl1").val(descr[x]); } </script>
<li><select class="select" name="myselect" onchange="catalog_rebuild(this.value)"> 
<option>-Выбрать-</option>
<option value="0">Фильмы</option> 
<option value="1">Сериалы</option> 
<option value="2">Мультфильмы</option> 
</select> 
<span style="display:none;">$OTHER1_FL$<?endif?>

 <?if($OTHER2_FL$)?>
 <li><label for="other2">$OTHER2_SIGN$:</label> 
 <script type="text/javascript"> var descr = new Array(); descr[0] = 'KinoGadget'; descr[1] = 'GeneralFilm'; descr[2] = 'Kaztorrents'; function catalog_rebuild(x) { $("#input_extrafl2").val(descr[x]); } </script>
<li><select class="select" name="myselect" onchange="catalog_rebuild(this.value)"> 
<option>-Выбрать-</option>
<option value="0">KinoGadget</option> 
<option value="1">GeneralFilm</option> 
<option value="2">Kaztorrents</option> 
</select> 
<span style="display:none;">$OTHER2_FL$<?endif?>

Вроде бы работают допполя как фильтры. Но вот потом захожу на страницу редактирования материала и приходится опять вводить допполя. Почему то скрипт не запоминает их!

DirtyDog,

Виртуально оно запоминается, смущает что в поле написано -Выбрать- ?

option меняем на это

<option value="0" <?if($OTHER1_VAL$ = 'название1')?>selected<?endif?>>название1</option> 
<option value="1" <?if($OTHER1_VAL$ = 'название2')?>selected<?endif?>>название2</option> 
<option value="2" <?if($OTHER1_VAL$ = 'название3')?>selected<?endif?>>название3</option> 
<option value="3" <?if($OTHER1_VAL$ = 'название4')?>selected<?endif?>>название4</option> 

принцип понятен? 

И функцию onchange="catalog_rebuild(this.value)"  надо переименовать, иначе значения одного фильтра будут записываться в другой.

Да, спасибо большое!

почему то пишет что не заполнено поля?! Хотя поля заполнены

 

Код

 <?if($OTHER1_FL$)?>
 <li><label for="other1">$OTHER1_SIGN$:</label>
 <script type="text/javascript"> var descr = new Array(); descr[0] = 'KinoGadget'; descr[1] = 'GeneralFilm'; descr[2] = 'Kaztorrents'; function catalog_rebuild(x) { $("#input_extrafl1").val(descr[x]); } </script>
<li><select class="select" name="myselect" onchange="catalog_rebuild(this.value)">
<option>-Выбрать-</option>
<option value="0" <?if($OTHER1_VAL$ = 'KinoGadget')?>selected<?endif?>>KinoGadget</option>
<option value="1" <?if($OTHER1_VAL$ = 'GeneralFilm')?>selected<?endif?>>GeneralFilm</option>
<option value="2" <?if($OTHER1_VAL$ = 'Kaztorrents')?>selected<?endif?>>Kaztorrents</option>
</select>
<span style="display:none;">$OTHER1_FL$<?endif?>

 <?if($OTHER2_FL$)?>
 <li><label for="other1">$OTHER2_SIGN$:</label>
 <script type="text/javascript"> var descr = new Array(); descr[0] = '1280x'; descr[1] = '640x'; function catalog_rebuild(x) { $("#input_extrafl2").val(descr[x]); } </script>
<li><select class="select" name="myselect" onchange="catalog_rebuild(this.value)">
<option>-Выбрать-</option>
<option value="0" <?if($OTHER2_VAL$ = '1280x')?>selected<?endif?>>1280x</option>
<option value="1" <?if($OTHER2_VAL$ = '640x')?>selected<?endif?>>640x</option>
</select>
<span style="display:none;">$OTHER2_FL$<?endif?>

 <?if($OTHER3_FL$)?>
 <li><label for="other1">$OTHER3_SIGN$:</label>
 <script type="text/javascript"> var descr = new Array(); descr[0] = 'BDRip'; descr[1] = 'HDRip'; descr[2] = 'HDDVDRip'; descr[3] = 'WEB-DLRip'; descr[4] = 'HDTVRip'; descr[5] = 'DVDRip'; descr[6] = 'SATRip'; descr[7] = 'TVRip'; descr[8] = 'VHSRip'; function catalog_rebuild(x) { $("#input_extrafl3").val(descr[x]); } </script>
<li><select class="select" name="myselect" onchange="catalog_rebuild(this.value)">
<option>-Выбрать-</option>
<option value="0" <?if($OTHER3_VAL$ = 'BDRip')?>selected<?endif?>>BDRip</option>
<option value="1" <?if($OTHER3_VAL$ = 'HDRip')?>selected<?endif?>>HDRip</option>
<option value="2" <?if($OTHER3_VAL$ = 'HDDVDRip')?>selected<?endif?>>HDDVDRip</option>
<option value="3" <?if($OTHER3_VAL$ = 'WEB-DLRip')?>selected<?endif?>>WEB-DLRip</option>
<option value="4" <?if($OTHER3_VAL$ = 'HDTVRip')?>selected<?endif?>>HDTVRip</option>
<option value="5" <?if($OTHER3_VAL$ = 'DVDRip')?>selected<?endif?>>DVDRip</option>
<option value="6" <?if($OTHER3_VAL$ = 'SATRip')?>selected<?endif?>>SATRip</option>
<option value="7" <?if($OTHER3_VAL$ = 'TVRip')?>selected<?endif?>>TVRip</option>
<option value="8" <?if($OTHER3_VAL$ = 'VHSRip')?>selected<?endif?>>VHSRip</option>
</select>
<span style="display:none;">$OTHER3_FL$<?endif?>

DirtyDog,
Вот это onchange="catalog_rebuild(this.value)" надо переименовать, например catalog_rebuild1(this.value) для второго фильтра написать catalog_rebuild2(this.value) и т.д, соответсвенно переименовать  function catalog_rebuild1(x) и т.д
...