it-swarm-korea.com

Node Body의 다른 필드 처리기에서보기 처리기 지정)

독립 모듈에서 생성 된 뷰와의 상호 운용성에 영향을주지 않고 CCK 필드를 노드 본문으로 사용할 수 있기를 원합니다. hook_data_alter()을 사용하여 CCK가 내 필드 field_body에 대해 생성 한 핸들러를보기 위해 Views 노드 본문 핸들러의 대상을 다시 지정하려고했습니다. 안타깝게도 제안 된 솔루션을 사용하려고하면 몇 가지 오류가 발생합니다.

/**
 * Implementation of hook_views_data_alter().
 */
function fieldbody_views_data_alter(&$data) {
  // When node_revisions table is added, join in content_field_body too.
  $data['node_revisions']['table']['join']['content_field_body'] = array(
    'left_field' => 'vid',
    'field' => 'vid',
  );

  // Use field_body handler info for node body.
  $data['node_revisions']['body'] =
    $data['node_data_field_body']['field_body_value'];

  // Really emphasize that we are using a different table.
  // Since this isn't doing anything, it may be redundant.
  $data['node_revisions']['body']['table'] = 'content_field_body';

  // A couple tweaks so it's a friendly Node Body replacement in the UI.
  $data['node_revisions']['body']['group'] = t('Node');
  $data['node_revisions']['body']['help'] =
    t('Full body text of the node.');
}

이 코드는 작동하는 것처럼 보이지만 실제로 핸들러를 사용하려고하면 경고가 표시됩니다.

user warning: Unknown column 'node_revisions.field_body_value' in 'field list' query: SELECT DISTINCT node.nid AS nid, node_revisions.field_body_value AS node_revisions_field_body_value, node_revisions.field_body_format AS node_revisions_field_body_format, node.type AS node_type, node.vid AS node_vid FROM node node LEFT JOIN node_revisions node_revisions ON node.vid = node_revisions.vid LIMIT 0, 10 in ../workspace/oa/profiles/openatrium/modules/contrib/views/includes/view.inc on line 771.

이에 대한 내 해석은 필드가 사용될 때 코드가 content_field_body 테이블을 가져 오지 않고 대신 node_revisions.field_body_value를 사용하려고 시도한다는 것입니다.

이 문제를 해결하거나 내 목표에 대한 더 나은 전략을 제안하는 답변을 찾고 있습니다.

편집 : 추악한 대체 옵션

Hook_views_default_views_alter ()를 사용하여 정의 된 본문 필드에 대해 모든 뷰를 스캔하고 표준 CCK 필드로 교체합니다. 그러나 이것은 모든 종류의 것을 깨뜨릴 것이며 캐시 지우기의 성능은 아닙니다.

4
Grayside

사용중인 데이터베이스 필드는 node_revisions 테이블에서 uid 필드에 대한 뷰에서 수행 한 것과 동일한 방식으로 관계를 선언해야합니다.

// uid field
$data['node_revisions']['uid'] = array(
  'title' => t('User'),
  'help' => t('Relate a node revision to the user who created the revision.'),
  'relationship' => array(
    'handler' => 'views_handler_relationship',
    'base' => 'users',
    'base field' => 'uid',
    'label' => t('user'),
  ),
);
1
kiamlaluno