ウィジェットタイプ「選択リスト」において、使用する値のリストを動的に生成できるようなモジュールはありますでしょうか?
なければPHPコードを書くことになるのかなと思っています。

具体的に実現したいこととして、CCKして定義したコンテンツタイプのノードの、とあるフィールドの値を選択リストとしたいと思います。

例として、test_typeというコンテンツタイプがあり、フィールドfield1が定義されているとします。
test_typeのノードが以下のように存在したとき、
- ノード名「てすと1」、field1は「hoge」
- ノード名「てすと2」、field1は「bar」
- ノード名「てすと3」、field1は「foo」

選択リストの「使用する値のリスト」が
hoge
bar
foo
となるイメージです。ノードが増えるに従って動的に増えます。

実現可能なモジュール、もしくはPHPコードで実現する際のAPIここみたらいいよ等ヒントをいただければ幸いに思います。
よろしくお願いします。

当初の問題については完全に解決しておりませんが、やりたいことに変更があったため解決とさせていただきます。

評価
(0票)

コメント

こんなPHPコードを書いてみては?

フィールドの「使用する値のリスト」項目のPHPコードに以下のようなPHPコードを書けば、良いと思われます。

$sql =
"SELECT node_data_field_フィールド名.field_フィールド名_value AS select_option
    FROM node node
              LEFT JOIN content_type_コンテンツタイプ名 node_data_field_フィールド名
      ON node.vid = node_data_field_フィールド名.vid
WHERE node.type in ('コンテンツタイプ名')";
$result = db_query($sql);
$items = array();
while ($node = db_fetch_array($result)) {
$items[] = $node[select_option];
}
return $items;

上記で日本語で表記してある フィールド名 には全て同じ値が入ります。コンテンツタイプも同様です。

質問者さんの例で言うと、以下のようなPHPコードになります。

$sql =
"SELECT node_data_field_field1.field_field1_value AS select_option
    FROM node node
              LEFT JOIN content_type_test_type node_data_field_field1
      ON node.vid = node_data_field_field1.vid
WHERE node.type in ('test_type')";
$result = db_query($sql);
$items = array();
while ($node = db_fetch_array($result)) {
$items[] = $node[select_option];
}
return $items;

大体、こんな感じで動作します。
--------------------------
oumiya_s
http://geeeek.crz.jp/

途中経過報告

ありがとうございました、PHPコードの方をオススメ頂いたので、結局そちらから手をつけています。

情報が不足していたかもしれません、バージョンは6.14を利用しています。

アドバイスいただきましたコードを利用し、以下のようなエラーが出ました。

user warning: Unknown column 'node_data_field_field1.field_field1_value' in 'field list' query: SELECT fnode_data_field_field1.field_field1_value AS select_option FROM node node LEFT JOIN content_type_test_type node_data_field_field1 ON node.vid = node_data_field_field1.vid WHERE node.type in ('test_type') in /var/www/drupal/sites/all/modules/cck/content.module(1694) : eval()'d code on line 2.

'field list'というのが何を指すかわかっておらず、これから調べようと思っています。

データベースを覗いて、以下のSQL文でもいけるのではないかと思ったのですが、いかがでしょうか?
(以下のSQL文でも上記と同じ意味のエラーが出ていますが。。。)
また、node_data_field_field1 というテーブルが存在しなかったのも、気になっているところです。

SELECT field_field1_value AS select_option FROM content_type_test_type

解決(微妙に

ありがとうございました。やりたいことが若干変わり、ノードタイトルの一覧を利用することにしたため、より簡単なSQL文で解決しました。
リファレンス等を参考にしながら、イジり、ちょこっとDrupalの理解が深まり、よい機会となりました。

CCKに含まれるNodeReferenceモジュールを使用する

あなたの想定した動作と同じかどうか分かりませんが、以下をお試しください。
※表記のURLのexample.comの部分をご自身のドメインに変更してください。

1.ビューを新規作成します。これは選択肢用のごくシンプルなビューです。
・http://example.com/admin/build/views を開く(管理ページ > サイトの構築 > ビュー)
・追加リンクをクリックして、ノードタイプのビューを新規作成
・ビューのフィールドに「コンテンツ:field1(test_type)」を追加
・ビューのフィルタに「ノード:タイプ = test_type」を追加
・ビューを保存しておく
2.次にモジュールを有効にします。
・http://example.com/admin/build/modules/list を開く
(管理ページ > サイトの構築 > モジュール)
・CCKモジュールの中のNodeReferenceモジュールを有効にします。
(CCKに最初から含まれているモジュールです)
・設定を保存します。
3.コンテンツタイプを設定します。
・http://exapmle.com/admin/content/types を開く
(管理ページ > コンテンツの管理 > コンテンツタイプ)
・任意のコンテンツタイプの編集画面を開いてください。
・フィールドの管理リンクをクリックして、フィールドの管理画面を開いてください。
・次の設定で新しくフィールドを追加してください。
ラベル:(任意の名前)
Field name (a-z, 0-9, _):(任意の名前)
Field Type:ノード参照
Widget:選択リスト
・追加したフィールドの設定画面が開きます。
・設定するのは「全般の設定 > 高度な設定 - 参照するノード(ビュー)」のところだけです。
・View used to select the nodes:の項目で、1で新規作成したビューを指定してください。
・フィールド設定の保存ボタンをクリックして、設定を保存してください。
4.3のコンテンツタイプで、新規にコンテンツを作成してみてください。

恐らく、作成ページでの動作はあなたの想定通りと思われます。
しかし、表示の方はどうでしょうか? そこは想定どおりでは無い気がします。

この方法で満足できない場合は、やはりPHPコードを書くことになると私は思います。
もしくはそういうことが出来そうなモジュールを探すか……。

PHPコードについては別のコメントを参照してください。
--------------------------
oumiya_s
http://geeeek.crz.jp/

コメントありがとうございます。

ご丁寧な解説ありがとうございました!
まずはこちらの方法を試してみようと思います。

まだdrupalを触り始めて日が浅く、試すのにも時間がかかりそうだと思いましたので、
取り急ぎお礼まで。

試した結果は改めて報告させていただきたく思います。
ありがとうございました。

自分でコメントつけといてなんですが

自分でコメントつけといてなんですが、PHPコードの方が楽でおすすめだと思います。
--------------------------
oumiya_s
http://geeeek.crz.jp/