0

JavaScriptスクリプトをDrupal7モジュールに実装しようとしていますが、何らかの理由で次のエラーが発生し続けます:「解析エラー:構文エラー、予期しないT_ECHO、予期しない')'」

私はこれを数時間試みてきましたが、途方に暮れています。どんな助けでも大歓迎です。

私のコードブロックは右端にインデントされています。他のコードは、参考のためにDrupal7のモジュールの一部です。

$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の専門家ではありませんが、学ぼうとしています:)。繰り返しになりますが、どんな助けでも本当にありがたいです。

PS-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タイプのイベントになると便利ですが、それは初めてオンロードされ、そこにとどまり、静的なままになります。

4

3 に答える 3

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,
    );
于 2013-01-25T02:57:48.510 に答える
0

HorusKol が言ったように、モジュール内で JavaScript 関数を直接呼び出すことはできません。モジュールはPHPで書かれており、他のプログラミング言語の関数を呼び出すことはできません。

JavaScript コードを挿入する場合は、関数drupal_add_js () を使用する必要があります。

したがって、次のように置き換えることができますecho

echo drupal_add_js('croll();troll();','inline');
于 2013-01-25T05:59:58.803 に答える
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}'); でロードします。

于 2013-01-28T23:51:28.623 に答える