ストアの在庫を Drupal サイトに掲載する予定で、CCK を使用してデータを Drupal に自動的に入力するスクリプト (おそらく python/php でしょうか?) を作成することは可能でしょうか? 前もって感謝します!
5 に答える
Henrik と Googletorp によって、すでに多くの優れた提案がなされています。
戦略を設計するために考慮すべきいくつかの追加要素:
- 本格的な e ストアを作成するつもりですか (おそらくubercartで実現されます)、それともサイトの訪問者に在庫を提示するためだけにノードのビューをセットアップするだけですか?
- どのくらいの製品を輸入しますか?
- どのくらいの頻度で再輸入しますか?
確かに除外したいと思うソリューション:
- POST: googletorp のコメントによると、非常に複雑になります。
- 外部スクリプト:核となるものであろうと ubercart のものであろうと、drupal API を使用することを避けることはできません (危険な生活をしたり、無駄にする時間がない限り)。データはいくつかのテーブルに散らばっており、ノードが挿入されたときにトリガーされるフックがたくさんあります。唯一の例外は、最初にブートストラップを実行する PHP スクリプトを実行する場合です (それがどのように機能するかについては、 index.phpまたはxmlrpc.phpの構造を参照してください)。エレガント、ポータブル、保守可能。
私がサポートするソリューション:
- 独自のモジュールを作成してください。googletorp が指摘したように、この回答で CCK フィールドを追加する方法に関するサンプル コードを提供しました。
- はい、それは... 私が信じている唯一のものです !;)
しかし、私が学んだことは、インポートに適したデータ ソースを選択することも同様に重要です。これが私の意見です:
- DB から直接読み取る:ものを一度だけインポートする必要があり、エクスポートするアプリケーションの DB スキーマが合理的なクエリを作成するのに十分単純である場合にのみ有効です。ソフトウェアは変更および進化し、DB スキーマがそれに続きます。2 か月以内に再インポートする必要があり、他のアプリケーションのスキーマが変更されている場合は、コードを変更したり、テストを変更したりする必要があります。
- XML ファイルを使用する:元のアプリケーションがこの形式でエクスポートできる場合、PHP のSimpleXMLおよびXpath + PHP 型キャストを使用すると、必要なデータを必要な形式で数分で簡単に取得できます。この方法の唯一の欠点は、ファイルに依存していることです。そのため、定期的な無人自動インポートが必要な場合、発生する可能性のあるすべての問題 (ファイルシステムに対する間違ったアクセス許可、破損したファイル、間違ったエンコーディングなど) を予測し、対策を講じるのは少し面倒です。 . 逆に、誰かがインポート プロセスを常に監視し、トラブルが発生した場合に介入できることがわかっている場合は、この方法が非常に気に入っています。
- Webservice:自動かつ定期的にインポートする必要がある場合、これが最も気に入っています。最大の利点は、2 つのアプリケーションが互いに「対話」し、ビジネス ロジックの一部を公開することです。これにより、実際に次のようなセッションを行うことができます。 " - "こちらです。3 つのカテゴリで 127 のはずですが、それをコピーしますか?" - 「そうそう... 127 個の項目と 3 つのカテゴリがはっきりとわかりました!」. これにより、多くのトラップ エラーと例外が簡素化されます。Drupal はそのままで Web サービスのコンシューマーおよびプロバイダーとして機能しますが、他のアプリケーションにも Web サービスを実装する必要があります。これは難しい場合もそうでない場合もあります。
チッ!
最速かつ最も簡単な方法は、サーバーに大量の投稿を送信したり、ノードのロードなどにリソースを費やしたりする代わりに、ケース用に作成した小さな Drupal モジュールを使用して処理を行うことです。
とにかく、これに必要なものは、ここでの mac の回答と非常によく似ています。
この場合、すべての特別な file_field を必要とするわけではありませんが、さまざまな cck フィールドの値と、ノードの本体とタイトルを挿入する必要があります。データベースから直接取得できる値を設定したら、ノードを保存できます。
db に直接接続する場合は、drupal で使用するものと同じタイプにするか、Drupal API の外部で行う必要があります。drupal API を使用する場合は、db_set_active()を見てください。
外部 (大量) インポートのさまざまなシナリオ専用の Drupal モジュールがいくつかあります。オプション/比較については、この概要を確認してください。
非常に具体的なニーズがある場合は、一般化を無視して実際の挿入を行う方法に関するガイダンスとして、既存のものとgoogletorps (+1) によって提供されるリンク/ヒントを使用して、独自のモジュールを作成できます。
CCKかそうでなければ、それは(おそらく)整形式のPOSTクエリなので、必ずそれを選択してください。
ソース データが MySQL にある場合は、Migrateモジュールを調べてコンテンツを作成します。以下は、そのプロジェクト ページからの抜粋です。
... コンテンツを他のソースから Drupal に移行するための柔軟なフレームワークを提供します (たとえば、Web サイトを別の CMS から Drupal に変換する場合)。ノード、ユーザー、ファイル、用語、コメントなどのコア Drupal オブジェクトを作成するためのすぐに使えるサポートが含まれており、他の種類のコンテンツを移行するために簡単に拡張できます。コンテンツは、バンドルされた Web インターフェイス (Migrate UI モジュール) または含まれている Drush コマンド (強く推奨) を使用してインポートおよびロールバックされます。