Ingolf: Beschreibung zu kryptischen Statements gesucht

Hallo,
kann mir jemand eine einfache, deutsche Dokumention nennen,
wo nachfolgendes erläutert wird?

print $query->header();
    print $query->start_html({"title" => $title, "bgcolor" => "#bbccdd"});
    print $query->h2($title);
    print $query->start_form({"method" => "post"});
    print $query->start_table();
    print $query->Tr($query->td({"align" => "right"}, "Benutzer:"),
                 $query->td($query->textfield({"name" => "userid"})));
    print $query->Tr($query->td({"align" => "right"}, "Passwort:"),
                 $query->td($query->password_field({"name" => "password"})));
    print $query->end_table();
    print $query->p($query->submit({"name" => "new", "value" => "anmelden"}));
    print $query->end_form();
    print $query->end_html();

Mit höflichem Dank
Ingolf

  1. Hallo Ingolf,

    kann mir jemand eine einfache, deutsche Dokumention nennen,
    wo nachfolgendes erläutert wird?

      
    
    >     print $query->header();  
    >     print $query->start_html({"title" => $title, "bgcolor" => "#bbccdd"});  
    >     print $query->h2($title);  
    
    # [...]  
    
    

    sieht nach Benutzung des CGI-Moduls aus.
    Wie wäre es mit SELFHTML, <http://de.selfhtml.org/perl/module/cgi.htm@title=Modul CGI: Funktionen für die CGI-Programmierung>?

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz,
      das ist es, danke.
      Gruß
      Ingolf

    2. Hallo Vinzenz,
      ich habe mir das Dokument mal angeschaut, dabei ist mir folgendes aufgefallen.

      Es steht dort:

      Mit der Anweisung: $cgi->hr({-noshade => undef, -size => '1'}) wird der HTML-Code <hr noshade size="1"> erzeugt. Das Argument, das der Methode übergeben wird, muss dazu in geschweiften Klammern { bzw. } stehen.

      Weiter unten:

        
      ...  
            $cgi->start_html(-title  =>'Testseite mit Link',  
                             -author =>'beispiel@example.org',  
                             -base   =>'true',  
       .....  
                             -ALINK  =>'black'),  
            $cgi->p('ein kleiner Test mit einem ',  
                    $cgi->a({-href => 'http://www.selfhtml.org/'},'Link auf selfhtml.org')),  
      ......  
      
      

      Warum muss in
      $cgi->start_html(-title  =>'Testseite mit Link',..
                nicht auch die geschweifte Klammer verwendet werden, also
      $cgi->start_html({-title  =>'Testseite mit Link',...

      Gruß
      Ingolf

      1. Hallo Vinzenz,

        naje, ich will ja auch mal was sagen ;-)

        Warum muss in
        $cgi->start_html(-title  =>'Testseite mit Link',..
                  nicht auch die geschweifte Klammer verwendet werden, also
        $cgi->start_html({-title  =>'Testseite mit Link',...

        Von 'müssen' ist keine Rede. Das kannst Du halten wie Du möchtest: Du kannst Die Schweifies auch weglassen.

        Hotte

        1. Hallo Hotte,
          gehe ich recht in der Annahme, dass dann die Beschreibung in SELFHTML falsch ist?
          Gruß
          Ingolf

          1. Hallo Hotte,

            na also ;-)

            gehe ich recht in der Annahme, dass dann die Beschreibung in SELFHTML falsch ist?

            Nein.

            Erläuterung: Die geschweiften Klammern im Argument kannst Du verwenden, um Dir im Code selbst vor Augen zu führen, dass da ein hash im Spiel ist.

            Das ist ungefähr so wie die Verwendung der return() Funktion mit oder ohne Klammern

            return $foo; # ok, das geht
            return($bar); # au gud

            Oder print "helo Tom"; print("Hallo Du Harzer Schluchtenjodler");

            Ok, ich schweife ab...

            Hotti

            1. Hallo Hotte,

              gehe ich recht in der Annahme, dass dann die Beschreibung in SELFHTML falsch ist?

              Nein.

              Wenn aber dort "muss" steht heißt dies doch "muss"!
              Oder verwendet SELFHTML eine andere deutsche Syntax/Grammatik?
              Gruß
              Ingolf

              1. Wenn aber dort "muss" steht heißt dies doch "muss"!

                heißt es auch. Wobei der vorletzte Absatz dort falsch ist:

                Die Methoden zum Erzeugen von HTML-Elementen können auch mehrere Argumente übergeben bekommen. Dabei müssen Sie die Argumente durch Kommata trennen. Ein komplexeres Beispiel sehen Sie an der letzten $cgi->p(...)-Anweisung. Dieser Methodenaufruf übergibt drei Argumente. Das erste Argument ist ein Attribut für das einleitende <p>-Tag, nämlich ein style-Attribut, in dem die Schriftfarbe rot bestimmt wird. Das zweite Argument ist statischer Text, und das dritte Argument ...

                Alle Parameter, ab dem zweiten werden einfach verknüpft, es ist also keine weitere Möglichkeit sondern einfach eine Stringverknüpfung.

                Struppi.

        2. Warum muss in
          $cgi->start_html(-title  =>'Testseite mit Link',..
                    nicht auch die geschweifte Klammer verwendet werden, also
          $cgi->start_html({-title  =>'Testseite mit Link',...

          Von 'müssen' ist keine Rede. Das kannst Du halten wie Du möchtest: Du kannst Die Schweifies auch weglassen.

          In dem Fall schon in dem anderen nicht.

          Struppi.

          1. hi,

            Von 'müssen' ist keine Rede. Das kannst Du halten wie Du möchtest: Du kannst Die Schweifies auch weglassen.

            In dem Fall schon in dem anderen nicht.

            Mist. Hab nur den einen Fall getestet...

            Hotte

            --
            Wenn etwas schiefgehen kann, geht es schief.
      2. Hallo

        ich habe mir das Dokument mal angeschaut, dabei ist mir folgendes aufgefallen.

        Es steht dort:

        Mit der Anweisung: $cgi->hr({-noshade => undef, -size => '1'}) wird der HTML-Code <hr noshade size="1"> erzeugt. Das Argument, das der Methode übergeben wird, muss dazu in geschweiften Klammern { bzw. } stehen.

        soweit ich die Dokumentation des Moduls verstehe (Perl ist nicht meine Lieblingssprache) ist SELFHTML hier etwas ungenau:
        Wenn das *erste* Argument ein Hash ist (d.h. in geschweiften Klammern steht), dann werden die Schlüssel-Werte-Paare des Hashes die Attribute des Elementes.

        Weiter unten:

        ...
              $cgi->start_html(-title  =>'Testseite mit Link',
                               -author =>'beispiel@example.org',
                               -base   =>'true',
        .....
                               -ALINK  =>'black'),

        -title wird das <title>-Element

        -author, ... zu den entsprechenden Metatags

        $cgi->p('ein kleiner Test mit einem ',
                      $cgi->a({-href => 'http://www.selfhtml.org/'},'Link auf selfhtml.org')),

          
        
        > Warum muss in  
        > $cgi->start\_html(-title  =>'Testseite mit Link',..  
        >           nicht auch die geschweifte Klammer verwendet werden, also  
          
        weil dies  
        ~~~html
          
        <html>  
            <title>Testseite mit Link</title>  
        
        

        generieren soll und nicht ...

        $cgi->start_html({-title  =>'Testseite mit Link',...

          
        <html title="Testseite mit Link">  
        
        

        Im Hash können übrigens die Bindestriche für die Attributnamen entfallen.
        Ist der Unterschied jetzt klar?

        Freundliche Grüße

        Vinzenz

        1. Hallo!

          Ist der Unterschied jetzt klar?

          Ja, das habe ich einigermaßen verstanden - muss sich erst noch setzen.
          Den Beitrag von struppi (17:37) habe ich leider nicht kapiert. Muss ich das noch, wenn ich Deinen verstanden habe?
          Freundliche Grüße
          Ingolf

          1. Den Beitrag von struppi (17:37) habe ich leider nicht kapiert. Muss ich das noch, wenn ich Deinen verstanden habe?

            Eigentlich schon. Was hast du den nicht kapiert?

            Es gibt einen Unterschied zwischen den Funktionen die HTML Elemente erzeugen und anderen Hilfsfunktionen wie z.b. start_html

            Wenn du HTML Elemente erzeugst mit CGI::p() oder CGI::div() usw. dann muss der erste Parameter eine Hashreferenz sein, wenn du Attribute übergeben willst. Alle weiteren ist der Inhalt.

            Bei den Hilfsfunktionen darfst du keine Hashreferenz übergeben, sondern musst mit der Schreibweise -attribut => 'wert' arbeiten oder die Parameter in einer definierten Reihenfolge übergeben.

            Struppi.

            1. Hallo struppi,
              jetzt habe ich es zwar kapiert, fürchte aber, da ich mich mit dem Thema nicht laufend beschäftige, es in einem Jahr wieder vergessen zu haben.
              Habe mir aber den Thread schon mal auf meinem Rechner gesichert in der Hoffnung, ihn auch wiederzufinden.
              Danke
              Ingolf

      3. Warum muss in
        $cgi->start_html(-title  =>'Testseite mit Link',..
                  nicht auch die geschweifte Klammer verwendet werden, also
        $cgi->start_html({-title  =>'Testseite mit Link',...

        Wenn du dem HTML Element, das du erzeugen willst Attribute übergeben willst, musst du eine Hashreferenz übergeben, bei Funktionen des CGI Moduls, ist dies nicht nötig. Der Punkt ist, dass normalerweise Elemente einen Inhalt haben können und um dies einfacher zu realisieren ist der Autor diesen weg gegangen, wenn der 1. Parameter ein Hash ist, dann stehen dort die Attribute und der zweite ist der Inhalt.

        print CGI::p({-attribut => 'wert'}, 'text');  
        <p attribut="wert">text</p>  
        
        

        Bei Funktionen des CGI Modules, die kein HTML Element erzeugen, bzw als Synonym für eines stehen, kannst du mit -attribut => 'wert' Parameter übergeben oder die Parameter in einer definierten Reihenfolge übergeben (so wie ie in der Doku stehen ).

        Struppi.