Popup Reload der parent seite

Liebe/-r Experte/-in,
ich bin in php fit, leider nicht in js. Daher eine Frage / Problem.

Also: Ich habe eine Seite, von wo ein pdf generiert wird.
Das klappt. Nun soll vorher eine Abfrage kommen, ob das ganze gemailt oder gespeichert werden soll.
Nach dem generieren wird die Datenbank aktualisiert und die Hauptseite ist nicht mehr aktuell.

Also:
Seite1.php mit Link zum pdf:

[
](javascript:openURLWindow(‚emailoderdrucken.php?id=<?php%20echo%20%24ausgabe_einsaetze%5B'einsatz_id'%5D;?>‘))

Beim Klick öffnet sich das Fenster mit einem simplen Formular (2 radiobutttons ein Submit, 1 close.)
Beim Abschicken wird die DB aktualisiert und ein pdf generiert.
Nun steht aber leider noch das Popup offen und die seite1.php zeigt den alten Stand.
Ein normaler Browser reload schließt das fenster und aktualisiert die Anzeige wie gewünscht.
Wie bekomme ich das Ganze automatisiert?

Besser wäre mit einem kleinen timeout, damit der Server eine Chance hat die DB zu aktualisieren, bevor die Seite neu geladen wird.

Die Popupseite mit einigen erfolglosen Versuchen:

Email:speichern/Drucken:

Danke für eure Mühe
tsunami

Hallo tsunami,

Wenn du aus einem geöffneten Fenster auf das Fenster
zugreifen willst, musst du statt aut „window.parent“ auf
„window.opener“ zugreifen. so kriegt du es hin.

viele Grüße,
Haimi

Email:speichern/Drucken:

Danke für eure Mühe
tsunami

hallo tsunamie,

in den form-tag folgende onsubmit-anweisung:

die settimeout-methode nimmt nur 1 anweisung an, darum 2 settimeouts :smile:

gruß
klaus

Hallo Klaus,

Danke für Deine superschnelle Antwort!
Leider ist es ein Satz mit x.

Fenster geht auf.

Aber dann passiert nichts beim submit

Gruß
tsunami

Also ich weiss nicht, wieso ich hier als Experte bestimmt worden bin. Ich habe keine Ahnung
von PHP, aber ich kenne JavaScript sehr gut.

Wie öffnest du denn das zweite Fenster? Ich sehe du rufst das eine js Funktion
openURLwindow auf. Wo ist die definiert und was macht die genau?

In welchen Browsern muss das funktionieren? Reicht IE?

Ein Problem, das ich sehe ist, dass User nach dem Öffnen des zweiten Fensters auf erste
zurück können und dort nochmal auf das Bild klicken und weitere Fenster zum Auswählen
öffnen. Soll das möglich sein?

Du könntest z.B. ein openModalDialog aufrufen, aber das geht nur mit IE, also z.B. im
Intranet einer Firma, die nur IE einsetzt.

Du kannst auch JS Popup’s verwenden, aber dort kannst du nur einen Text und zwei Knöpfe
(Yes/No) verwenden. Vielleicht reicht das.

Ansonsten würde ich versuchen gar kein Fenster zu Öffnen (das haben die User eh nicht
gern). Du könntest ja z.B. eine Auswahl dynamisch einblenden (.visible=true) oder auf eine
neue Seite weiterleiten. So macht man das normalerweise.

Hallo Oliver,

Fenster geht auf.

Aber dann passiert nichts beim submit

mal target rausnehmen.

die befehle stimmen und müssten funktionieren.

und kannst du mal den ausgegebenen quelltext vom popup-fenster posten. (rechte maustaste - quelltext anschauen , copy & paste )

brauchst du überhaupt name und id für das formular?

wird den das formular an das script verschickt?

gruß

klaus

Hi,

danke für Deine superschnelle Anwort! :smile:
Die YAntwort zwischen den Zeilen.

Also ich weiss nicht, wieso ich hier als Experte bestimmt
worden bin. Ich habe keine Ahnung
von PHP, aber ich kenne JavaScript sehr gut.

Bei mir ists umgekehrt. Hate halt nach Experten / Fortgeschrittenen für js gesucht.

Wie öffnest du denn das zweite Fenster? Ich sehe du rufst das
eine js Funktion
openURLwindow auf. Wo ist die definiert und was macht die
genau?

Also irgenwo hatte ich mal eine Sammlung gefunden für mootools. Sieht etwas schöner aus wie das window.open-
Habs halt nur eingebaut. Mittels css wirds wohl animiert usw.

###############################

function openURLWindow(file)
{
var win = new Window({className: „alphacube“, width:300, height:300, zIndex: 10000, url: file})
win.showCenter(„modal“);
}

###################################

In welchen Browsern muss das funktionieren? Reicht IE?

Mhm, Wäre schon gut, wenns überall geht. gerade der IE ändert seine Fähigkeiten mit jeder Version.

Ein Problem, das ich sehe ist, dass User nach dem Öffnen des
zweiten Fensters auf erste
zurück können und dort nochmal auf das Bild klicken und
weitere Fenster zum Auswählen
öffnen. Soll das möglich sein?

Nee, das geht nicht. Das Mutterfenster ist deaktiviert nd ausgegraut. Erst wenn ich ein reload mache ist die Seite wieder ansprechbar und aktualisiert(oder close, aber dann ists nicht aktualisert.

Du könntest z.B. ein openModalDialog aufrufen, aber das geht
nur mit IE, also z.B. im
Intranet einer Firma, die nur IE einsetzt.

Du kannst auch JS Popup’s verwenden, aber dort kannst du nur
einen Text und zwei Knöpfe
(Yes/No) verwenden. Vielleicht reicht das.

Habe ich auch schon gedacht, abe rkann man Ja und Nein austauschen?

Ansonsten würde ich versuchen gar kein Fenster zu Öffnen (das
haben die User eh nicht
gern). Du könntest ja z.B. eine Auswahl dynamisch einblenden
(.visible=true) oder auf eine
neue Seite weiterleiten. So macht man das normalerweise.

Wäre ein Notlösung, aber 3 Knöpfe auf der ganzen Seite…
So isses halt schöner…

Gruß
tsunami

ich sehe gerade:

javascript:openURLWindow(’ …

diesen JS-Befehl gibt es nicht.

heißt
window.open( „url“ , „titel“, „width=300,height=400,left=100,top=200“);

und warum nennst du das „haupt“-fenster parent?
hast du ein frameset oder iframe?
ist das vielleicht gar kein neues fenster, das erzeugt wird?

Hi Klaus,
waow, das nne ich schnell! Danke!

Ohne target wird die Seite im Popup angezeigt. ID und name ist raus. Nix.

Der source:
######################

Rechnung generieren

Email:speichern/Drucken:

[Fenster zumachen](javascript:Zweitfenster.close())

#########################
Das Formular wird korrekt abgeschickt und die Variable übergeben.

Gruß
Oliver

Hi,
waow. Das ist schnell! Danke!

das openUrlWindow ist eine Funktion.

Den Block habe ich mal irgendwann eingebaut:

function openURLWindow(file)
{
var win = new Window({className: „alphacube“, width:300, height:300, zIndex: 10000, url: file})
win.showCenter(„modal“);
}

Kein frame nur ein popup.
>die Funltion ist halt nett, weils animiert ist, die Haupseite deaktiviert ist, usw.
Gruß
Oliver

hi olliver,

also … mein fehler
hatte das mit onclick getestet :smile:

nach dem verschicken des formulars wird die seite sozusagen aufgelöst … und das settimeout existiert nicht mehr.
eine mögliche lösung:
diese funktion in das popup:

function feuer(){
window.setTimeout(‚window.opener.location.reload()‘,2000);
window.setTimeout(‚document.form.submit()‘,3000);
}

(hierfür wäre dann name=„form“ zum ansprechen notwendig )

und im formular keinen submit-button sondern einen button, der die function feuer aufruft.

Email:speichern/Drucken:

die php-datei muss dann html mit dem javascript im header ausgeben:

window.onload=function(){
window.close()
}

damit schließt es sich selbst.
kannst ja noch einen kurze meldung reinpacken und auch ein settimeout für das window.close().

ein 2.möglichkeit … etwas komplizierter:
das opener-fenster bekommt eine funktion, die
beim submit des popup aufgerufen wird.
diese function übernimmt dann zeitgesteuert das schließen des fenster und danach das eigene reload.
das popup-fenster muss aber einen „namen“ haben.
wie das in mytool funkt??
normal geht das so:
neuesFenster = window.open ( … parameter… )

und mit neuesFenster.close() wird es geschlossen.

gruß
klaus

Also eine Lösung für ein modales Popup für alle Browser gibt es eigentlich nicht. Was man aber machen kann ist ständig abfragen welches Fenster aktiv ist und sich in der Vordergrund bringen. Ausserdem kann man natürlich (für das hintere Fenster) einen dunklen Schimmer drüberlegen und solche Sachen. Ich gehe mal davon aus das wird bei mootools gemacht.

Leider kenne ich das mootools Framework nicht. Ich kann dir also nur eine generelle Antwort geben.

Auch wenn es geht, würde ich davon absehen ein weiteres Fenster zu öffnen. Was ist, wenn der User einen Popup-Blocker installiert hat? Dann passiert nämlich gar nichts. Manche Popup-Blocker lassen das Öffnen eines einzelnen neuen Fensters zu, aber nur in dem Moment, wenn der User auf etwas klickt (wie bei dir). Bei anderen Popup-Blockern aber vielleicht nicht.

Wenn du aber trotzdem unbedingt das so machen willst, dann ok.

Du kannst mit a=window.open(… ja das Fenster öffnen (oder mit deinen Tools, was aber auf das gleiche rauskommt). Im anderen Fenster kannst du mit window.opener (oder .parent?) auf das andere Fenster zugreifen. Damit kannst du gegenseitig was machen.

Nachdem du im Popup gepostest hast, kannst du eine Funktion vom Opener-Window aufrufen, also so ähnlich:

var isFinished=;

function TerminateThisStuff(){
var opr=window.opener;
opr.FinishedRoutine();
}

Und im ersten Fenster:

var win2=null;

win2=window.open(…

function FinishedRoutine(){
win2.close();
window.location.reload();
}

Oder so ähnlich - ich kenne die Befehle auch nicht alle auswendig, obwohl ich sie täglich brauche. Falls was nicht geht, musst du halt nochmal nach-googlen. Oder Reply nochmal hier.

Ach ja, wenn das mootools Framework Modal Dialogs erzeugt, bzw. imitiert, dann müsste ja auch beschrieben sein, wie das funktionieren sollte. Vielleicht kannst du dort auch nochmal nachfragen. Du solltest aber funktionierenden Code (Mini-Version beider Fenster) bereithalten.

Ich hoffe ich konnte etwas helfen.

Liebe Grüsse

Hi Klaus.
Mein Problem ist aber wirklich hartnäckig.

Ein simples reload der opener Seite würde genau das machen, was ich möchte…
So wir das Formular verzögert abgeschickt . Klasse.
Aber das popup bleibt stehen und die Seite wird nicht neu geladen.
Ein zeitverzögerter relaod der „Mutterseite“ würde meine Restprobleme lösen…

Liegt der Hase vielleicht in den mootools? Das einfach die popupfunktion unschön ist? Das resultierende Popup sieht halt nur Klasse aus.
Gruß
Oliver

Hallo,

also einen Popupblocker habe ich auch installiert. Tut trotzdem. Dieses mootools-Popup ist daher recht genial.
Es sieht Klasse aus und schlüpft auch durch die Popupblocker. Die Mutterseite ist deaktiviert und das fenster ist fix.
Das Ganze ist für den internen Gebrauch bestimmt. Auch deshalb ist es fast egal.

Hm, mit dem indow.opener habe ich nun etliche Varianten durch. Es sieht so aus, als wenn der Zugriff auf das ursprungsfnster nicht so ohne weiteres wie auf ein normales popup möglich ist…

Ich selber habe js bisher fast nur eingebaut und minimalst angepasst. Was mir helfen würde ist die zeitverzögerte relaod Funktion des Browsers „imitieren“.
also sobald das formular aus dem „popup“ angeschickt wurde, nach 5 Sekunden einen reload initieren.

Ohne Popup habe ich es Problemlos hinbekommen.
Nur möcht3 ich nun die Option Mailen oder drucken bieten. In dem Fenster siehts ichtig edel aus. Und das Fenster habe ich auf den anderen Seite auch genutzt. Müsste dann alles umschreiben.

Gruß
tunami

Hallo Oliver,

ich habe mal ein bißchen gesucht.
mit der methode openURLWindow aus der ui mooltool incl. core_window.js wird das „PopUp“
durch die methode setUrl(URL) als „IFrame“ geladen. also gibt es keinen opener !!
muss sagen … geschickt als popup-fenster aufgemacht :smile:)

bei einem parent.location.reload() wird auch der iframe wieder neu geladen.

also müsste eigentlich

parent.location.href=„AusgangsUrl“

wahrscheinlich erfolgreich sein.
dann ist der iframe weg und die ausgangsseite wieder da.

gruß
klaus

Hi Klaus,
hurra Hurra das isses.
Erstmal ein Fettes Dankeschön!
Das war es.
2 Kleinigkeiten noch:

soll mir halt nen Timeout von 3 Sekunden bescheren, bevor neu geladen wird, damit die DBabfrage Zeit hat zu reagieren.

Und für mich zum Verständnis:
iframe heißt, dass mir das Script setUrl(URL) quasi einen Iframe generiert, der nicht eingebettet ist, sondern mittels css drüber schwebt und die Hauptseite deaktiviert? Ist das so richtig?
Deshalb merkt es auch der popup blocker nicht…
DANKE und Gruß
Oliver

hallo oliver,

funktioniert das?

onsubmit=‚parent.location.setTimeout(„parent.location.href=‚test.php‘“,3000)‘>

parent.setTimeout (…) dürfte reichen.

damit die DBabfrage Zeit hat zu reagieren.

öhm … um das einfacher zu machen
lasst doch den php-script, der die dbabfrage macht, html & js ausgeben:

window.onload=function(){
parent.location.href=„test.php“
}

dann wird, sobald der iframe den post-response geladen hat, die test.php im parent geladen.

Und für mich zum Verständnis:

also … openURLWindow ist ein bestandteil von diesen mooltools … das arbeitet mit diesem core_window … und das hat eine function setURL … alles zusammen stellt einen iframe so dar als, wenn es ein popup wäre.
ist natürlich recht aufwendig … mouse-event, style, positon … etc.

gruß
klaus

hallo oliver,

funktioniert das?

onsubmit=‚parent.location.setTimeout(„parent.location.href=‚test.php‘“,3000)‘>

parent.setTimeout (…) dürfte reichen.

Hi Klaus,
ne das reicht nicht…
Hm, php und echo ?
Sowas?
$sql_einsatzupdate = sprintf(„update einsaetze set pdf_erstellt=1 where einsaetze.einsatz_id=%s“,mysql_escape_string($id));
mysql_query($sql_einsatzupdate);
echo ’ window.onload=function(){
parent.location.href=„test.php“
}
';

Das dann vor der eigentlichen Generierung setzen?
Aber den I-Frame schließn geht doch nur vom Kind-Element, oder?

Weil ich habe Seite test.php
Der link in dieser Seite öffnet das Psyeudopopup. In dem Popup wähle ich aus, wie das pdf generiert werden soll. Und dann schicke ich das forumalr im popup ab, reloade die Seite test.php mit der aktualisierten DB-Ausgabe und generiere das pdf in einem neuen Fenster.
Ist nur ein Wert, von daher dürfte es im Extremfall nur 2 Sekunden dauern.

Gruß
Oliver

Lösung Popup Reload der parent seite
Hi Klaus,
ich habe nun für mich eine Lösung gefunden:

function ende()
{
setTimeout( „refresh()“, 2*1000 );

}

function refresh()
{

window.location.href = parent.location.href=‚test.php‘;
}

Macht genau das was es soll.
„Popup“
Auswahl
Submit
Generierung
DB update
Reload

Ein fettes Dankeschön nochmal!!!