it-swarm-eu.dev

Vynutit Drupal připojit Drupal chování k novému Ajaxovanému obsahu) [pouze Drupal.attachBehaviors () nefunguje správným způsobem]

O tomto tématu jsem dělal spoustu příspěvků na drupal.org, ale bohužel ve špatném kontextu.

Myslím, že to není problém, tak to zkusím jiným způsobem a možná by to mohlo být řešení. Načítání celé PHP stránky a extrahování určité div s ajaxem nefungovalo správným způsobem. Takže jsem si myslel, že bych mohl nechat drupal načíst jen obsah a vstříkněte jej s ajax do div. Udělal jsem dotaz s hook_preprocess_page a hook_preprocess_node, který hledá "ajax = 1" v požadované URL a pak pouze rozdá obsah bez celé stránky. A teď s pomocí určité soubory tpl.php, teoreticky bych mohl omezit výstup drupal pouze na obsah $. A tady je problém. Můj přístup funguje, i když nechávám soubory tpl.php původním způsobem, ale odstraněním „$ content“ z node-ajax.tpl.php. Když „pracujete správným způsobem“, myslím, že drupal nenahrává celou stránku, ale vypnuto) Samozřejmě ne obsah. Ale nemohu to vysvětlit sobě, protože v $ content proměnné, tak jsem si myslel, je pouze html generovaného obsahu.Tak moje otázka zní, jak mohu omezit výstup drupalu, jen obsah, nebo to dělám špatné kroky k tomu, aby to fungovalo. Zde je modul a soubor js, který používám: 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;
    });
};

Prosím, pomozte mi s tím. Každý návrh je oceněn.

10
dennis605

Mám to. Toto funguje správným způsobem:

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;
        });
   };

Děkuji za všechnu vaši pomoc.

11
dennis605

Myslím, že vaše problémy spočívají v tom, že vaše funkce úspěchu nebude mít variabilní kontext v rozsahu, takže chování příloh bude pracovat na nedefinovaném.

Hádal bych, že to dokážete

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