用于javascript的自定义节点上的drupal 7文件字段格式化程序(用于设置jQuizMe)

时间:2012-06-15 15:07:22

标签: drupal-7

我已经设置了一个具有自定义节点类型的模块(我称之为jquizme,在我真正喜欢使用的javascript 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中工作,这样代码仍然存在。

我已经尝试了很多答案(过去六个小时左右......在这里说得太多了),其中最新的是使用令牌,但这不起作用。以下是我到目前为止的情况:

  

function jquizme_node_view($ node,$ view_mode,$ langcode){      switch($ node-> type){          案例'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('scope'=>'header'));              打破;      }   }

提前致谢!

1 个答案:

答案 0 :(得分: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'));
    }
  }
}