2011-01-06 2 views
0

Drupal에서 노드를 반환하도록 뷰를 구성했으며 평균 투표 수를 내림차순으로 정렬했습니다. 견해의 목적 상, 평균 득표의 가치는 관계입니다. 투표가없는 노드는 음의 평균을 가진 노드 다음에 표시됩니다. 투표가없는 노드는 평균 0을 가져야하지만 MySQL JOINNULL 값을 반환한다고 생각합니다. (조인 된 테이블에 일치하는 행이 없기 때문에 첫 번째 투표가 해당 항목에 대해 캐스팅 된 후 행이 만들어지기 때문에).Drupal Views : Render Null Result for Relationship 0

MySQL에서 NULL 인 모든 값을 IFNULL(column_name,'other value')과 함께 다른 값으로 출력 할 수 있다는 것을 발견했습니다.

이 기능을 얻으려면 Views 모듈을 수정해야한다고 생각하지만 관계에 관계가없는 NULL 값을 반환하는 옵션이 필요합니다. 항목)을 NULL 대신 0으로 설정하면 노드를 올바르게 정렬 할 수 있습니다.

내가 사용중인 모듈에는보기, 투표 API, 투표 업/다운 및 CTools가 포함됩니다.

감사합니다.

답변

1

Oooh, 뷰를 직접 수정하지 마십시오.

그냥 플러그인을 작성하십시오. 그것은 모두 객체 지향적이므로, 해당 필드에 대한 기존 핸들러를 확장하는 필드 핸들러를 작성하면됩니다. hook_views_handlers은 그 시작점입니다.

기존 처리기를 복사하여 붙여 넣기하고 SQL을 수정 한 다음 필드에 새 이름을 지정하기 만하면됩니다. 다른 입력란과 마찬가지로 사용 가능한 입력란 목록에 표시됩니다.

- 편집 - "! AHAH"

조회수 문서는 당신이 전에 그것을 한 적이 없다면 처음에는 혼란 조금 될 수 있지만, 그 일단은 슈퍼 간단합니다 순간.

시작하기 좋은 곳은보기를 확장하고 트릭을 복사하는 다른 모듈을 보는 것입니다. http://views2.logrus.com/doc/html/index.html에있는 문서는 개체가 매핑되는 방식을 이해하는 데 도움이됩니다.

개인적으로 ->query() 메서드 대신에 ->render() 메서드로 수정합니다. 그렇게하면 SQL 트릭을 사용하는 대신 간단한 if (is_null($value)) {$value = 0;}을 추가 할 수 있습니다.

+0

감사합니다. 필자는 Views 자체의 수정을 반드시 계획하지는 않았지만 투표 모듈을 변경하는 대신 제공하는 기능을 수정해야한다고 생각했습니다. 플러그인을 통해 기능을 확장하는 것은 당신이 말한 것처럼 작동 할 것 같습니다. – Kyle

+0

일부 링크와 권장 사항으로 제 응답을 편집했습니다 - 행운을 빈다. – anschauung