Re: Blättern klappt nicht - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Claus Christmeier (598 Beiträge) am Dienstag, 16.November.2004, 16:15.
    Re: Blättern klappt nicht

      Hallo Thomas,

      probier´s mal so

      <loop code=perl db=Dienstleistungen sort=Bezeichnung range=$v,30>
      
      ...
      $amount_sav = $_amount;
      $amount_query_sav = $_amount_query;
      

      get "Kuerzel_intern==$Kuerzel_intern", "Aemter";
      $Amt = "???" if (!$_amount_query);
      

      $_amount = $amount_sav;
      $_amount_query = $amount_query_sav;
      

      Viel Erfolg.

      Gruß
      Claus


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von Thomas Fedder (333 Beiträge) am Dienstag, 16.November.2004, 14:08.
    Blättern klappt nicht

      Hallo allerseits,

      in einem Code habe ich zwecks Holen von Daten den folgenden Code eingebaut:

      <loop code=perl db=Dienstleistungen sort=Bezeichnung range=$v,30>
      
      ...
      get "Kuerzel_intern==$Kuerzel_intern", "Aemter";
      $Amt = "???" if (!$_amount_query);
      

      ...

      Dieses holt den Inhalt des Feldes $Amt aus der DB Aemter und gibt ihn in dem aktuellen Template aus.

      In diesem Template werden einzelne Datensätze angezeigt.

      Jetzt will ich dieses Template jedoch "durchblättern" (Pro Seite 30 Datensätze)

      Wenn ich die obigen zwei Zeilen rausnehme, kann ich zwar blättern, aber der Inhalt des Feldes $Amt aus der DB Aemter wird nicht geholt.

      Folgender Code dazu:

      <perl>
      $v=$v||0; # Startwert vorgeben, wenn $v leer ist
      </perl>
      

      <loop code=perl db=Dienstleistungen sort=Bezeichnung range=$v,30>
      ...
      ...
      </loop>
      

      ...

      <br>
      <perl>
      my $range=$_range_length;
      my $blaettern=$_range_length;
      my $blaetter_lang=$range*10;
      my $newrange=$_range+$_range_length;
      my $oldrange=$_range-$_range_length;
      my $color='#CCCCCC';
      my $color_vonbis= $farbeblaetter;
      my $color_zahl='#CCCCCC';
      my $color_vorzu='#CCCCCC';
      my $color_balken='#CCCCCC';
      my $table='40%';
      my $table_align='left';
      out "<div align=$table_align>";
      out "<table width=$table cellpadding=1 cellspacing=1 bgcolor=ffffff>
      <tr align=left>
      <td  bgcolor=$color align='left'><font face=verdana, arial font size=1>";
       
      

      $oldrange=0 if $oldrange<0 && $oldrange>-$_range_length;

      out $oldrange>=0?"<a href=\"$_link&v=0\">|<</a>":"|<";
      out "</font></td><td bgcolor=$color align='center'><font face=verdana, arial font size=1>";
      out $oldrange>=0?"<a href=\"$_link&v=$oldrange\"><</a>":"<<";
      out "</font></td><td bgcolor=$color align='center'><font face=verdana, arial font size=1>";
      

      $ende=substr($_amount_query,0,length($_amount_query)-1);
      out $newrange<$_amount_query?"<a href=\"$_link&v=$newrange\">></a>":">>";
      out "</td><td font face=verdana, arial font size=2 bgcolor=$color align='center'><font face=verdana, arial font size=1>";
      out $newrange<$_amount_query?"<a href=\"$_link&v=".($ende."0")."\">>|
      </a>":">|";
      out "</font></td><td bgcolor=$color_vonbis width='200' align='center'><font face=verdana, arial font size=1>Einträge ".($v+1)." bis
      ".(($v+$blaettern)>$_amount_query?"$_amount_query":($v+$blaettern))." von
      $_amount_query</td>";
       
      

      if ($_amount)
      {
      

      $vr=int($v/$blaetter_lang) unless $_range==0;
      $vr=$vr*$blaetter_lang;
      out "<td bgcolor=$color_vorzu align='center'><font face=verdana, arial font size=1><a href=$_link&v=".($vr-$blaetter_lang)."><<</a></td>" if
       
      

      ($vr-$blaetter_lang)>=0;
      for ($i=$vr;$i<($vr+$blaetter_lang<=$_amount_query?($vr+$blaetter_lang):$_amount_query); $i+=$blaettern)
      {
      out "<td bgcolor=$color_zahl align='center'><font face=verdana, arial font size=1>".($v==$i?"<b>".($i+1)."</b>":"<a
      href=$_link&v=$i>".($i+1)."</a>")."</td>";
      }
      out "<td bgcolor=$color_vorzu align='center'><font face=verdana, arial font size=1><a href=$_link&v=$i>>></a></td>" if $i<$_amount_query;
      }
      out "</font></tr></table></div>"; 
      </perl>
      

     Antworten

    Beitrag von Claus Christmeier (598 Beiträge) am Dienstag, 16.November.2004, 16:15.
    Re: Blättern klappt nicht

      Hallo Thomas,

      probier´s mal so

      <loop code=perl db=Dienstleistungen sort=Bezeichnung range=$v,30>
      
      ...
      $amount_sav = $_amount;
      $amount_query_sav = $_amount_query;
      

      get "Kuerzel_intern==$Kuerzel_intern", "Aemter";
      $Amt = "???" if (!$_amount_query);
      

      $_amount = $amount_sav;
      $_amount_query = $amount_query_sav;
      

      Viel Erfolg.

      Gruß
      Claus

     Antworten

    Beitrag von Thomas Fedder, Stadt Ratingen (0 Beiträge) am Dienstag, 16.November.2004, 16:49.
    Re: Blättern klappt nicht

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Dienstag, 16.November.2004, 20:58.
    Re: Blättern klappt nicht

      Hallo Thomas,

      wenn man mehrere Datenbanken in einem Template anspricht, werden die db-spezifischen Variablen (bspw. $_amount, $_amount_query, $_range, $_range_length) immer zum Zeitpunkt des Ansprechens der jeweils neuen bzw. nächsten Datenbank überschrieben. Deshalb muss man bspw. die Blätteranzeige entweder in ne Sub auslagern und da die Parameter zum richtigen Zeitpunkt zwischenspeichern, so ähnlich, wie das CC angerissen hat oder man setzt die Blätterausgabe unmittelbar hinter das get (beim Loop geht das nicht, da das sonst jedesmal ausgeführt würde, und das ist blödsinn), man gibt aber nix aus sondern schreibt die Blättertab in eine Variable, die dann irgendwann mit ausgegeben werden kann (wo sie im HTML-Quelltext hinsoll).

      Ich geb hier mal ausnahmsweise meine angepasste universelle Routine für die Blätterlinks kund - es ist ja eigentlich nicht mehr üblich, dass jemand im Forum komplexe Sachen einfach so für alle zur Nutzung hergibt...ist als kleiner Dank an die bp-Gemeinde zu verstehen...
      Ich versuchs mal so komplett für deinen Zweck wie das theoretisch ohne Testen geht(normalerweise mache ich sowas mittels Include auf ein Template, das noch mehr nützliche Subroutinen u.ä. enthält und mit loop hab ichs überhaupt noch nicht eingesetzt, aber vielleicht verstehst du ja das Prinzip und kannst es ggf. umbauen):

      ---schnipp
      <perl>
      # Vorbelegung wichtiger Variablen
      $fbez ||= "*"; # Filterwert für die Bezeichnung (hier dann eben Anfangsbuchstabe oder alles bei *)
      $ra ||= 0; # Startwert vorgeben, wenn $ra leer ist (referenziert $_range als Überabeparameter an die Sub)
      $ra_l ||= 30; # Anzahl der auszugebenden Datensätze pro Seite (referenziert $_range_length als Übergabeparameter an die Sub
      # Subdefinition, dadurch ist diese dann im ganzen Template bekannt
      sub show_amount{ ################################################################
      $a_debug.= "<b>A sub show_amount(@_)</b><br>";
      # syntax: &show_amount($_range,$_range_length,$_amount,$_amount_query, $bezeich,$flink,$ausricht,$breite);
      # Aufruf unmittelbar dort, wo die DB geholt wird oder aber die System-
      # variablen umspeichern um sie vor Überschreiben zu schützen
      # Parameter $bezeich ist das Wort was drin steht, Voreinstellung "Einträge", ich übergeb unten "Dienstleistungen"
      # Parameter $flink ist die Erweiterung der Links um evtl. Filterkriterien (wäre bei den Buchstaben dann bspw. "&fbezeich=$fbezeich
      # Parameter $ausricht ist die Ausrichtung der Tabelle im div-Container, es ist left,right,center zulässig - voreingestellt ist right (rechts)
      # $breite ist die Breite der Tabelle (normalerweise nicht notwendig)
      my ($_range,$_range_length,$_amount,$_amount_query, $bezeich,$flink,$ausricht,$breite) = @_ ;
      # my ($_range,$_range_length,$_amount,$_amount_query) = @_ ;
      $ausricht ||= "right";
      $bezeich ||= "Einträge";
      $ausrichtung = $ausricht ne "" ? "align='$ausricht'" : "";
      my $breit = $breite == "v" || $breite == "" ? "" : $breite;
      $z_linkzugang ||= "zug=zug"; # Hilfskonstrukt,um Paramterübergabefehler vorzubeugen, wenn $z_linkzugang nicht def.
      my $_link = "$_link&$z_linkzugang&dsn=$dsn";
      $_link .= $flink ne "" ? $flink : "";
      my $range=$_range_length;
      my $blaettern=$_range_length;
      my $blaetter_lang = $range*10;
      my $newrange=$_range+$_range_length;
      my $oldrange=$_range-$_range_length;
      #
      # my $tab_breit = "100%"; # Gesamtbreite der Tabelle
      my $tab_breit = $breit ne "" ? "width=$breit" : ""; # Gesamtbreite der Tabelle
      my $fs_fgh = "#F0F0F0"; # Farbwert für Helle Hintergründe
      my $fs_fg  = "#C0C0C0"; # Farbwert für dunklere Hintergründe
      my $tssk = $tssk eq "" ? "10px" : $tssk; # Schriftgröße, damit das dep. Font-Tag rauskommt
      #
      my $fa = "$fs_fgh";		# Hintergrundfarbe der Zellen mit Links
      my $t_style = "style='font-size:$tssk;'"; # Schriftgrösse
      my $fa = $fs_fgh;
      my $v = $ra eq "" ? 0 : $ra;
      ####
      my ($tab_index,$tab_amount);
      $tab_index =<<EOF;
      <table cellpadding=2 cellspacing=1 $ausrichtung>
      <tr align=left><td width=20px $t_style bgcolor=$fa align=center>
      EOF
      $oldrange = 0 if $oldrange < 0 && $oldrange > -$_range_length;
      $ende = substr($_amount_query,0,length($_amount_query)-1); # 10er zuvor (echt tricky!)
      $ende2 = $_amount_query - $_amount_query % 10;
      ### $_link&$z_link&dsn=$dsn&ra_$db_n=$a_offset&ra_l_$db_n=$ra_l
      $tab_index .= $oldrange >= 0 ? "<a class=klein href=\"$_link&ra=0\">|<</a>" : "|<";
      $tab_index .= "</td><td width=20px $t_style bgcolor=$fa align='center'>";
      $tab_index .= $oldrange >= 0 ? "<a class=klein href=\"$_link&ra=$oldrange\"><</a>":"<<";
      $tab_index .= "</td><td width=20px $t_style bgcolor=$fa align='center'>";
      $tab_index .= $newrange < $_amount_query ? "<a class=klein href=\"$_link&ra=$newrange\">></a>" : ">>";
      $tab_index .= "</td><td width=20px $t_style bgcolor=$fa align='center'>";
      $tab_index .= $newrange < $_amount_query ? "<a class=klein href=\"$_link&ra=".($ende."0")."\">>|
      </a>" : ">|";
      $tab_index .= "</td><td $t_style align='center'> <!--Einträge--> ";
      $tab_index .= $_amount_query == 0 ? "<nobr>Keine $bezeich vorhanden!</nobr>" : "<nobr>$bezeich ".($v+1)." bis
      ".( ($v+$blaettern) > $_amount_query ? "$_amount_query" : ($v+$blaettern) )." von $_amount_query </nobr></td>";
      if ($_amount){
       $vr = int ($v / $blaetter_lang) unless $_range==0;
       $vr = $vr * $blaetter_lang;
       $tab_index .= "<td width=20px $t_style bgcolor=$fa align='center'><a class=klein href=$_link&ra=".($vr-$blaetter_lang)."><<</a></td>" if ($vr-$blaetter_lang) >= 0;
              # . . . . . . . . . . . . . . . . . .
       for ($i=$vr;$i<($vr+$blaetter_lang<=$_amount_query?($vr+$blaetter_lang):$_amount_query); $i+=$blaettern){
       $tab_index .= ($v==$i ? "<td width=20px $t_style bgcolor=$fs_fg align='center'><b>".($i+1)."</b>" : "<td width=20 $t_style bgcolor=$fs_fgh align='center'><a class=klein href=$_link&ra=$i>".($i+1)."</a>")."</td>";
       } # E for
       $tab_index .= "<td width=20px $t_style bgcolor=$fa align='center'><a class=klein href=$_link&ra=$i>>></a></td>" if $i<$_amount_query;
      }
      $tab_index .= "</tr></table>";
      # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -#
      $tab_amount =<<EOF;
      <div align=$ausricht>
       $tab_index
      </div>
      EOF
      $a_debug.= "<b>E sub show_amount</b><br>";
      return $tab_amount;
      #subende#
      } ################################################################
      # jetzt ein Hilfkonstrukt, damit das auch mit dem loop funzt (ich nehme kein loop
      # get-while_get_next ist viel flexibler und genauso einfach zu verwenden wie das loop
      # hab das nicht getestet, hoffe einfach mal, dass es so funzt
      get "Bezeichnung=$fbez range=$ra,1","Dienstleistungen", "hilfsget";
      # hier jetzt die Sub aufrufen mit den richtigen;-) Parametern
      $tab_amount = &show_amount($ra,$ra_l,$_amount,$_amount_query, "Dienstleistungen","","","");
      </perl>
      <loop code=perl db=Dienstleistung sort=Bezeichnung range=$ra,$ra_l>
      

      ...
      get "Kuerzel_intern==$Kuerzel_intern", "Aemter";
      $Amt = "???" if (!$_amount_query);
      
      ....
      </loop>
      <!--Ausgabe Blätterlinks-->
      $tab_amount
      
      --- schnapp

      Besser und unproblematischer funzt das ganze mit get, nur dann hats wieder mit den Filterbedinungen (entweder Suche oder Anfangsbuchstabe) so seinen Schleuder, da muss man dann sinnvoll vorbelegen bzw. den Ausdruck im get sinnvoll wählen. Das würde aber jetzt hier zuweit führen - nur soviel: die Parameterübergabe mittels der Operatoren wie beim loop (bspw. &Bezeichnung~=W) ist hier nicht optimal, ausserdem gehört dieser Parameter dann auch als Parameter mit an die Sub fürs Blättern übergeben.

      Besser wäre m.E. das get auf die richtige Range und dann mit while_get_next die Datensätze ausgeben, worin dann die Relation auf die andere DB mit get in dieser Schleife erfolgt, also in etwa so:
      (ich hab den Parameter für die Bezeichnungssuche per Anfangsbuchstabe mit drin - der Link in der Auswahlreihe muss dann nur noch beim Parameter heissen "&fbez=A" für "A", adäquat für jeden anderen Buchstaben.
      Beim Einsatz von Umlauten und wenn du zufälligerweise Surfer hast, die noch nicht den Firefox 1.0 verwenden (gibts noch solche Ignoranten ;-)) musst du den Term vorher durch convert_url jagen, also bspw.so:
      out "<a href='$_link&fbez='".convert_url("Ü").">Ü</a>";
      
      wobei es hier auch wieder sinnvoll wäre, für die Buchstabenreihe/Register gleich ne Sub zu nutzen, da brauchts das nicht jedesmal neu per Hand zu machen - immerhin hat das Alphabet ja ne ganze Zahl an Buchstaben (warn das nich 26? ;) und noch 3 Umlaute dazu? )
      Nun der Codeschnipsel mit get statt loop und Filter auf die Bezeichnung ( der Teil mit der Sub gehört natürlich vorher wie oben mit rein!):

      ---schnipp
      <perl>
      
      .....
      # Datensätze holen entsprechend der Filterbedingungen
      get "Bezeichnung~=$fbez range=$ra,$ra_l","Dienstleistungen", "holdienstleistungen";
      # hier jetzt die Sub aufrufen mit den richtigen;-) Parametern weil eben die richtige DB aufgerufen wurde
      # aber nur, wenn mehr Datensätze vorh. sind, als max. pro Seite ausgegeben werden (sieht schöner aus)
      if ($_amount_query > $ra_l){
      $tab_amount = &show_amount($_range,$_range_length,$_amount,$_amount_query, "Dienstleistungen","&fbez=$fbez","","");
      } # E if
      while(get_next("holdienstleistungen"){
      out<<EOF;
      
      ...deine Ausgabetabelle bauen...
      ...
      get "Kuerzel_intern==$Kuerzel_intern", "Aemter";
      $Amt = "???" if (!$_amount_query);
      
      ....
      } # E while_get_next (adäquat dem loop, aber schneller weil loop eh get_while_get_next nutzt)
      out $tab_amount; # Ausgabe Blätterlink-Tabelle
      
      ...
      </perl>
      --- schnapp

      Ist alles doch nicht ganz trivial, aber doch auch in den Griff zu bekommen - hoffe ich konnte dir weiterhelfen und hab nicht zuviele Fehler eingebaut in den Quelltext - viel Erfolg und Spaß bei der Lösung ;-)
      (meine Mail hast du ja für alle Fälle...)
      Ruben

     Antworten

    Beitrag von Thomas Fedder (49 Beiträge) am Dienstag, 16.November.2004, 22:01.
    Re: Blättern klappt nicht

      Hallo Ruben,

      vielen Dank für die sehr ausführliche Antwort.
      Werde mich mal einlesen und versuchen, es zu verstehen.

      Danke für die Hilfe

      TF

     Antworten


     
 Liste der Einträge von 27151 bis 27301:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.08s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!