CMS4free-Suchfunktion - 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 2Pex (38 Beiträge) am Mittwoch, 5.August.2009, 18:08.
    CMS4free-Suchfunktion

      Ich beschäftige mich z.Z. mit dem CMS4free von H.Fehde.

      In diesem CMS gelingt es H. Fehde Code und Auszeichnung auseinanderzuhalten und bietet darüber hinaus eine kompakte Suite zur Entwicklung und Steuerung einer Website, wobei er alle Möglichkeiten, die baseportal zu bieten hat, offen hält. Bemerkenswert ist, daß er das schon 2004 in die BiB einfließen ließ, aber das ist vielleicht auch jetzt das Problem denn es gab ja den Versionsupdate auf 3.

      Abgesehen davon, daß die Variable _idfnr in _fnr umgetauft werden muß, damit die Navi funktioniert, gibt es aus meiner Sicht nur die Beanstandung, daß bei Nutzung der Suchfunktion auch immer der gesamte programmierte Teil der Seite als Suchresultat mitgeschickt wird. Man kann sich überzeugen:

      http://de3.arteurope.de/cgi-bin/baseportal.pl?htx=/arteurope.de/raumfinder/CMS4free&bei123=1

      Was führt dazu, daß die Maschine die Suchergebnisse in seiner fullsearch-Variable speichert und dann nochmal obligatorisch den Quelltext dazu und dies dann zusammen ausgibt?

      Hier der relevante Teil des scripts:

      if($src ne "")
      {
      ############################################################################################################
      if($bei123 eq "")    # falls noch kein Wert übergeben, dann die Id, wo Rubrik=1
      {my $start="";       # und dann damit die Anzeige starten
      get "Rubrik==1",$D_B;
      $bei123_start=$Id;
      }#--------------------------------------------------------------
      $bei123             =$bei123||$bei123_start;                    # Start-Id, falls nichts gewählt
      $bei123_SITEMAP     =&bei123_makedir($D_B);                     # stellt Inhaltsverzeichnis dar.
      @bei123_ARRAY       =(split ",",$bei123);                       # per URL übergebenene Id-Reihung
      $bei123_ID          =pop(@bei123_ARRAY);                        # Id des jeweiligen Datensatzes
      $bei123_PAGE        =${$d_b{Page}}[${$d_b{_fnr}}{$bei123_ID}];# Name der Seite auslesen
      $bei123_MAINDIR     =&bei123_maindir;                           # Hauptverzeichnisse 
      $bei123_FROMDIR     =&bei123_fromdir;                           # Links übergeordnete Verzeichnissen
      $bei123_SAMEDIR     =&bei123_samedir;                           # Verzeichnisse der gleichen Ebene 
      $bei123_SUBDIR      =&bei123_subdir;                            # Links untergeordneten Verzeichnissen
      $bei123_GETDIR      =\&bei123_getdir;                           # Links zu Verzeichnissen eines Verz.
      $bei123_SUCHFORM    =&bei123_suchform;                          # Sucheingabe-Formular
      $bei123_SUCHRESULT  =&bei123_suchresult;                        # Suchergebnisse
      $bei123_TEXT        =${$d_b{Text}}[${$d_b{_fnr}}{$bei123_ID}];#------ Feld [Text] 
      $bei123_CONTENT     ="out<<EOF;\n$bei123_TEXT\nEOF\n\n";        # Inhalt ausgeben
      $bei123_CMD         =\&bei123_cmd;                              # Buttonfunktion mit Parametern 
      

      ##################################### Subroutinen #########################################################
      ###########################################################################################################
      sub html2text 
      {## entfernt html-tags und gibt nur Text ohne HTML zurück
      my $html=$_[0];
      ($text = $html) =~ s/<(\/|!)?[-.a-zA-Z0-9]*.*?>//g;
      return($text);
      }##
      

      sub bei123_cmd
      {## generiert Button für bp-Systemaufruf auf der aktuellen Page
      my $val   =$_[0]; # submit value
      my $tit   =$_[1]; # submit titel 
      my $bcmd  =$_[2]; # action cmd
      my $click ="";
      if(index($bcmd,"confirm=on") >= 0)
      {$click="onclick=\"return confirm('$val : $tit')\"";
      }
      my $lb="<table cellpadding=0 cellspacing=0 border=0><tr>"; 
      $lb.="<form action='$_link&bei123=$bei123_SHOW{$bei123_ID}&$bcmd'";
      $lb.=" method='post' enctype='multipart/form-data'>";
      $lb.="<input type='hidden' name='htx=' value='$htx'>";
      $lb.="<td><input type='submit' value='$val' style='$button_style' title='$tit' $click>";
      $lb.="</td></tr></form></table>";
      return($lb);
      }##
      

      sub bei123_suchform
      {##
      my $sf="<table width='100' cellpadding=0 cellspacing=0><tr>";
      $sf.="<form action='$_link&bei123=$bei123_SHOW{$bei123_SUCHE}'";
      $sf.=" method='post' enctype='multipart/form-data'>";
      $sf.="<input type='hidden' name='htx=' value='$htx'>";
      $sf.="<td><input type='text' size=16 name='_fullsearch~~'"; 
      $sf.=" value='$_fullsearch' style='font-size:10px'></td>";
      $sf.="<td><input type='submit' value='Suche' style='$button_style'";
      $sf.=" title='- Volltextsuche -'></td></tr></form></table>";
      return($sf);
      }##
      

      sub bei123_suchresult
      {## generert die Ausgabe der Suchergebnisse 
      my $sr="";
      if($_fullsearch eq "")
      {$sr="Es wurde kein Suchbegriff eingegeben";
      return($sr);
      } else
      {
      $sr.="<li type=square><b>Suchergebnisse</b> Ihrer Volltextsuche:</li>";
      $sr.="<table width=100%><tr><td>";
      get "fullsearch_sort=Page", "$D_B";
      my $newrange="";
      #my $txt;
      while(get_next("$D_B"))
      {#---------------------------------------------------------------------------------
       $Text=~ /\$bei123_LINE/;   # Text bis zur ersten LINE ausgeben      
       $Text=$`;
       $Text  =~ s#$_fullsearch_regex#<b><font color=red>$1</font></b>#g;
       $Page  =~ s#$_fullsearch_regex#<b><font color=red>$1</font></b>#g;
       $sr.="<b><a href='$_link&bei123=$bei123_SHOW{$Id}'>$Page</a></b><br>$Text<br><br>";
      }#----------------------------------------------------------------------- Ende while
      $sr.="</td></tr></table>";
      $newrange=$_fullsearch_range+$_fullsearch_range_length;
      if($_fullsearch_match_pos<$newrange)
      {$txt="Suche nach weiteren Treffern";
      $newrange=$_fullsearch_match_pos; 
      } else
      {$txt="<b>Suche in weiteren Datensätzen</b>";
      }
      if($newrange < $_amount_all)
      {$sr.="<font face=Arial size=2 color=red>Es wurde noch nicht in allen Datensätzen gesucht:</font> ";
      $sr.="<a href=\"$_link&bei123={$bei123_ID}&_fullsearch~~".convert_url($_fullsearch)."&fullsearch_range=$newrange,$_fullsearch_range_length&weiterer=weiterer\">$txt</a>";
      }else
      {$sr.="<b> ! Die Datenbank wurde komplett durchsucht.</b>";
      $sr.="<b>Kein $weiterer Treffer.</b><p>" if $_fullsearch_amount<1;
      }
      return($sr);
      }
      

      }##


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von 2Pex (38 Beiträge) am Mittwoch, 5.August.2009, 18:08.
    CMS4free-Suchfunktion

      Ich beschäftige mich z.Z. mit dem CMS4free von H.Fehde.

      In diesem CMS gelingt es H. Fehde Code und Auszeichnung auseinanderzuhalten und bietet darüber hinaus eine kompakte Suite zur Entwicklung und Steuerung einer Website, wobei er alle Möglichkeiten, die baseportal zu bieten hat, offen hält. Bemerkenswert ist, daß er das schon 2004 in die BiB einfließen ließ, aber das ist vielleicht auch jetzt das Problem denn es gab ja den Versionsupdate auf 3.

      Abgesehen davon, daß die Variable _idfnr in _fnr umgetauft werden muß, damit die Navi funktioniert, gibt es aus meiner Sicht nur die Beanstandung, daß bei Nutzung der Suchfunktion auch immer der gesamte programmierte Teil der Seite als Suchresultat mitgeschickt wird. Man kann sich überzeugen:

      http://de3.arteurope.de/cgi-bin/baseportal.pl?htx=/arteurope.de/raumfinder/CMS4free&bei123=1

      Was führt dazu, daß die Maschine die Suchergebnisse in seiner fullsearch-Variable speichert und dann nochmal obligatorisch den Quelltext dazu und dies dann zusammen ausgibt?

      Hier der relevante Teil des scripts:

      if($src ne "")
      {
      ############################################################################################################
      if($bei123 eq "")    # falls noch kein Wert übergeben, dann die Id, wo Rubrik=1
      {my $start="";       # und dann damit die Anzeige starten
      get "Rubrik==1",$D_B;
      $bei123_start=$Id;
      }#--------------------------------------------------------------
      $bei123             =$bei123||$bei123_start;                    # Start-Id, falls nichts gewählt
      $bei123_SITEMAP     =&bei123_makedir($D_B);                     # stellt Inhaltsverzeichnis dar.
      @bei123_ARRAY       =(split ",",$bei123);                       # per URL übergebenene Id-Reihung
      $bei123_ID          =pop(@bei123_ARRAY);                        # Id des jeweiligen Datensatzes
      $bei123_PAGE        =${$d_b{Page}}[${$d_b{_fnr}}{$bei123_ID}];# Name der Seite auslesen
      $bei123_MAINDIR     =&bei123_maindir;                           # Hauptverzeichnisse 
      $bei123_FROMDIR     =&bei123_fromdir;                           # Links übergeordnete Verzeichnissen
      $bei123_SAMEDIR     =&bei123_samedir;                           # Verzeichnisse der gleichen Ebene 
      $bei123_SUBDIR      =&bei123_subdir;                            # Links untergeordneten Verzeichnissen
      $bei123_GETDIR      =\&bei123_getdir;                           # Links zu Verzeichnissen eines Verz.
      $bei123_SUCHFORM    =&bei123_suchform;                          # Sucheingabe-Formular
      $bei123_SUCHRESULT  =&bei123_suchresult;                        # Suchergebnisse
      $bei123_TEXT        =${$d_b{Text}}[${$d_b{_fnr}}{$bei123_ID}];#------ Feld [Text] 
      $bei123_CONTENT     ="out<<EOF;\n$bei123_TEXT\nEOF\n\n";        # Inhalt ausgeben
      $bei123_CMD         =\&bei123_cmd;                              # Buttonfunktion mit Parametern 
      

      ##################################### Subroutinen #########################################################
      ###########################################################################################################
      sub html2text 
      {## entfernt html-tags und gibt nur Text ohne HTML zurück
      my $html=$_[0];
      ($text = $html) =~ s/<(\/|!)?[-.a-zA-Z0-9]*.*?>//g;
      return($text);
      }##
      

      sub bei123_cmd
      {## generiert Button für bp-Systemaufruf auf der aktuellen Page
      my $val   =$_[0]; # submit value
      my $tit   =$_[1]; # submit titel 
      my $bcmd  =$_[2]; # action cmd
      my $click ="";
      if(index($bcmd,"confirm=on") >= 0)
      {$click="onclick=\"return confirm('$val : $tit')\"";
      }
      my $lb="<table cellpadding=0 cellspacing=0 border=0><tr>"; 
      $lb.="<form action='$_link&bei123=$bei123_SHOW{$bei123_ID}&$bcmd'";
      $lb.=" method='post' enctype='multipart/form-data'>";
      $lb.="<input type='hidden' name='htx=' value='$htx'>";
      $lb.="<td><input type='submit' value='$val' style='$button_style' title='$tit' $click>";
      $lb.="</td></tr></form></table>";
      return($lb);
      }##
      

      sub bei123_suchform
      {##
      my $sf="<table width='100' cellpadding=0 cellspacing=0><tr>";
      $sf.="<form action='$_link&bei123=$bei123_SHOW{$bei123_SUCHE}'";
      $sf.=" method='post' enctype='multipart/form-data'>";
      $sf.="<input type='hidden' name='htx=' value='$htx'>";
      $sf.="<td><input type='text' size=16 name='_fullsearch~~'"; 
      $sf.=" value='$_fullsearch' style='font-size:10px'></td>";
      $sf.="<td><input type='submit' value='Suche' style='$button_style'";
      $sf.=" title='- Volltextsuche -'></td></tr></form></table>";
      return($sf);
      }##
      

      sub bei123_suchresult
      {## generert die Ausgabe der Suchergebnisse 
      my $sr="";
      if($_fullsearch eq "")
      {$sr="Es wurde kein Suchbegriff eingegeben";
      return($sr);
      } else
      {
      $sr.="<li type=square><b>Suchergebnisse</b> Ihrer Volltextsuche:</li>";
      $sr.="<table width=100%><tr><td>";
      get "fullsearch_sort=Page", "$D_B";
      my $newrange="";
      #my $txt;
      while(get_next("$D_B"))
      {#---------------------------------------------------------------------------------
       $Text=~ /\$bei123_LINE/;   # Text bis zur ersten LINE ausgeben      
       $Text=$`;
       $Text  =~ s#$_fullsearch_regex#<b><font color=red>$1</font></b>#g;
       $Page  =~ s#$_fullsearch_regex#<b><font color=red>$1</font></b>#g;
       $sr.="<b><a href='$_link&bei123=$bei123_SHOW{$Id}'>$Page</a></b><br>$Text<br><br>";
      }#----------------------------------------------------------------------- Ende while
      $sr.="</td></tr></table>";
      $newrange=$_fullsearch_range+$_fullsearch_range_length;
      if($_fullsearch_match_pos<$newrange)
      {$txt="Suche nach weiteren Treffern";
      $newrange=$_fullsearch_match_pos; 
      } else
      {$txt="<b>Suche in weiteren Datensätzen</b>";
      }
      if($newrange < $_amount_all)
      {$sr.="<font face=Arial size=2 color=red>Es wurde noch nicht in allen Datensätzen gesucht:</font> ";
      $sr.="<a href=\"$_link&bei123={$bei123_ID}&_fullsearch~~".convert_url($_fullsearch)."&fullsearch_range=$newrange,$_fullsearch_range_length&weiterer=weiterer\">$txt</a>";
      }else
      {$sr.="<b> ! Die Datenbank wurde komplett durchsucht.</b>";
      $sr.="<b>Kein $weiterer Treffer.</b><p>" if $_fullsearch_amount<1;
      }
      return($sr);
      }
      

      }##

     Antworten

    Beitrag von Claus (4645 Beiträge) am Mittwoch, 5.August.2009, 19:53.
    Re: CMS4free-Suchfunktion

      Hallo Frank,

      hatte ich Dir schon in meinem ersten Beitrag zum Thema geschrieben:

      http://forum.baseportal.de/baseportal/baseportal/forum&wcheck=1&Pos=15041.001

      Das läuft dann über die Perl-Funktion "index" und da kannst Du explizit die Felder angegeben, in denen überhaupt gesucht wird/werden darf.

      Gruesse

      Claus

      PS: bevor man Datenbanken doppelt mit unterschiedlichen Inhalten erstellt und somit Ressourcen verplempert, ist das imho die bessere Variante...

     Antworten

    Beitrag von Sander (8133 Beiträge) am Mittwoch, 5.August.2009, 21:02.
    Re: Re: CMS4free-Suchfunktion

      ah, aber alle DS zu holen und mit index zu suchen ist keine Ressource verplempern - na du weißt bescheid...
      Ich schrieb ihm, die Variante mit dem wenigsten Aufwand - soll ich das buchstabieren? "W E N I G S T E N"

     Antworten

    Beitrag von Frank (474 Beiträge) am Donnerstag, 6.August.2009, 08:29.
    Re: Re: Re: CMS4free-Suchfunktion

      Das ist nun etwas anderes als der Thread 'Quellcode in Volltextsuche', denn ich habe mir das ganze Teil nochmal aus der Bib geladen und nun erstmal überhaupt geschaut, ob es funktioniert. Ich habe also in keines der Felder Quellcode eingetragen. Allerdings, um die Suchfunktion anzuwerfen muß die im Script definierte Variable §bei123_SUCHRESULT in eine Seite namens Volltextsuche (kann man änderm) in das Textfeld eingetragen werden.

      Nun passiert folgendes:
      Gefundene Einträge werden als Link auf der Seite Volltext aufgelistet und zusätzlich wird das gesamte Script, also nicht nur die Subroutine
      sub bei123_suchresult (und das wäre schon unerklärlich)
      
      in die Ausgabe geschrieben. Und das muß ja irgendwo so angegeben sein.

      Wenn nichts gefunden wird kommt einfach nuir die Meldung

      # Suchergebnisse Ihrer Volltextsuche:
      
      ! Die Datenbank wurde komplett durchsucht.Kein Treffer.

      Wie es ja auch sein soll.
      Wenn Einträge gefunden werden kommt nach dem ersten Treffer das gesamte Script und dahinter dann die anderen gefundenen Einträge.
      Sind weitere Einträge vorhanden

      Suche nach weiteren Treffern

      dann passiert wieder das selbe. Nach dem ersten weiteren Treffer wird das Script ausgegeben.
      Die Demo aus der Bib funktioniert einwandfrei.

      Ich sehe nicht, wo das gesamte Script in fullsearch eingeladen wird. Die Funktion iterriert doch nur über die Datenbank und dort ist dieses Script nicht vorhanden, es sei denn es ist mit in der Variable bei123_SUCHRESULT eingeflossen. Aber wo nur?


      sub bei123_suchresult 
      {## generert die Ausgabe der Suchergebnisse 
      my $sr="";
      if($_fullsearch eq "")
      {$sr="Es wurde kein Suchbegriff eingegeben";
      return($sr);
      } else
      {
      $sr.="<li type=square><b>Suchergebnisse</b> Ihrer Volltextsuche:</li>";
      $sr.="<table width=100%><tr><td>";
      get "fullsearch_sort=Page", "$D_B";
      my $newrange="";
      my $txt;
      while(get_next("$D_B"))
      {#---------------------------------------------------------------------------------
       $Text=~ /\$bei123_LINE/;   # Text bis zur ersten LINE ausgeben      
       $Text=$`;
       $Text  =~ s#$_fullsearch_regex#<b><font color=red>$1</font></b>#g;
       $Page  =~ s#$_fullsearch_regex#<b><font color=red>$1</font></b>#g;
       $sr.="<b><a href='$_link&bei123=$bei123_SHOW{$Id}'>$Page</a></b><br>$Text<br><br>";
      

      usw.

      Wäre es so, daß die Variable $bei123_SUCHRESULT als Code mit ausgegeben würde, weil sie ja in der Datenbank in ein Textfeld eingetragen ist, bleibt also immer noch die Frage
      Warum aber das ganze Script? Wo wird es eingeladen??

     Antworten

    Beitrag von Frank (474 Beiträge) am Donnerstag, 6.August.2009, 17:55.
    Re: Re: Re: Re: CMS4free-Suchfunktion

      Es ist die letzte Zeile vom o.g. Scriptauszug

       $sr.="<b><a href='$_link&bei123=$bei123_SHOW{$Id}'>$Page</a></b><br>$Text<br><br>";
      

      Nimmt man einfach $Text raus, werden nur noch die Seitennamen hier:Page als Link ausgegeben.
      Gefunden wird natürlich alles, was in der Datenbank steht, ist dort Code eingegeben, wird dies natürlich auch gefunden und der Seitenname $Page als Link aausgegeben.

      Eine einfache interessant Technik besteht nun darin ein Trennobjekt zu kreieren. Fehde nutzt dazu eine Linie <hr> die in der Variable $bei123LINE gespeichert ist. Mit der Scriptzeile:

      $Text=~ /\$bei123_LINE/;   # Text bis zur ersten LINE ausgeben  
      

      umgeht er nun die Vollausgabe des Textes. Dazu trägt er in das Datenbankfeld 'Text' vor seinen ScriptCode diese Variable $bei123LINE ein. Es sollte keine Codezeile mehr ausgegeben werden, denn die Ausgabe stoppt ja an der LINE. Dies funktioniert bei mir allerdings nicht richtig, es wird zu jedem gefundenen Eintrag nochmal das gesamte Programmscript ausgegeben, auch wenn ich zuvor, statt in das Feld zu scripten, dies im Programmscript als Funktion/subroutine eintrage, dazu dann eine Variable definiere, die dieses script beinhaltet und nun nur diese Variable in das Datenbankfeld eintrage.

      z.B.

      Geben Sie in das Suchfeld ihren Text ein<br>
      $bei123LINE <br>
      $bei123_SUCHRESULT
      

      Gut gedacht und in der Demo funktioniert es einwandfrei, aber nicht bei mir. Wenn ich allerdings noch ein anderes Feld in die Datenbank aufnehme, z,B. 'Name' kann ich die Zeile abändern in:

       $sr.="<b><a href='$_link&bei123=$bei123_SHOW{$Id}'>$Page</a></b><br>$Name<br><br>";
      

      Nun erscheint auch kein Code mehr in der Suchausgabe, jedenfalls nicht, wenn weder das Feld Page noch das Feld Name Code beinhalten. Als Ausgabe erscheint der Seitenname (also, das was in Page eingetragen wurde) und, wenn vorhanden, das was in 'Name' eingetragen wurde.

      Und nun kommt der Lösungsansatz von Claus aus dem Thread 'Quellcode in der Volltextausgabe' Mit der Perl-Funktion index lassen sich gezielt die Felder einer Datenbank abfragen. So könnte man ein Feld für Code in die DB aufnehmen und das Textfeld nur für Text benutzen, die Suche mit der Index-Funktion läßt man dann über alle relevanten Felder laufen und schließt so das Feld mit Scriptcodierungen von der Suche aus. Wie index funktioniert ist hier gut erklärt:

      http://www.meb.uni-bonn.de/html_tutorial/teck.htm

      Fehde, der Idee eines vollflexiblen CMS verbunden, hatte natürlich auch das Problem mit der Codeausgabe und so entwarf er schon 2001 das Scriptbeispiel in der Bib unter dem Titel

       Eine Volltext-Suche mit der Perl-Funktion [index] 
      

      Und das schau ich mir bei Gelegenheit mal an.

     Antworten


     
 Liste der Einträge von 7950 bis 8100: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.41s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!