【问题标题】:JavaScript into Drupal ModuleJavaScript 到 Drupal 模块
【发布时间】:2013-01-25 02:46:14
【问题描述】:

我正在尝试将 JavaScript 脚本实现到 Drupal 7 模块中,但由于某种原因,我在这里不断收到此错误:“Parse error: syntax error, unexpected T_ECHO, expecting ')'”

我已经尝试了几个小时,但我只是不知所措。任何帮助将不胜感激。

我的代码块缩进到最右边。其他代码是 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 方面的专家,但我正在努力学习:)。再次,非常感谢任何帮助。

附: - 用 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 类型的事件,那就太好了,但它只会在第一次加载并停留在那里并保持静态。

【问题讨论】:

    标签: php javascript drupal drupal-7


    【解决方案1】:

    您不能在数组中放置回显。

    你应该能够做到:

    $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,
        );
    

    【讨论】:

    • 新的 $links 语法允许我的网站再次使用我的 OP 中提到的解析错误。非常感谢!还有一种方法可以&lt;p id="croll"&gt;Some text here&lt;/p&gt; &lt;p id="troll"&gt;Some text here&lt;/p&gt; &lt;button onclick="class_roll(); track_roll();"&gt;Class Roll&lt;/button&gt; 但在我列出的 PHP 中?再次感谢您的帮助!
    【解决方案2】:

    正如 HorusKol 所说,您不能直接在模块内调用 JavaScript 函数。原因是模块是用 PHP 编写的,不能将其他编程语言的函数调用为一体。

    如果你想插入 JavaScript 代码,你应该使用函数drupal_add_js() 来做。

    因此,您可以将 echo 替换为以下内容:

    echo drupal_add_js('croll();troll();','inline');
    

    【讨论】:

    • 由于某种原因,这破坏了网站,并给了我在我的 OP 中提到的相同的解析错误:解析错误:语法错误,意外 T_ECHO,期待 ')' 我是否应该将其添加为 #正文(如果有这样的事情)或#heading,如果它更容易? drupal_add_js 有可能吗?非常感谢您迄今为止的帮助!
    【解决方案3】:

    不会破坏 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}'); 加载它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多