Saya melakukan banyak posting di drupal.org tentang topik ini, tetapi sayangnya dalam konteks yang salah.
- Konten Ajaxed tidak melampirkan diperlukan JS dan CSS (forum)
- Konten Ajaxed tidak melampirkan JS dan CSS yang dibutuhkan (masalah)
Saya pikir itu bukan masalahnya, jadi saya mencobanya dengan pendekatan yang berbeda, dan mungkin ini bisa menjadi solusinya. Memuat seluruh Halaman PHP dan mengekstrak div tertentu dengan ajax tidak berfungsi dengan benar. Jadi saya pikir, saya bisa membiarkan drupal memuat konten dan menyuntikkannya dengan ajax ke div. Saya membuat kueri dengan hook_preprocess_page dan hook_preprocess_node yang mencari "ajax = 1" di URL yang diminta dan kemudian hanya membagikan konten tanpa seluruh halaman. Dan sekarang dengan bantuan file tpl.php tertentu, secara teori, saya bisa membatasi output drupal hanya $ content. Dan inilah masalahnya. Pendekatan saya bekerja bahkan ketika saya meninggalkan file tpl.php dengan cara yang asli, tetapi menghapus "$ content" dari node-ajax.tpl.php. Dengan "bekerja dengan cara yang benar", maksud saya drupal tidak memuat ulang seluruh halaman, tapi tentu saja bukan isinya. Tetapi saya tidak bisa menjelaskan itu kepada diri saya sendiri, karena dalam variabel $ content, jadi saya pikir, hanya html dari konten yang dihasilkan. Jadi pertanyaan saya adalah, bagaimana saya bisa membatasi output drupal, hanya konten, atau apakah saya melakukan langkah yang salah untuk mendapatkan ini berfungsi. Ini adalah file module dan js yang saya gunakan: 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;
});
};
Tolong bantu saya dengan ini. Setiap saran sangat dihargai.
sumber
Jawaban:
Saya telah mendapatkan nya. Ini bekerja dengan cara yang benar:
Terima kasih atas semua bantuannya.
sumber
context
(seperti yang ditunjukkan Josh Koenig) adalah hal yang tidak boleh. Penangan acara Anda akan dilampirkan kembali ke semua elemen pada halaman. Dengan menggunakancontext
, kode ini perlu diubah, karenacontext
mengandungdocument
pada peristiwa pertama yang mengikat dan elemen itu sendiri ketika konten akan diganti, sehingga sederhana$('#content-group-inner a',context)
tidak akan berfungsi.Saya pikir masalah Anda adalah bahwa fungsi kesuksesan Anda tidak akan memiliki konteks variabel dalam ruang lingkup sehingga perilaku attach akan bekerja pada yang tidak ditentukan.
Saya kira Anda bisa melakukannya
sumber
context
(yang merupakan konteks lama daripada markup baru) dalam ruang lingkup: apakah itu salah?