web-dev-qa-db-ja.com

強制DrupalアタッチするDrupal新しいajaxされたコンテンツへの動作[Drupal.attachBehaviors()のみが正しく機能していない]

私はこのトピックについてdrupal.orgに多くの投稿をしていましたが、残念ながら間違ったコンテキストでした。

それは問題ではないと思うので、別の方法で試してみます。おそらくこれが解決策になるかもしれません。 PHPページ全体をロードしてajaxで特定のdivを抽出することは正しく動作しませんでした。そのため、drupalコンテンツとajaxを使用してdivに挿入します。リクエストされたURLで「ajax = 1」を検索するhook_preprocess_pageとhook_preprocess_nodeを使用してクエリを実行し、ページ全体なしでコンテンツのみを提供します。特定のtpl.phpファイル、理論的には、drupalの出力を$ contentのみに制限することができます。ここに問題があります。tpl.phpファイルを残しても、私のアプローチは機能していますオリジナルの方法ですが、node-ajax.tpl.phpから「$ content」を削除します。「正しく動作する」とは、drupalはページ全体を再ロードしないが、オフにすることを意味しますもちろん、コンテンツではありません。ただし、$ content変数で原因を説明できないため、生成されたコンテンツのhtmlのみであると考えました。したがって、私の質問は、drupalの出力をどのように制限することができるかです。コンテンツ、または私はやっていますかこれを機能させるための間違った手順。これが私が使用しているモジュールとjsファイルです:my_ajax.module:

<?php

function my_ajax_init()
{
    drupal_add_js(drupal_get_path('module', 'my_ajax') . '/my_ajax.js');
}

function my_ajax_preprocess_page(&$vars, $hook)
{

    if (isset($_GET['ajax']) && $_GET['ajax'] == 1)
    {
        $vars['template_file'] = 'page-ajax';
    }
}

function my_ajax_preprocess_node(&$vars, $hook)
{

    if (isset($_GET['ajax']) && $_GET['ajax'] == 1)
    {
        $vars['template_file'] = 'node-ajax';
    }
}

my_ajax.js:

Drupal.behaviors.my_ajax = function (context) {
    $('#content-group-inner .node a').live('click', function (e) {
        var url = $(this).attr('href');
        //$('#content-region-inner').slideUp('slow');
        $('#content-region-inner').empty().html('<img src="ajax-loader.gif" style="margin-left:50%;"/>');
        xhr = $.ajax({
            data: 'ajax=1',
            type: 'GET',
            url: url,
            success: function (data) {
                $('#content-region-inner').html(data);
                Drupal.attachBehaviors(context);
            }
        });
        return false;
    });
};

これで私を助けてください。すべての提案に感謝します。

10
dennis605

私はそれを持っている。これは正しく機能しています:

Drupal.behaviors.my_ajax = function (context) {
    $('#content-group-inner a').live('click', function (e) {

        $('#content-group-inner a').addClass('my_ajax-processed');
        var url = $(this).attr('href');
        $('#content-region-inner').empty().html('<img src="ajax-loader.gif" style="margin-left:50%;"/>');        
        $('#content-region-inner').load(url,'ajax=1',function() {
                        Drupal.attachBehaviors('#content-region-inner');
                        });
        return false;
        });
   };

ご協力ありがとうございます。

11
dennis605

あなたの問題は、あなたの成功関数がスコープ内に変数コンテキストを持たないため、アタッチ動作が未定義で機能することだと思います。

あなたができると思います

Drupal.attachBehaviors($('#content-region-inner'));
10
Jeremy French