Вы здесь

Вывести во вьюс те материалы, на которые есть другие ссылающиеся материалы

0

Добрый день!
Задача следующего характера:
Есть 2 типа материала, Дом и Проект. Дома привязываются к проектам через entity reference. Необходимо во views, сделать раскрытый фильтр, где можно было бы поставить чекбокс, "Построенные дома", т.e. вывести только те Проекты, на которые есть ссылающиеся материалы типа "Дом".
Можно ли это как-то решить "друпал-стайл" методом, либо придется писать свой handler(в чем я не силён) ?

Версия Drupal: 
7.x
Связанные проекты: 
Views
Вопрос задан 28.03.2016 - 16:45
Аватар пользователя Apuox
Apuox
15

Я добавил связь на ссылающиеся сущности (во вьюху в которой выводятся проекты), следом добавил фильтр, "поиск: ссылки на", он поидее должен искать как раз то, что надо, но там появляется поле "значение", и оператор либо "Равно", либо "Не равно", я не знаю что в нём писать, и всё таки мне кажется это не поможет, т.к. мне просто надо вывести Проекты, на которые ссылаются Дома, все подряд проекты а не с каким-то значением.
Прошу помощи у Вас, заранее спасибо за уделённое внимание.

Комментарий оставлен 28.03.2016 - 16:53

Ответы

0

В итоге никакой "друпал-стайл" метод не подошёл.
Сделал при помощи всемогущего php:
- Сначала добавил программно чекбокс к нужной форме в _form_alter

function модуль_form_views_exposed_form_alter(&$form, $form_state, $form_id) { 
    if ($form['#id'] == 'views-exposed-form-our-projects-page') {
        $form['count'] = array(
          '#type' => 'checkbox',
          '#title' => 'Построенные дома',
          '#default_value' => 0,
         );
    }
}

Потом добавил php Фильтр в фильтры нужной вьюхи:
Где ['count'] - form_key программно добавленного чекбокса

if(@$_GET['count'] == 1) {
            $query = db_select('field_data_field_project', 'fp')
                -> condition('fp.entity_type', 'node')
                -> condition('fp.bundle', 'album')
                -> condition('fp.field_project_target_id', $row->nid);
            $query -> addExpression('count(*)');
            $count = $query -> execute() -> fetchField();
            if($count) {
                return false;
            } else {
                return true;
            }
}
Ответ дан 31.03.2016 - 14:13
Аватар пользователя Apuox
Apuox
15
0

Попробуйте через групповые фильтры. В настройках раскрытого фильтра выберите "Групповые фильтры". Дальше выбираете оператор "не пусто" и создаете нужный фильтр.

Ответ дан 28.03.2016 - 23:55
Аватар пользователя Advin
Advin
27