it-swarm-ko.tech

강제 Drupal 첨부 Drupal 새로운 아약스 컨텐츠에 대한 동작 [Drupal.attachBehaviors () 만 올바른 방식으로 작동하지 않음)]

Drupal.org 에서이 주제에 대해 많은 게시물을 작성했지만 불행히도 잘못된 컨텍스트에서 이루어졌습니다.

나는 그것이 문제가 아니라고 생각하므로 다른 접근법으로 시도해보십시오. 아마도 이것이 해결책 일 수 있습니다. 전체 PHP 페이지를로드하고 아약스가있는 특정 div를 추출하는 것이 올바르게 작동하지 않았습니다. 그래서 나는 drupal 요청한 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