Blockrefresh mit Ajax
Eingetragen von messy (116)
am 04.01.2011 - 23:07 Uhr in
am 04.01.2011 - 23:07 Uhr in
Hi,
Schlauch... Ich steh aufm Schlauch!
Ich habe ein Block in dem mittels JavaScript ein Countdown runterläuft. Sobald der Countdown auf 0 gelaufen ist, soll der Block neugeladen werden. Also vermutlich mit Ajax oder? Aber die Umsetzung ist mir noch schleierhaft. Ist da bereits etwas in Drupal integriert oder fang ich bei 0 an?
Habe mir das so vorgestellt: Countdown auf 0 -> JavaScript ruft Link auf -> Link ist ein Callback auf hook_block()
Bestimmt falsch, was? :D
- Anmelden oder Registrieren um Kommentare zu schreiben
schau dir doch ma dieses
am 04.01.2011 - 23:48 Uhr
schau dir doch ma dieses beispiel an http://das-drupal-magazin.de/ajax-ganz-einfach-digitaluhr-fuer-drupal
Block refresh
am 05.01.2011 - 12:48 Uhr
Hallo.
Du möchtest [do:block_refresh Block refresh] verwenden.
Stefan
kahta schrieb schau dir doch
am 12.01.2011 - 09:42 Uhr
schau dir doch ma dieses beispiel an http://das-drupal-magazin.de/ajax-ganz-einfach-digitaluhr-fuer-drupal
Super Beispiel. Vielen Dank. Hat mir sehr geholfen.
Du möchtest Block refresh verwenden.
Block refresh war nicht meine Wahl, da der Refresh manuell oder nach einer festeingestellten Zeit abläuft. Bei mir wird der Block nur einmal am Tag für eine gewisse Zeit neugeladen.
Jetzt stehe ich vor einem Problem. Mein AJAX Script ruft einen Pfad auf. Hier der menu_hook()-Auschnitt.
<?php
$items['bla'] = array(
'page callback' => 'bla_refresh',
'access arguments' => array('mymodule acess'),
'type' => MENU_CALLBACK,
);
?>
In der Dunktion bla_refresh soll der Block ausgeben werden.
<?php
function bla_refresh() {
$output = module_invoke('mymodule', 'block', 'view', 0);
print $output['content'];
exit();
}
?>
Jetzt fehlen allerdings die ganzen CSS-Klassen und IDs. Sieht natürlich nicht schön aus. Wie bekomme ich die Ausgabe korrekt angezeigt?
Da Du die Ausgabe über
am 12.01.2011 - 11:23 Uhr
Da Du die Ausgabe über "mymodule" selber regelst, mußt Du da auch die Ausgabe der entsprechenden HTML-Tags mit IDs und Klassen "zu Fuß" ausgeben. So ist das nun mal bei eigenen Modulen.
Beste Grüße
Werner
Achso, aber das Design der
am 12.01.2011 - 11:56 Uhr
Achso, aber das Design der Blocks wird doch über das jeweilige Theme (block.tpl.php und THEME.css) geregelt. Wenn ich das per Fuß löse, dann ist ja gar nicht mehr gewährleistet, dass mein Block sich dem jeweiligen Theme anpasst!? Oder gibt es "strenge" Konventionen der Klassen- und ID-Bezeichner, sodass ich ein korrektes Verhalten erwarten kann?
Viele Grüße
Daniel
Wenn Du Dir mal das
am 12.01.2011 - 16:26 Uhr
Wenn Du Dir mal das Standard-Block-Template ansiehst, stellst Du fest, das das innere nicht behandelt wird. Da steht nur "print $block->content". Beispiel: block.tpl.php aus dem system Modul Drupal 6.20 (ohne Kommentar)
<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="block block-<?php print $block->module ?>">
<?php if ($block->subject): ?>
<h2><?php print $block->subject ?></h2>
<?php endif;?>
<div class="content">
<?php print $block->content ?>
</div>
</div>
Den Aufbau von diesem Content erledigt ein anderes Modul (z.B. Dein eigenes). Das stellt dann auch die IDs und Klassen dazu bereit.
Beste Grüße
Werner
Ah. Okay. Folgender Code
am 12.01.2011 - 23:09 Uhr
Ah. Okay. Folgender Code führt bei mir zum gewünschten Erfolg. Das momentan verwendete Theme (Waffles) erwartet im Gegensatz zu Garland bei dem h2-title noch einige Klassen. Diese muss ich wohl noch dazu schreiben. Dem content reicht die Klasse content.
<?php
$block = module_invoke('mymodule', 'block', 'view', 0);
if ($block['subject']) {
print '<h2 class="title block-title pngfix">' . $block['subject'] . '</h2>';
}
print '<div class="content">' . $block['content'] . '</div>';
exit();
?>
Noch eine Frage, kann ich ich in einem JS-Script irgendwie prüfen, ob "lesbare urls" aktiviert ist? ist ja für den Pfad vom JS-Script relavant oder nicht?