theme_node_preview() aendern?
![](https://www.drupalcenter.de/files/imagecache/upic_mini/pictures/picture-110.jpg)
am 03.12.2007 - 11:41 Uhr in
Ich arbeite am neuen Googlemap Modul.
Beim Erstellen einer Map Node wird in der Vorschau die Map nicht angezeigt weil sie die 2. Map zur bereits angezeigten Map im Bearbeitenformular ist und die Map div der Preview die gleiche ID hat wie die Map div im Bearbeitenformular. Ich muss also fuer die 2. Map die Map div ID aendern.
Es geht also nicht darum theme_node_preview() per Template sondern per Modul zu aendern. Nun suche ich nach einer Moeglichkeit dafuer und sehe gerade keine.
Hat Jemand eine Idee?
Hier der Vollstaendigkeit halber Code der theme_node_preview()
<?php
function theme_node_preview($node) {
$output = '<div class="preview">';
if ($node->teaser && $node->teaser != $node->body) {
drupal_set_message(t('The trimmed version of your post shows what your post looks like when promoted to the main page or when exported for syndication. You can insert the delimiter "<!--break-->" (without the quotes) to fine-tune where your post gets split.'));
$output .= '<h3>'. t('Preview trimmed version') .'</h3>';
$output .= node_view(drupal_clone($node), 1, FALSE, 0);
$output .= '<h3>'. t('Preview full version') .'</h3>';
$output .= node_view($node, 0, FALSE, 0);
}
else {
$output .= node_view($node, 0, FALSE, 0);
}
$output .= "</div>\n";
return $output;
}
?>
-----------------
quiptime
- Anmelden oder Registrieren um Kommentare zu schreiben
@traxer
am 04.12.2007 - 01:47 Uhr
@traxer, hast Du eventuell eine Idee?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
hook_nodeapi($op = view)
am 04.12.2007 - 02:47 Uhr
@traxer, hast Du eventuell eine Idee?
Du kannst in hook_nodeapi($op = view) die '#id' des entsprechenden Eintrages in $node->content ändern. Der hook wird auch für die Vorschau ausgeführt.
--
![XING](http://www.xing.com/img/buttons/6_de_btn.gif)
@traxer, das ist nicht das Problem
am 05.12.2007 - 01:30 Uhr
Du kannst in hook_nodeapi($op = view) die '#id' des entsprechenden Eintrages in $node->content ändern. Der hook wird auch für die Vorschau ausgeführt.
Genau an der Stelle setzt meine Frage an.
Ich verwende bereits hook_nodeapi($op = view).
Die Vorschau wird auch angezeigt - das ist nicht das Problem.
Das Problem ist, wenn mit der Preview eine div mit der gleichen ID wie im Bearbeitenformular angezeigt wird so kann mit der Vorschau div eine Googlemap gezeigt werden. Da aber auf der gleichen Seite im Bearbeitenformular die div mit gleicher ID existiert wird wird in dieser div die Googlemap nicht angezeigt da die div fuer die Googlemap schon verwendet wird.
Man kann in einer Website nur dann mehrere Googlemaps anzeigen, wenn die basierenden div der Maps unterschiedliche ID's haben.
Deswegen meine Ueberlegung, die ID div in der Preview zu aendern. Damit werden dann beide Googlemaps angezeigt - die Preview- und Bearbeiten-Map.
Eigentlich wuerde ich ein hook_nodeapi($op = preview) brauchen. Aber genau das gibt es ja nicht.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Wie Previews gerendert werden
am 05.12.2007 - 11:23 Uhr
Deswegen meine Ueberlegung, die ID div in der Preview zu aendern. Damit werden dann beide Googlemaps angezeigt - die Preview- und Bearbeiten-Map.
Das habe ich schon verstanden.
Eigentlich wuerde ich ein hook_nodeapi($op = preview) brauchen.
Eigentlich nicht. Der Aufrufstapel sieht ja so aus
menu_execute_active_handler
node_page_edit
drupal_get_form
drupal_render_form
drupal_render
node_preview
Hier wird eine Kopie des Nodes angelegt und damit weitergearbeitet. Außerdem setzt die Funktion
$node->in_preview=true
. Weiter geht es mittheme('node_preview')
theme_node_preview
node_view($node)
node_build_content($node)
node_invoke_nodeapi($node, 'view')
googlemap_nodeapi($node, 'view')
Hier ist es möglich, das id-Attribut des erzeugten div-Elementes zu manipulieren.
Nachdem der Aufrufstapel wieder bei Punkt 5 angelangt ist, wird das eigentliche Formular gerendert.
Falls das nicht funktioniert, könnte ich mal einen Blick auf den Quelltext werfen. Ist der im contrib-CVS?
--
![XING](http://www.xing.com/img/buttons/6_de_btn.gif)
Mhm, den Ablauf des
am 05.12.2007 - 12:35 Uhr
Mhm, den Ablauf des Aufrufstapel kannte ich bisher nicht.
Nun stellt sich mein Problem in einem anderen Licht dar. Ich habe dazu einen neuen Thread eroeffnet.
hook_form() und Nichtform-Seitenelemente: http://www.drupalcenter.de/node/6926
Ich denke ich muss dort ansetzen um mein Problem auf der richtigen Basis zu loesen.
@traxer, eventuell hast Du bei der Problemstellung im anderen Thread auch einen Ansatz?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
War ungenau von mir
am 05.12.2007 - 13:45 Uhr
Mhm, den Ablauf des Aufrufstapel kannte ich bisher nicht.
War auch nicht ganz korrekt von mir. Richtig ist
11. node_invoke($node, 'view')
12. googlemap_view($node)
Weil es sich ja um Daten eines Inhaltstyps handelt, den das Modul selbst definiert.
--
![XING](http://www.xing.com/img/buttons/6_de_btn.gif)