Popup und PHP - ein unmögliches Unterfangen?

  • Hallihallo, ich habe mir mal wieder iene nacht um die Ohren geschlagen um folgendes zu realisieren:


    Die Seite http://www.grizzly-adams.de/index.php ist mithilfe von include-Befehlen zusammengebaut. Die Boxen links und rechts werden per include eingefügt, der Content wird mittels eines "Switch-case" Dingens (wie immer es auch heißt :-)) eingelesen.


    Nun will ich bei Aufruf der o.g. Seite ein Popup schalten, das stellt sich allerdings als unmöglich raus: Wenn ich den mir bekannten Befehl "onload" an den Bodytag hänge (Das Javascript:

    PHP
    1. <script language="JavaScript" type="text/JavaScript">
    2. <!--
    3. function MM_openBrWindow(theURL,winName,features) { //v2.0
    4. window.open(theURL,winName,features);
    5. }
    6. //-->
    7. </script>

    in den head-Bereich, der endgültige Aufruf per "Onload" an den Bodytag gehängt),
    wird das Popup bei jedem Linkaufruf innerhalb der Startseite neu geöffnet, da die Seite durch die Includebefehle jedesmal neu generiert wird (ich denke mal dass es daran liegt)
    Gibt es irgendwie (mit PHP) die Möglichkeit, das benötigte Popup nur einmal aufzurufen, und zwar nur wenn die o.g. Startseite aufgerufen wird, wenn darin Unterseiten geöffnet werden allerdings nicht noch einmal?


    Ich hoffe ihr versteht ungefähr was ich meine, notfalls baue ich das sich immer wieder öffnende Popup mal fix ein.


    Danke :-)

  • Du übergibst doch sicher per URL einen Parameter, der dem Script sagt, welches Content-Stück es einbinden soll ("?page=start" oder so).


    Dort, wo das onload-Attribut in den <body>-Tag geschrieben wird, überprüfst du einfach, ob beim aktuellen Aufruf die Startseite eingebunden wird und fügst den Event-Handler nur ein, wenn das der Fall ist.


    Das sollte ungefähr so aussehen:


    HTML
    1. <body <?php if ($_GET['page'] == 'start') echo 'onload="MM_openBrWindow(theURL,winName,features);" '?>>
    2. ...
  • Öhhhm, nun kommen wir zum peinlichen Teil: Das ganze Switch-Dings hab ich leider nie wirklich verstanden, das habe ich aus der Hilfe hier im Forum irgendwie zusammengstoppelt (nochmal Dank an alle geduldigen Beteiligten).
    Das Konstrukt ist folgendermaßen aufgebaut:

    PHP
    1. <?php switch ($_REQUEST['action'])
    2. {
    3. case 'geschichte': include("content/geschichte.php"); break;
    4. --- etwas gekürzt, da an sich nicht relevant---
    5. case 'home': include("index.php"); break;
    6. default: include("news.php"); break;}
    7. ?>


    Also wird im Falle "Default" immer die Newsseite angezeigt, genau bei deren Aufruf (eben wenn man die Gesamtseite erstmals aufruft) soll einmal das Popup angezeigt werden.
    Anhand des momentanen Aufbaus kann ich keine übergebenen Parameter erkennen. Wie müsse es denn im Defaultfall lauten?


    Danke

  • Der Zweig 'default' wird ausgeführt, wenn garnichts angegeben wurde, d.h. wenn $_REQUEST['action'] nicht existiert.


    Du willst das "onload" also immer dann schreiben, wenn $_REQUEST['action'] leer ist. Hier nochmal der Code dafür, diesmal der Übersicht halber komplett in PHP:


  • Ich habe nun diverse Möglichkeiten ausprobiert, aber da poppt einfach nix :-(
    Ich weiß wohl nicht genau wie/ wo ich den Tag einzubauen habe. Vereinzelt bekomme ich auch ´nen JS-Fehler, was wohl mit dem Javascript auf der Startseite zu tun hat.
    Im Head habe ich nach wie vor folgendes:
    <script language="JavaScript" type="text/JavaScript">
    <!--
    function MM_openBrWindow(theURL,winName,features) { //v2.0
    window.open(theURL,winName,features);
    }
    //-->
    </script>


    und dann kommt irgendwan das <body>. Wo muss ich nun das

    PHP
    1. <?php
    2. echo '<body';
    3. if ($_REQUEST['action'] == '')
    4. {
    5. echo ' onload="MM_openBrWindow(http://www.grizzly-adams.de/flyer.htm','width=450,height=500);"';
    6. }
    7. echo '>';
    8. ?>


    einbauen? Anstatt des Body-Tags? Vor der Endklammer desselben? Sorry, ich schnall das ganze nicht wirklich :-)

  • Wenn ich dies tue steht unten am Bildschirmrand "Fertig, es sind Fehler auf der Seite aufgetreten" und es poppt immer noch nix. Irgendwie scheint es den (leider wichtigen) Java-Newsticker auf der Seite zu deaktivieren. Es haut einfach nicht hin.
    Ich bin wohl zu doof heute :-(

  • Diese Änderung sollte an deinem HTML-Dokument überhaupt nichts ändern, bis auf dass das "onload=..." mal eingebunden wird und mal nicht. Auf andere JS-Funktionen hat die Änderung nur dann Einfluss, wenn diese auch mit dem "onload" zusammenhängen (direkt oder indirekt über die aufgerufene Funktion).


    Öffne die Seite mal mit Mozilla Firefox und schau dir in der Javascript-Konsole (unter "Tools") die Fehlermeldungen an. Die sind sehr, sehr, sehr, sehr viel aufschlussreicher als die JS-Fehlermeldungen des Internet Explorer und helfen mit Sicherheit, den Fehler zu finden.

  • Sind die Argumente wirklich nicht in Anführungsstriche gefasst oder hast du das nur für das Posting aus irgendwelchen Gründen weggelassen?


    Wenn ja, setz die mal wieder dazu.

  • Nee, ich lasse da nix weg. ich kopiere den Quelltext direkt hier rein.
    Fehler: missing ) after argument list
    Quelltext:
    MM_openBrWindow(http://www.grizzly-adams.de/flyer.htm, width=450,height=500);
    Das ist das was mir Mozilla sagt, ohne jegliche Änderung. Ansonsten habe ich auch nur das PHP-Script von dir in den Quelltext kopiert, ich habe nur diese Zeile
    echo ' onload="MM_openBrWindow(theURL,winName,features);"';
    geändert in
    echo ' onload="MM_openBrWindow(http://www.grizzly-adams.de/fl…lyer,width=450,height=500);"';


    Wenn ich den onload-Befehl so schreibe, wie er von Dreamweaver automatisch eingesetzt wird ( onload="MM_openBrWindow('http://www.grizzly-adams.de/flyer.htm','Sonderzugflyer','width=450,height=500')
    - eben das was in (theUrl,winName,features) in Anführungszeichen steht setze, bekomme ich den "Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in /www/htdocs/v082201/index.php on line 20"
    Das waren also die einzigen Anführungszeichen die ich weggemacht habe.


    Irgendwas haut dennoch nicht hin. So langsam mag ich aber auch nicht mehr...

  • Richtig :).


    Und schau dir mal an, was SkaTeR gemacht hat.


    Das Stichwort heißt Maskieren der Anführungszeichen:
    Wenn in Programmcode (egal ob JS, PHP oder irgendwas anderes) Anführungsstriche (doppelte oder einfache) als Bestandzeil einer Zeichenkette ("String") vorkommen, die von der gleichen Sorte Anführungsstriche eingefasst wird (z.B. $text = "Er sagte "Hallo" zu mir" oder $text = 'Er sagte 'Hallo' zu mir', geht ansich beides), dann müssten vor die Anfühungsstriche innerhalb des Strings Backslash-Zeichen -> \ gesetzt werden.



    Andernfalls versteht der Computer diese inneren Anführungsstrich als Ende des Strings, bemerkt, dass die folgenden Zeichen (welche ja nach dem Sinn des Programmierers weiter zum String gehören) nach den grammatischen Regeln der Programmiersprache ("Syntax") hinter einer Stringangabe nicht erlaubt sind und beschwert sich mit einer Fehlermeldung.

  • Yeah, ein Highlight beim Frühstück: Es poppt endlich :-)
    Das mit den Schrägstrichen vor den Anführungszeichen hatte ich zwar mal gelesen, aber damit nie in Verbindung gebracht. Ich bin begeistert :-)

  • Zitat von Stephanie

    Yeah, ein Highlight beim Frühstück: Es poppt endlich :-)


    Ohne kontext hört es sich so an als ob du auf nachwuchs bei deinen hasen oder so wartest :D

    "Man muss die Welt nicht verstehen, man muss sich nur darin zurechtfinden."
    Einstein