2010-01-03 9 views
0

CSV 파일에서 새 노드를 작성하는 Drupal 모듈을 작성하고 있습니다. 내가 현재하고있는 방식은 사용자가 노드 유형을 제공하고, 모듈이 데이터베이스로 이동하여 해당 노드의 필드를 찾습니다.Drupal : 노드 유형 정보를 다룰 때 데이터베이스를 피 하시겠습니까?

사용자가 노드 필드를 CSV 필드와 일치시킨 후 데이터 유효성을 검사하려고합니다. 이를 위해서는 노드 필드 유형을 찾아야합니다. 나는 그것을하는 방법을 완전히 모르겠다. (어쩌면 content_node_field 테이블을 보십시 오?)

그런 다음 노드를 만들어야합니다. 현재 모듈은 새 StdClass 객체를 만들고 필요한 데이터로 채우고 저장합니다.

그러나 데이터베이스에서 완전히 추상화하여 처리하지 못하면 어떻게 될까요? 이미 존재하는이 유형의 노드를 사용자에게 요청하면 어떻게됩니까? 나는 node_load()이 노드 일 수 있고 그것을 사용하여 노드 필드를 결정할 수 있습니다. 노드를 저장할 때가되면 "시드"노드를 사용하여 새 노드의 구조가 무엇인지 알아낼 수 있습니다.

하나의 단점 : 모듈이 작동하려면 하나 이상의 노드가 있어야합니다.

또한 db에 직접 액세스하는 것보다 속도가 느려 집니까?

시간이 지남에 따라 db 이름이 변경 될 수 있고 콘텐츠 유형을 여러 테이블에 걸쳐 정의 할 수 있습니다. 기존 노드에서만 작업함으로써 이러한 문제를 해결할 수있었습니다. 권리?

답변

0

확실히 node_load가 데이터베이스에 충돌합니까? 노드 필드는 데이터베이스에 저장되므로 필요할 때마다 데이터베이스와 대화해야합니다. 드루팔 (Drupal의 일부 페이지로드가 수백 또는 심지어 수천!)의 데이터베이스 쿼리를 호출 할 때 나는 실제로 한두 가지를 걱정하지 않을 것입니다!

테이블 이름은 변경되지 않을 것이고 스키마는 적어도 포인트 버전의 Drupal간에 고정되어 있어야합니다. 가능하다면 API를 사용하여 원하는 데이터를 얻는 것이 더 나은 방법이며, 이것이 변경에 대한 더 나은 보호를 제공합니다. 그게 가능한지 나는 모른다.

+0

네, 결국 데이터베이스에 충돌해야한다는 것을 알고 있습니다. SQL을 직접 작성해야하는지 아니면 이미 작성된 내용을 사용해야하는지에 대한 질문 일뿐입니다. –

관련 문제