2010-03-19 5 views
2

커스텀 임포트 및 익스포트를 생성하고, 외부 스크립트 (부트 스트랩을 통해)로서, 나중에 좀 더 일반적인 방식으로 모듈을 생성 할 계획입니다.drupal bootstrap 스크립트 : x 유형의 모든 노드 목록을 얻는 방법?

저는 프론트 엔드를 nagios와 호스트 관리 및 nagios 구성 btw 용으로 구축하고 있습니다. 어쩌면 다른 환경 (네트워크 관리)에 유용 할 수도 있습니다

이제 x 유형의 모든 노드 목록을 가져 오는 방법을 알아야합니까?

직접 SQL을 피하고 싶습니다.

내가 가진 제안은 RSS를하고 그것을 을 구문 분석했다지만

그래서 한 가지에 대한 웹 요청을 수행하는 이상한 느낌 그래서, 다양한 노드를 추출하는 드루팔 DB 수십 번 ACESS 내가 초보자 드루팔 dev에이 작업에 대한 기본 검색 모듈 API에 단지 포인터로 찾고 있어요

TIA 플로리안

+0

마침내이 문제를 해결했습니다. 도움을 청합니다! :) – groovehunter

답변

5

왜 당신은 SQL을 사용하지 않도록 하시겠습니까? 당신은 데이터가 이미 추출하지 않는 한

는 타입 X의 모든 노드처럼, 당신의 DB에 무엇에 대한 정보를 얻고 싶다면

은 그것을 얻을 수있는 유일한 방법은 SQL 쿼리를 통해입니다.

db_query("SELECT title, nid FROM {node} WHERE type = 'x';"); 

같은 쿼리 성능 유적 것은 안된다.

편집 :이주의 깊게 읽어 수 있어야 있도록 제공
링크는이, 드루팔 7에서입니다. 그 이유는 Drupal 7에서는 PHP 함수의 래퍼 인 db_query을 사용할 수있을뿐만 아니라 mysql_query, pg_query입니다. 그것은 약간 다르며 그것을 사용하면 db_specific 코드를 사용하지 않아도됩니다. 어쨌든 Drupal 7의 새로운 기능은 ORM과 조금 비슷합니다. 나는 그것에 대해 자세히 읽지는 않았지만, 아이디어는 당신이 객체에 대한 명령을 사용하여 질의를 만들 수 있다는 것이다. 이것은 아마도 당신이 겪은 일입니다. 그러나 Drupal 7은 프로덕션 사이트에서 전혀 준비되지 않았습니다. 여전히 중요한 문제와 보안 문제가 많이 있습니다. 그래서 이것은 꽤 오랜 기간 동안 가능성이 없을 것입니다.

편집 2 : 당신이 배열을 추출 할 경우

$type = 'x'; 
$query = db_query("SELECT r.nid, r.title, r.body FROM {node} AS n 
        LEFT JOIN {node_revisions} AS r ON r.nid = n.nid 
        WHERE type = '%s';", array($type)); 
$nodes = array(); 
while ($node = db_fetch_object($query)) { 
    $nodes[$node->nid] = $node; 
} 

당신은 db_fetch_object` 대신 db_fetch_array 사용할 수 있습니다
당신이 노드의 제목과 본문을 얻고 싶은 경우에, 이것은 당신이해야 할 일이다 db의 오브젝트 대신에.

+0

좋습니다. 권장 사항이고 API 호출이 없다면 그걸로갑니다. 그것은 단지 약 1 년 동안 ORMs 많은 일을했기 때문에 ... 그래서 내가 한거야 db_fetch_array ($ 쿼리) resp .. 참조 하나의 배열이나 개체를 반환합니다. – groovehunter

+0

나는이 문서들과 잘 어울린다. 이것을 말할 필요가 없습니다. http://drupal.org/node/310072 – groovehunter

+0

이 문서는 혼란 스럽습니다/잘못되었습니다 ... 이제 마침내 올바른 방향으로 이동합니다 – groovehunter

1

Views 당신이 드루팔에서 그들을 작성하지 않고 데이터베이스 쿼리를 만드는 방법 일반적이지만,이 쿼리가 나는 그것이 학습 뷰의 오버 헤드 가치가 확실하지 않다 그래서 간단하다, 거의 후 5 선이 부트 스트랩 한 드루팔 :

$nodes = array(); 
$results = db_query("SELECT nid FROM {node} WHERE type = '%s'", $type); 
while ($result = db_fetch_object($result)) { 
    $nodes[] = node_load($result->nid); 
} 
+0

큰 노드 집합에서 node_load를 수행하는 것은 매우 나쁜 생각입니다. 큰 후크와 쿼리 집합. – googletorp

+1

나는 본다. 내 경우에는 약 20 개가 있고 몸과 일부 fields 필드가 필요합니다. 그래서 atm 나는 코드를 유지하고 node_load를 호출합니다. 스캇도. 적어도 "db_fetch_object"에 대한 힌트는 작동했습니다. 다른 모든 메소드는 빈 세트를 반환했습니다. 어떻게 든 바나나가 너무 많았습니다. x; D – groovehunter

0

SQL을 사용해야합니다.

http://api.drupal.org/api/function/node_get_types/6

노드 카운트 =

$node_types = node_get_types(); 

$type_count = array(); 

foreach ($node_types as $type) { 
    $result = db_fetch_object(db_query('SELECT count(nid) AS node_count FROM {node} WHERE type = "%s"'), $type); 
    $type_count[$type] = $result['count(nid)']; 
} 

print_r($type_count); 

노드와 그 유형 : 그런

$node_types = node_get_types(); 

$nodes = array(); 

foreach ($node_types as $type) { 
    $result = db_query('SELECT nid, title FROM {node} WHERE type = "%s"'), $type); 

    while ($node = db_fetch_object($result)) { 
     $nodes[] = array('Type' => $type, 'Title' => $node->title); 
    } 
} 

print_r($nodes); 

뭔가. 나는 그것을 시험하지 않았으므로 점심을 먹고있다. 그러나 나는 이것을하기 전에해야한다. Drupal 6.

0

migrate module이 관심있어합니다. 또한 drush을 지원하므로 작업을 상당히 쉽게 스크립트 할 수 있습니다.

2

이것은 꽤 오래된 질문이지만이 페이지를 처음 접하는 모든 사람에게 Drupal 7.x 모범 사례는 동적 쿼리를 사용하는 것입니다. 당신은 타입 X의 모든 노드를 선택하기를 원한다면

그래서, 당신은 할 수있는 다음

$articles = db_select('node') 
->fields('node', array('nid', 'title')) 
->condition('type', 'x', '=') 
->execute() 
->fetchAllKeyed(); 

$ 기사 변수는 다음과 꾸벅 꾸벅에 의해 키가 모든 X 형 노드의 배열해야한다 해당 값을 노드 제목으로 배열합니다. 희망이 도움이 될 수 있습니다.

관련 문제