[gelöst]Generell ajax in drupal
am 26.03.2011 - 03:09 Uhr in
Hallo liebe Drupalgemeinde,
bitte helft mir bei folgendem Problem.
Ich versuche gerade meine Homepage mit Jquery bzw. Ajax ein wenig zu verbessern.
Wenn ich aber über :
$('#content-region').load('/index.php#main-wrapper');
versuche, Inahlt nachzuladen, kann ich in Firebug sehen, dass der Bereich geladen wird mit Antwort:200,
die Seite aber nach dem Laden, sich erneut lädt, und ich wieder am Anfang stehe.
Genauso habe ich dies mit dem jquery plugin ajax.Content versucht zu realisieren.
mit:
$('a').ajaxContent();
nach dem Laden der Seite in der Firebug Konsole.
Ich sehe auch, dass eine Collection angelegt wird, wie ich sie haben möchte.
Auch hier klappt das Laden des Bereiches, zu sehen in Firebug mit der Antwort:200 , aber hier geschieht gar nichts.
Das heißt es verändert sich in der Seite nichts, obwohl der Inhalt laut Firebug geladen wurde, wird der Inhalt nicht eingesetzt.
Ich verwende jquery 1.3.2.
Und vielleicht liegt es ja daran, ich verwende acquia slate 6.x-3.0-beta1 als Theme.
Meine View mit einem Ajax pager funktioniert allerdings einwandfrei, d.h. Ajax funktioniert - eigentlich.
Wäre schön, wenn jmd. mir hier sagen könnte, warum der Bereich geladen wird, aber sich nichts verändert.
Vielen Dank schon mal für eure Unterstützung
dennis605
- Anmelden oder Registrieren um Kommentare zu schreiben
Wie hast du denn die LInks
am 26.03.2011 - 18:59 Uhr
Wie hast du denn die LInks aufgebaut, die die Inhalte laden sollen ? Oder hast du vlt. eine Testseite online, die das Verhalten zeigt ?
Zum Thema gab es vor Kurzem schon einmal einen Thread im Drupalcenter - dieser sollte dir auch weiterhelfen. Ich hatte da schon einmal einen Post zum Thema hinterlassen.
http://www.drupalcenter.de/node/34405#comment-122465
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
Hallo SteffenR, danke für
am 27.03.2011 - 19:43 Uhr
Hallo SteffenR,
danke für deine Antwort.
Was meinst du denn, da ich ja verschiedene Probleme geschildert habe:
1.
Wenn ich aber über :
$('#content-region').load('/index.php#main-wrapper');
versuche, Inahlt nachzuladen, kann ich in Firebug sehen, dass der Bereich geladen wird mit Antwort:200,
die Seite aber nach dem Laden, sich erneut lädt, und ich wieder am Anfang stehe.
,oder
2.
Genauso habe ich dies mit dem jquery plugin ajax.Content versucht zu realisieren.
mit:
$('a').ajaxContent();
nach dem Laden der Seite in der Firebug Konsole.
Und was ich vergessen habe zu erwähnen. Ich habe es natürlich auch mit dem "ajax it" module probiert.
Hier habe ich das gleiche Problem, wie die anderen User in den Themen:
http://drupal.org/node/930640
http://drupal.org/node/929006
Wenn ich die Sache mit dem Padding korrigiere, funktioniert das ajaxing von "ajax it" trotzdem nicht.
Wäre natürlich am besten, wenn ich das zum Laufen bekäme.
Wenn ich dann irgendeinen Link anklicke, passiert rein gar nichts.
Danke schon mal für deine Unterstützung
dennis605
Danke für eure Unterstützung
Dennis605
Das Modul ajaxContent kenne
am 27.03.2011 - 20:09 Uhr
Das Modul ajaxContent kenne ich so gar nicht. Ich meinte mit meiner Frage eher ersteren Teil deines Problems..
Hier bräuchten etwas mehr Beispielcode oder eben die Seite selbst um zu schauen, woran das Problem nun genau liegt.
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
Entschuldigung, das war ein
am 27.03.2011 - 23:23 Uhr
Entschuldigung, das war ein Missverständnis.
ajaxContent ist kein Modul, sondert ein jquery plugin.
Zu deiner Frage zurück.
Ich versuche bzw. versuchte es so:
//drupal_add_js( "Drupal.behaviors.modalFrameExample = function(context) {
drupal_add_js ("$(document).ready(function(){
Popups.message('Hinweis','<h2>Vielen Dank für Ihr Mitwirken</h2> ');
$('#popup_ok').unbind('click');
$('#popup_ok').click(function() {
$('body').load('/startseite#content-region-inner');
//oder
$('body').load('/startseite');
// oder
$('#content-region-inner').load('/startseite#content-region-inner');
lg
dennis605
Danke für eure Unterstützung
Dennis605
Leerzeichen beachten.
am 28.03.2011 - 00:58 Uhr
Leerzeichen beachten. Ansonsten lädt er die ganze Seite.
$('#content-region').load('/index.php #main-wrapper');
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
Danke für deinen Tipp, das
am 28.03.2011 - 20:48 Uhr
Danke für deinen Tipp,
das funktioniert tatsächlich,aber leider zerschießt diese Anweisung mein komplettes CSS.
Du weist nicht zufällig, wie man ajaxit zum Laufen bekommt?
Wenn ich es aktiviere, wird ein meiner Homepage überhaupt kein Content und kein Menu mehr angezeigt.
wenn das laufen würde, wäre es einfach genial.
Trotzdem, vielen Dank schon mal für Deine Hilfe.
dennis605
Danke für eure Unterstützung
Dennis605
Was ist ajxit? Ajax? Wenn ja,
am 28.03.2011 - 19:22 Uhr
Was ist ajxit? Ajax? Wenn ja, Ajax ist kein Ding was man so anschaltet, sondern eine Technologie, die man mit Hilfe von jQuery nutzen kann.
Wenn http://api.jquery.com/load/ dein Layout zerstört, muss du eben, dein Seitenaufbau überdenken oder einfach drauf verzichten, man kann auch ohne.
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
Ajaxit ist ein Drupal
am 28.03.2011 - 20:52 Uhr
Ajaxit ist ein Drupal Modul:
http://drupal.org/project/ajaxit
Habe mich verschrieben, aber korrigiert, sorry.
Du hast recht ohne geht schon, ich würde es trotzdem gerne einbauen.
Ich probiere es weiter, und wenn mir jmd. dabei helfen kann, wäre es natürlich optimal.
Danke für eure Unterstützung
Dennis605
Also mit Garland funktioniert
am 28.03.2011 - 21:24 Uhr
Also mit Garland funktioniert es grundsächlich, allerdings gibt es dann hier und da komisches Verhalten. z. B. bei den Devel-Tabs wird das jS für Krumo nicht ausgeführt oder so.
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
Dann wird es wohl irgendwie
am 28.03.2011 - 22:00 Uhr
Dann wird es wohl irgendwie an den ID's und Klassen liegen.
Schön daß du mir das gesagt hast. Evtl. kann ich dann mein theme ein wenig an garland anpassen.
Danke dafür.
Danke für eure Unterstützung
Dennis605
Ich habe es nun ohne Modul
am 30.03.2011 - 15:59 Uhr
Ich habe es nun ohne Modul versucht - mit Erfolg.
So wird mein Css nicht kaputt gemacht.
Und zwar so:
$('#mein_views_panel').click(function(){
$('#content-region-inner').slideUp('slow').load('/node/268 .#content-region-inner', function() {
$(this).slideDown('slow');
});
return false;
});
Jedoch müsste ich
/node/268
irgendwie dynamisch erzeugen, damit mein kompletter Inhalt angesprochen wird.Ich habe es so versucht:
JS Script:
Drupal.behaviors.my_ajax = function(context) {
var nid = Drupal.settings.my_ajax.nid;
$('#mein_views_panel').click(function(){
$('#content-region-inner').slideUp('slow').load('/node/nid .#content-region-inner', function() {
$(this).slideDown('slow');
});
return false;
};
Mein modul:
<?php
function my_ajax_nodeapi(){
drupal_add_js(array('my_ajax' => array('nid' => arg(1))), 'setting');
drupal_add_js(drupal_get_path('module', 'my_ajax') .'/my_ajax.js');
}
?>
Das funktioniert allerdings nicht so richtig.
Kann mir vielleicht jmd. sagen was ich hier falsch mache, oder wo mein Denkfehler ist?
Vielen Dank schon mal
dennis605
Danke für eure Unterstützung
Dennis605
nid muss konkatiniert
am 30.03.2011 - 19:33 Uhr
nid muss konkatiniert werden.
$('#content-region-inner').slideUp('slow').load('/node/' +nid ' #content-region-inner', function() {
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
Danke! Richtig, das hatte ich
am 31.03.2011 - 00:05 Uhr
Danke! Richtig, das hatte ich vergessen.
Habe es jetzt so probiert:
Musste auch noch zusätzlich 2 mal ""verwenden.
Drupal.behaviors.my_ajax = function(context) {
$('#content-region-inner').click(function(a){
a = new Array();
var nid = Drupal.settings.my_ajax.nid;
alert(nid);
//$('#content-region-inner').slideUp('slow').load('/node/'+ nid, function() {
$('#content-region-inner').slideUp('slow').load("'/node/' + nid '#content-region-inner'", function() {
$(this).slideDown('slow');
});
return false;
})};
Allerdings versucht er dann jedesmal
http://www.example.de/%27/node/%27
zu laden. Und die ausgabe von
alert(a)
zur Kontrolle, ist nur eine Ansammlung von Kommata.Kannst du Dir vielleicht erklären, warum die Variable "nid" nicht mit den richtigen Werten belegt wird?
Danke für eure Unterstützung
Dennis605
Nein ohne die "". Probier das
am 31.03.2011 - 18:17 Uhr
Nein ohne die "".
Probier das hier aus, unter http://www.drupalcenter.de/node/34519 in Firebug.
var nid = 34519;
$('#footer').load('/node/' + nid + ' #node-34519');
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
Dein Beispiel funktioniert,
am 31.03.2011 - 19:29 Uhr
Dein Beispiel funktioniert, danke.
Wieder ein schritt weiter Richtung Ziel.
Jedoch hat hat nid immer noch nur eine Ansammlung von ca. 10 Komata.
Und ich denke, das ist das Problem, denn
var nid = 34519;
$('#footer').load('/node/' + nid + ' #node-34519');
funtioniert, obwohl
' #node-34519'
ignoriert wird.Es wird lediglich /node/34519, ohne
' #node-34519'
geladen.Darf ich meine PHP Funktion vielleicht nicht in einem Modul verwenden, sondern in die template.php reinschreiben?
Danke für eure Unterstützung
Dennis605
Oh mann ich habe da einen
am 31.03.2011 - 19:54 Uhr
Oh mann ich habe da einen riesen Denkfehler gemacht.
Da ich mich auf der Startseite befinde, gibt es gar keinen wert für
arg(1)
.Ich habe meinen Inhalt auf der Startseite in einer 3 reihigen view platziert.
Deswegen funktioniert meine Vorgehensweise überhaupt nicht, tut mir leid.
Kannst du mir sagen, wie ich js mitteilen kann, welche
$node->id
ich angeklickt habe.Danke für eure Unterstützung
Dennis605
Du könntest dir auch den
am 31.03.2011 - 20:02 Uhr
Du könntest dir auch den kompletten Pfad - also den Wert aus href auslesen lassen und damit weiterarbeiten:
Beispielhaft das folgende CodeSnippet:
$('a.ajax_link').live('click',function(e) {
var url = $(this).attr('href');
$('#content').load(url+"#loadme");
return false;
});
Du kannst also die Grundstruktur der Seite komplett beibehalten und greifst über jquery die Klicks auf die Links ab..
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
Super, SteffenR, genau so
am 31.03.2011 - 20:30 Uhr
Super, SteffenR,
genau so sollte es funktionieren.
Leider bekomme ich die Meldung: 'href' is not defined.
Könnte es daran liegen:
'a.ajax_link'
?Ich weis leider nicht was das bedeutet. Muß ich hier irgendetwas an meine Gegebenheiten anpassen?
Danke für eure Unterstützung
Dennis605
Also es funtioniert jetzt
am 31.03.2011 - 20:45 Uhr
Also es funtioniert jetzt zwar, ich kann auch sehen, dass die url geladen wird, aber
es wird nichts angezeigt.
Das bedeutet, dass einfach gar nichts passiert, obwohl es eigentlich richtig geladen wird.
Wie ist das möglich?
Danke für eure Unterstützung
Dennis605
dennis605 schriebAlso es
am 31.03.2011 - 20:54 Uhr
Also es funtioniert jetzt zwar, ich kann auch sehen, dass die url geladen wird, aber
es wird nichts angezeigt.
Das bedeutet, dass einfach gar nichts passiert, obwohl es eigentlich richtig geladen wird.
Wie ist das möglich?
Schau dir mal im Firebug die Ausgaben an - dort gibt es einen Tab mit dem Namen "Netzwerk" - dort werden dir zu den einzelnen Ajax Calls mit einem Klick auf das "+" Zeichen auch die Header / Antworten angezeigt, die dir die Request liefert..
Grundlegend solltest du dich vlt. auch einmal mit CSS / Selektoren und jQuery auseinandersetzen - bspw:
http://net.tutsplus.com/articles/web-roundups/jquery-for-absolute-beginn...
http://www.css4you.de/wscss/index.html
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
Oh mein Gott, es
am 31.03.2011 - 20:55 Uhr
Oh mein Gott,
es funkioniert.
Ich kanns kaum glauben.
So hat's funktioniert:
$('#content-region-inner a').live('click',function(e) {
var url = $(this).attr('href');
$('#content-region-inner').slideUp();
$('#content-region-inner').load(url+" #content-region-inner");
$('#content-region-inner').slideDown('slow');
return false;
});
Vielen, vielen Dank SteffenR und Tobias Bähr für eure Geduld mit mir.
Danke für eure Unterstützung
Dennis605
Wenn du jetzt auch noch über
am 31.03.2011 - 21:09 Uhr
Wenn du jetzt auch noch über die von dir im Script verwendeten Funktionen Bescheid weisst, hat dich das ja schon ein gutes Stück weitergebracht...
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
Hallo und sorry, ich bin's
am 01.04.2011 - 20:20 Uhr
Hallo und sorry,
ich bin's noch einmal.
Jetzt hat sich noch ein anderes großes Problem aufgetan.
Ich habe gemerkt, daß wenn ich Links per Ajax lade, allerdings nicht die benötigten JS Scripte der einzelnen Module mit geladen werden .
Ich denke ich müsste auf irgendeine Weise den 'head' der Ziel URL auch noch laden. Leider weis ich nur, daß:
$('head').load("index.php/?q="+url+"head");
und
$('head').load(url+" head");
und
$('head').html(url+" head");
nicht funktionieren.
Könntet Ihr mir bitte bei diesem Problem noch einmal behilflich sein?
Danke für eure Unterstützung
Dennis605
Da du ja nur Inhalte in einem
am 01.04.2011 - 20:31 Uhr
Da du ja nur Inhalte in einem DIV austauscht - sprich die Inhalte aus anderen Seiten dort hinziehst - brauchst du die dort enthaltenen Scripte nicht neu laden..
Um nun aber Javascript-Events in dem neu geladenen DIV abzufangen musst du die statt normaler click-Handler mit dem live-"Handler" arbeiten. Weitere Infos dazu gibt es in der Doku von jQuery:
http://api.jquery.com/live/
Beispielhaft kann man sich das Ganze auch auf unserer Referenzenseite anschauen:
http://www.hopper-intermedia.de/referenzen/webdesign-l%C3%BCpi
SteffenR
http://www.twitter.com/_steffenr
Drupal-Initiative e.V.
Etwa so in der
am 01.04.2011 - 21:06 Uhr
Etwa so in der Art?
Drupal.behaviors.my_ajax = function(context) {
$('#content-group-inner a').live('click',function(e) {
$('#content-group-inner').live('load',function(e) {
hier kommt dann was rein????
}
var url = $(this).attr('href');
//$('#content-region-inner').slideUp('slow');
$('#content-region-inner').empty().html('<img src="ajax-loader.gif" style="margin-left:50%;"/>');
$('#content-region-inner').load(url+" #content-region-inner", function(){
$('#content-region-inner').slideDown('200');
});
return false;
});
};
Danke für eure Unterstützung
Dennis605
Also ich habe jetzt mal in
am 01.04.2011 - 22:30 Uhr
Also ich habe jetzt mal in firebug geschaut, und gesehen, daß die benötigten Scripte eigentlich geladen sind.
Warum sagt mir dann mein Browser, ich hätte javascript deaktiviert, und sollte es aktivieren?
Bitte helft mir noch einmal.
Danke für eure Unterstützung
Dennis605
Das live bezieht sich auf
am 01.04.2011 - 22:44 Uhr
Das live bezieht sich auf Elemente die via Ajax hineinkommen, weil dort sonst die JS-Events nicht gesetzt bzw. getriggert werden. Also wenn in dem Inhalt, welches du lädst keine JS-Events getriggert werden müssen, brauchst du kein live().
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen
Das Verhältnis anderen zu helfen muss höher sein, als von anderen Hilfe zu erfragen/erwarten.
Gibt es eine Möglichkeit in
am 01.04.2011 - 23:25 Uhr
Gibt es eine Möglichkeit in Inhalt, den ich per ajax lade, JS zur Verfügung zu stellen.
Ich bin leider noch nicht so versiert, deswegen weis ich leider mit deiner Aussage noch nichts so richtig anzufangen.
Ich habe z.B. das Modul "Taxonomy Super Select" installiert. Wenn ich dann den Link wie node/add/article mit Ajax lade,
bekomme ich die Meldung es sei Javascript deaktiviert.
Gibt es eine Möglichkeit hier die weitere Funktionalität zu gewährleisten.
Ich danke Dir
Danke für eure Unterstützung
Dennis605