我试图将一个JavaScript脚本实现到Drupal 7模块中,由于某些原因,我在这里继续收到此错误:"解析错误:语法错误,意外T_ECHO,期待')& #39;"
我现在已经尝试了几个小时,但我只是不知所措。任何帮助都会非常感激。
我的代码块缩进到最右边。其他代码是Drupal 7中模块的一部分供您参考。
$node->content['actions'] = array(
'#theme' => 'links',
'#prefix' => '<div id="match-actions">',
'#suffix' => '</div>',
'#links' => _match_actions($node),
echo '<script type="text/javascript">'
, 'croll();'
, 'troll();'
, '</script>';
'#attributes' => array(
'class' => array('links', 'match-actions'),
),
'#heading' => t('Match actions'),
'#weight' => -10,
);
我试图插入的JavaScript(正如您可以看到我在上面的回声中的尝试)是
function class_roll() {
// Car Classes
var classes = ["B", "A", "S", "R3", "R2", "R1"],
classToUse = classes[Math.floor(Math.random() * classes.length)];
document.getElementById("croll").innerHTML = classToUse ;
}
function track_roll() {
var tracks = ["Clear Springs Circuit", "Festival North Circuit", "Beaumont Circuit", "Finley Dam Circuit", "Gladstone Circuit", "Clifton Valley Trail", "Gladstone Trail", "Red Rock Descent", "Red Rock Hill Climb"],
trackToUse = tracks[Math.floor(Math.random() * tracks.length)];
document.getElementById("troll").innerHTML = trackToUse ;
}
我究竟做错了什么?我一直在寻找Stack和整个网络,这使我能够尝试不同的语法,但我无法让它工作。我不是JS和PHP的专家,但我正在努力学习:)。再次,任何帮助真的很感激。
P.S。 - 在HTML术语中,我尝试做的是:
<p id="croll">Some text here</p>
<p id="troll">Some text here</p>
<button onclick="class_roll(); track_roll();">Class Roll</button>
但是如果不是做一个onclick类型的PHP动作,它会是一个onload类型的事件,但它只会首次加载并坚持下去并保持静态,这样会很棒。
答案 0 :(得分:2)
您不能在数组中放置回声。
你应该能够做到:
$links = _match_actions($node);
$links[] = '<script type="text/javascript"> croll(); troll(); </script>'
$node->content['actions'] = array(
'#theme' => 'links',
'#prefix' => '<div id="match-actions">',
'#suffix' => '</div>',
'#links' => $links,
'#attributes' => array(
'class' => array('links', 'match-actions'),
),
'#heading' => t('Match actions'),
'#weight' => -10,
);
答案 1 :(得分:0)
正如HorusKol所说,你无法直接调用模块中的JavaScript函数。模块的原因是用PHP编写的,并且不能将其他编程语言的函数调用为一个。
如果您希望插入JavaScript代码,则应使用函数drupal_add_js()来执行此操作。
因此,您可以使用以下内容替换echo
:
echo drupal_add_js('croll();troll();','inline');
答案 2 :(得分:0)
更好的方法,不会破坏像Drupal AJAX这样的东西,就是使用Drupal行为。
(function ($) {
Drupal.behaviors.myModuleName = {
attach : function (context, settings) {
$(".match-actions", context).once('match-actions', function(){
croll();
troll();
})
}
}
})(jQuery);
将其放在js文件中并使用drupal_add_js加载(drupal_get_path('module','{my module name}')。'{js file name}');