2012-02-08 7 views
1

Drupalデータベースへの直接MySQL挿入クエリを使用して、カスタムCMSからDrupalにイメージをインポートしようとしました。画像はdrupalのサイト内のパスにコピーされます。マニュアルのDrupalノードの挿入

sites/default/files/images/import 

ノードがリストに表示されますが、直接のリンク(someurl /ノード/ 1234)が404エラーの原因となります。それらはすべてmedia_imageタイプであり、有効なuidが割り当てられています。また、関連するインサートをfilescontent_type_media_image

にインポートしました。このインポートを完了するために内部のDrupalプロセスが必要ですか?適切なDrupalインポートモジュールとして書き直さなければ、すべて可能ですか?

サンプルノードインサート:

INSERT INTO node SET 
    type='media_image', 
    language='en', 
title='apicture.jpg', 
uid='4', 
status=1, 
created=1328644135, 
changed=1328644135; 

// grab nid as last mysql_insert() 
INSERT INTO files SET 
uid = 4, 
filename = 'apicture.jpg', 
filepath = 'sites/default/files/images/import', 
filemime = 'image/jpeg', 
filesize = 40069, 
status = 1, 
timestamp = 1328644136; 

INSERT INTO content_type_media_image SET 
vid = 683, 
nid = 683, 
field_image_fid = 539, 
field_image_list = 1, 
field_image_data = 'a:3:{s:11:"description";s:0:"";s:3:"alt";s:0:"";s:5:"title";s:0:"";}'; 

注:上記のクエリが生成されたクエリです。

答えて

2

node_load() function内部からの返信がNULL/FALSEなので、404を取得している場合はそれが原因です。

あなたはその関数をステップ実行した場合、一致するレコードが限りのDrupalの懸念ノードが存在しないようnode_revisions表にありませんので、もしあなたが... INNER JOINnode_revisionsテーブルにnodeテーブルから作られていることがわかります。 (バージョンIDで)最も顕著なnidvid、タイトルと本文 - あなただけの必要な列とnode_revisionsテーブルを移入する必要がありますエラーを修正する

format列の本体テキストのテキスト形式を設定することもできます(filter_formats表のキーに関連しています)。

ちなみに、このバージョンIDはINNER JOINが作成されているので、nodeテーブル自体にも追加する必要があります。私は、次の利用可能なIDを取得するための最も安全な方法があると思う:あなたは、それは可能性があります任意のコンテンツタイプに対してオンにリビジョンを持っていない場合

SELECT MAX(vid) + 1 FROM node 

vidは常にしかしnidと同じになります。

+0

vidが行のnidと等しくなるように更新しました。 node_revisionsに関する情報をありがとう、私はもう一度それを試してみましょう。 – sreimer

+0

これは本当に404の問題でした。もし私ができるなら、私はより多くのアップフォートを与えるだろう。今度は、画像をキャッシュに入れるという次の課題に挑戦してください。 – sreimer

1

私は、SQLの直接挿入は、あまりにも面倒です。 Drupalはコンテンツをインポートするための多くのソリューションを提案しています。私の好きなものはFeeds:http://drupal.org/project/feedsです。すべてを自動化し、ほぼすべての入力フォーマットを受け入れ、非常に柔軟なマッピングメカニズムを提供します。

直接データベースへ行くということは、Drupalが提供するすべてのパワーをバイパスすることを意味し、おそらくホイールを再発明するでしょう。

+0

+1既存のモジュールを使用するのが理にかなっています。または、少なくとも組み込みのAPIを使用するのは間違いありません。 – Clive

+0

もちろん、複雑な構造や入力ファイルを使用して再編成/インポートする場合は、あなたのインポートの新しいリファクタリングがフィードしないかぎり、モジュール(Update、Feeds、etc ...)には、あなたが動かさないような小さなバグがあります。私を信じて。 – snowflake

+0

構造は複雑ですが、インポートを慎重に計画し、データのロジックを深く理解する必要があります。これは、純粋な技術的なものと同じくらいのデータ分析です。その事実を考えると、なぜ私は直接挿入がその過程で何かを単純化するのか分からない。そして、あなたは私もこの1つを信じることができます。 – Countzero