Добрый день.
Что мы имеем: Вьюшку с несколькими раскрытыми для юзеров фильтрами.
Необходимо: Стандартный вывод фильтров немного неудобен и некрасив, когда фильтров много. есть шаблон вывода фильтров
// $Id: views-exposed-form.tpl.php,v 1.4.4.1 2009/11/18 20:37:58 merlinofchaos Exp $
/**
* file views-exposed-form.tpl.php
*
* This template handles the layout of the views exposed filter form.
*
* Variables available:
* - $widgets: An array of exposed form widgets. Each widget contains:
* - $widget->label: The visible label to print. May be optional.
* - $widget->operator: The operator for the widget. May be optional.
* - $widget->widget: The widget itself.
* - $button: The submit button for the form.
*
* ingroup views_templates
*/
?>
<?php if (!empty($q)): ?>
<?php
// This ensures that, if clean URLs are off, the 'q' is added first so that
// it shows up first in the URL.
print $q;
?>
<?php endif; ?>
<div class="views-exposed-form">
<div class="views-exposed-widgets clear-block">
<?php foreach($widgets as $id => $widget): ?>
<div class="views-exposed-widget">
<?php if (!empty($widget->label)): ?>
<label for="<?php print $widget->id; ?>">
<?php print $widget->label; ?>
</label>
<?php endif; ?>
<?php if (!empty($widget->operator)): ?>
<div class="views-operator">
<?php print $widget->operator; ?>
</div>
<?php endif; ?>
<div class="views-widget">
<?php print $widget->widget; ?>
</div>
</div>
<?php endforeach; ?>
<div class="views-exposed-widget">
<?php print $button ?>
</div>
</div>
</div>
Здесь по всей видимости отрабатывается цикл, Провереются все значения $widgets, потом ключ передается в переменную $widget. Дальше в соответствии со значением. Хотя могу и ошибаться, Бог его знает. В php не силен, но где мне найти id'шники моих фильтров или то, что их отличает друг от друга, чтобы переделать шаблон и выводить каждый мой фильтр в нужном мне месте (например завернув все фильтры в table в нужные ячейки, покрасивее)
И как сделать так, чтобы вновь сделанный файл views-exposed-form.tpl.php работал только для определенной вьюшки, а не для всех.
Спасибо.
Комментарии
Первый вопрос отпадает.
Это выведет список значений ключа id из массива $widgets
<?php print $widget->id; ?>
А этим делаем условие на нужный фильтр и выводим его label,operator (если есть),widget(если есть) в нужное место, например какую-то ячейку таблицы и т.д.
<?php if ($widget->id=="один из полученных id'шников")
{print $widget->label;
print $widget->widget;
print $widget->operator;}?>
<?php endforeach; ?>
Второй вопрос актуален
"И как сделать так, чтобы вновь сделанный файл views-exposed-form.tpl.php работал только для определенной вьюшки, а не для всех."
У страницы или блока есть ссылочка: Theme: Информация - нажимаешь её и выбираешь название своего нового файла - нажимаешь Rescan - теперь он читает твой файл для нужной страницы, например: вместо views-view-field.tpl.php - views-view-field--page-1.tpl.php
после пересканирования будет именно ваш файл выделен жирным. Файл кладем в свою тему, конечно же, Даже можно например сюда: sites/all/themes/ваша_тема/views/название_представления/ваш_файл.tpl.php
Как я понимаю, первый код вставляется в шаблон views-exposed-form.tpl.php? Выдает ошибку: Parse error: syntax error, unexpected $end in Z:\home\ и т.д....
Можно поподробнее, о том как и куда вставить код. Спасибо.
Прошу прощения, забыл закрыть цикл
<?php print $widget->id; ?>
<?php endforeach; ?>
Код вставляй либо в дефолтный шаблон views-exposed-form.tpl.php, либо по посту выше сделай для нужной вьюшки отдельный файл. Первый код вообще строго информационный и просто выведет тебе id твоих фильтров. Вставил один раз, хоть в конец файла, получил вывод, переписал, удалил. Дальше уже по второму коду вставляешь нужные фильтры в нужные места по id.
ОГРОМНОЕ спасибо за пост. Я неделю решал темизацию exposed filter. И наконец нашел нужный ориентир.
Не за что, хорошо, что помогло не только мне=)
2igorek. Спасибо за разъяснение со своим файлом шаблона.
Попутно созрел третий вопрос, если я открываю для юзера операторы, как убрать не нужные для него, типа "Пустое поле (NULL)", "Is not empty (NOT NULL)" и т.д., чтобы он видел только те операторы, которые я разрешу?
а понятных инструкций нет???
Спасибо огромное, очень помогло