Вывод раскрытых фильтров views [РЕШЕНО]

Главные вкладки

Аватар пользователя msidiagnos01 msidiagnos01 16 августа 2010 в 12:15

Добрый день.
Что мы имеем: Вьюшку с несколькими раскрытыми для юзеров фильтрами.
Необходимо: Стандартный вывод фильтров немного неудобен и некрасив, когда фильтров много. есть шаблон вывода фильтров

<?php
// $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 работал только для определенной вьюшки, а не для всех.
Спасибо.

Комментарии

Аватар пользователя msidiagnos01 msidiagnos01 16 августа 2010 в 14:11

Первый вопрос отпадает.
Это выведет список значений ключа id из массива $widgets

<?php foreach($widgets as $id => $widget): ?>
<?php print $widget->id; ?>

А этим делаем условие на нужный фильтр и выводим его label,operator (если есть),widget(если есть) в нужное место, например какую-то ячейку таблицы и т.д.

<?php foreach($widgets as $id => $widget): ?>
       
        <?php if ($widget->id=="один из полученных id'шников")
                {print $widget->label;
                print $widget->widget;
                print $widget->operator;}?>        
 
    <?php endforeach; ?>

Второй вопрос актуален
"И как сделать так, чтобы вновь сделанный файл views-exposed-form.tpl.php работал только для определенной вьюшки, а не для всех."

Аватар пользователя igorek igorek 16 августа 2010 в 14:24

"msidiagnos01" wrote:
как сделать так, чтобы вновь сделанный файл 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

Аватар пользователя XDmitry XDmitry 16 августа 2010 в 14:58

Как я понимаю, первый код вставляется в шаблон views-exposed-form.tpl.php? Выдает ошибку: Parse error: syntax error, unexpected $end in Z:\home\ и т.д....
Можно поподробнее, о том как и куда вставить код. Спасибо.

Аватар пользователя msidiagnos01 msidiagnos01 16 августа 2010 в 15:20

XDmitry wrote:
Как я понимаю, первый код вставляется в шаблон views-exposed-form.tpl.php? Выдает ошибку: Parse error: syntax error, unexpected $end in Z:\home\ и т.д....
Можно поподробнее, о том как и куда вставить код. Спасибо.

Прошу прощения, забыл закрыть цикл

<?php foreach($widgets as $id => $widget): ?>
<?php print $widget->id; ?>
<?php endforeach; ?>

Код вставляй либо в дефолтный шаблон views-exposed-form.tpl.php, либо по посту выше сделай для нужной вьюшки отдельный файл. Первый код вообще строго информационный и просто выведет тебе id твоих фильтров. Вставил один раз, хоть в конец файла, получил вывод, переписал, удалил. Дальше уже по второму коду вставляешь нужные фильтры в нужные места по id.

Аватар пользователя msidiagnos01 msidiagnos01 16 августа 2010 в 16:55

Попутно созрел третий вопрос, если я открываю для юзера операторы, как убрать не нужные для него, типа "Пустое поле (NULL)", "Is not empty (NOT NULL)" и т.д., чтобы он видел только те операторы, которые я разрешу?