drupal 7 file field 格式化程序在 JavaScript 的自定义节点上(用于设置 jQuizMe)



我已经设置了一个具有自定义节点类型的模块(我以我非常喜欢使用的javascript jQuizMe命名为jquizme)。我为我需要提供的javascript文件设置了两个字段以使其工作(在通用jQuizMe-2.2.js文件之后,您需要添加另外两个javascript文件 - 一个用于设置,一个用于测验内容)。

Drupal将文件保存为myjavascriptfile.js.txt - 我测试了它们,它们仍然可以制作jQuizMe界面 - 好的。 问题是,我想在节点页面上添加这些文件...每个节点的文件将不同。如何访问 drupal_add_js() 函数的文件,以便它们加载相关节点的文件?

我尝试设置自定义字段格式化程序,但我不知道如何自动访问给定节点文件的 uri 以放入 drupal_add_js() 函数(我可以添加一个静态文件并且它加载得很好......我用hook_node_view(jquizme_node_view)做到了这一点。

所以我只需要一种方法来访问文件的信息......它们如何链接到每个节点?我找不到连接。正如您可能注意到的那样,我是一个编写模块的新手,我可能不会了解与面向对象编程相关的太多内容,抱歉,还没有达到那个级别),但我愿意接受任何答案。我确定我遗漏了重要信息,但这已经太长了。

之前还设置了一个特殊的页面,看看我是否可以让jQuizMe在Drupal中工作,这样它仍然在代码中。

我尝试了很多答案(最近六个小时左右...这里要说太多了),其中最新的是使用代币,但这不起作用。这是我到目前为止所拥有的:

函数 jquizme_node_view($node, $view_mode, $langcode) { 开关($node->类型){ 案例 'jquizme': $items = field_get_items('node', $node, 'field_myfield', $node->language); drupal_add_css(drupal_get_path('模块', 'jquizme') .'/jQuizMe.css',>array('scope' => 'header')); drupal_add_js(drupal_get_path('模块', 'jquizme') ."/警报.js"); drupal_add_js(drupal_get_path('模块', '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('scope' => 'header')); 破; } }

提前感谢!

你能试试这个吗?

// 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'));
    }
  }
}

最新更新