0

カスタム ノード タイプのモジュールをセットアップしました (私が本当に気に入っている javascript jQuizMe の後に jquizme を呼び出しました)。動作させるために提供する必要がある JavaScript ファイル用に 2 つのフィールドを設定します (一般的な jQuizMe-2.2.js ファイルの後に、別の 2 つの JavaScript ファイル (設定用とクイズ コンテンツ用) を追加する必要があります)。

Drupal はファイルを myjavascriptfile.js.txt として保存します - 私はそれらをテストしましたが、それでも jQuizMe インターフェイスを作成するために動作します - OK. 問題は、ノードページにこれらのファイルを追加したいということです...ファイルはノードごとに異なります。drupal_add_js() 関数のファイルにアクセスして、問題のノードのファイルをロードするにはどうすればよいですか?

カスタム フィールド フォーマッタを設定しようとしましたが、特定のノードのファイルの uri に自動的にアクセスして drupal_add_js() 関数に入れる方法がわかりません (静的ファイルを追加でき、正常に読み込まれます...これは hook_node_view ( jquizme_node_view ) で行いました。

ファイルの情報にアクセスする方法が必要なだけです...ファイルは各ノードにどのようにリンクされていますか? 接続が見つかりません。お気づきかもしれませんが、私はモジュールを書いている初心者であり、オブジェクト指向プログラミングに関連することはおそらくあまり理解できません。申し訳ありませんが、まだそのレベルには進んでいません)。重要な情報を忘れていたと思いますが、これはすでに長くなりすぎています。

また、jQuizMe を Drupal で動作させることができるかどうかを確認するために、特別なページを以前にセットアップしました。これはまだコード内にあります。

私は多くの答えを試しました (過去 6 時間かそこら... ここで言うには多すぎます)。最新のものはトークンを使用していますが、うまくいきません。これが私がこれまでに持っているものです:

function jquizme_node_view($node, $view_mode, $langcode) { switch ($node->type) { case 'jquizme': $items = field_get_items('node', $node, 'field_myfield', $node->language); drupal_add_css(drupal_get_path('module', 'jquizme') . '/jQuizMe.css', >array('scope' => 'header')); drupal_add_js(drupal_get_path('module', 'jquizme') . '/alert.js'); drupal_add_js(drupal_get_path('module', 'jquizme') . '/jQuizMe-2.2.js', >array('scope' => 'header')); //drupal_add_js($tokens['node']['jquizme_js1_field'], array('scope' => >'header')); //drupal_add_js($tokens['node']['jquizme_js2'], array(' スコープ' => 'ヘッダー')); 壊す; } }

前もって感謝します!

4

1 に答える 1

0

これを試すことができますか?

// Let me assume that the field names of your two file fields
// are jquizme_js1_field and jquizme_js2_field for convenience..
function jquizme_node_view($node, $view_mode, $language) {
  $items = field_get_items('node', $node, 'jquizme_js1_field');
  _jquizme_add_js_from_filefield($items);

  $items = field_get_items('node', $node, 'jquizme_js2_field');
  _jquizme_add_js_from_filefield($items);

}

// Given the values of a filefield attached to some entity,
// adds them as JS files to the page.
function _jquizme_add_js_from_filefield($items = array()) {
  foreach ($items as $item) {
    $fid = &$item['fid'];
    $file = file_load($fid);
    if (!$file) {
      continue; // Maybe the file got deleted..
    }
    $wrapper = file_stream_wrapper_get_instance_by_uri($file->uri);
    $path = $wrapper->realpath();
    // Ensure that the path exists and that it is a Javascript file..
    if (file_exists($path) && preg_match('\.js$', $path)) {
      drupal_add_js($path, array('type' => 'file'));
    }
  }
}
于 2012-06-18T14:18:58.703 に答える