[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Suchfunktion in Xform / Table Manager
Seite 1 von 1

Suchfunktion in Xform / Table Manager

Verfasst: 12. Jun 2016, 11:20
von concon
Hallo!
Vielleicht kann mir ja jemand weiter helfen. Ich habe über den Tabel Manager einen kleinen Produktkatalog erstellt, die Ausgabe über
<?php
$db_table = "rex_medikamente";

$sql = new rex_sql;

$sql->debugsql = 0; //Ausgabe Query

$sql->setQuery("SELECT * FROM $db_table");

for($i=0;$i<$sql->getRows();$i++)
{

echo $sql->getValue("nummer").', '.$sql->getValue("product").'<br/>';
echo $sql->getValue("pharmaceu").'<br/>';
echo $sql->getValue("strenght").'<br/>';
echo $sql->getValue("strenght").'<br/>';
echo $sql->getValue("reference").'<br/>';
echo $sql->getValue("therapeutic").'<br/>';
echo '<hr/>';

$sql->counter++;
}

?>
funktioniert auch wunderbar.

Allerdings möchte ich nun über´s Frontend den Besuchern die Möglichkeit geben, einzelne Artikel über eine Stichwortsuchfunktion suchen zu können. Das würden dann bei der Suche mal ein, es können aber auch mehrere Datensätze sein, erscheinen, wenn vorhanden. Ausgegeben soll jeweils der komplette Datensatz.

Über rexsearch wird zwar gefunden, aber das nützt mir ja nichts, da das nur Auschnitte des datensatzes inkl. dem Stichwortanzeigt. Rexsearch für meine Geschichte so also nicht geeignet. Ich suche eine Möglichkeit, direkt in der Datenbank "rex_medikamente" suchen zu können. Leier konnte ich dazu auch hier im Forum nichts finden. Und meine Versuche führten bisher zu keinem Erfolg.

LG Mario

Re: Suchfunktion in Xform / Table Manager

Verfasst: 12. Jun 2016, 14:25
von runstop64
Hi,

Du kannst RexSearch auch so einstellen, dass Datenbankfelder direkt durchsucht werden. Dafür musst du in den Einstellungen die entsprechenden Tabellen und Spalten markieren. Das Ergebnissarray sieht dann etwas anders aus, der Ergebnistyp ['hits']['type'] ist in diesem Fall 'db_column'.
Am besten fügst du die Tabellenfelder zur Suche hinzu und lässt dir das Ergebnis einfach als Array ausgeben, dann lässt sich die Struktur leicht nachvollziehen.

Re: Suchfunktion in Xform / Table Manager

Verfasst: 12. Jun 2016, 15:19
von concon
Hallo Daniel!
Vielen Dank für die Antwort.
Ja, die betr. Datenbankfelder habe ich auch markiert in Rexsearch
Aber da bekomme ich das nicht nach datenfeldern aufgeschlüsselt.

Suche ich nach z.B. "alfentanil", müßten da zwei Ergebnisse kommen.

Kommen auch, die Ergebnisse, allerdings sieht das so aus

… infusion in glass vial Tablets Cream 250 mg 800 mg 5% 250 mg 800 mg 5% Zovirax® GSK Antiviral 3, Alfentanil Amp. 1 ml 5 mg/ml 5 mg/ml Opioid Analgesics 4, Alfentanil Amp. 2 ml, 10 ml Vial 2 ml, 10 ml 0,5 …
xxxx.xxxx.de16-0-Produkte.html



Die Url könnte ich ja rausnehmen (benötige ich ja nicht), kein Problem,
aber dieser Teil hier soll ja z.B. gar nicht angezeigt werden:
"… infusion in glass vial Tablets Cream 250 mg 800 mg 5% 250 mg 800 mg 5% Zovirax® GSK Antiviral"
und am Ende fehlt sogar etwas zum zweiten gefunden Datensatz.
Die URL zu entfernen, wäre ja das kleinste Problem.
aber wie bekomme ich den Rest aufgedröselt,
so das es so aus sieht:

(Ein Datensatz besteht aus sieben Feldern inkl. ID und online/offline)

1. passender datensatz

ID
----
3
---
Alfentanil
----
Amp. 1 ml
5 mg/ml
5 mg/ml
----
(ein feld, das nicht immer belegt ist)
----
Opioid Analgesics
----
online / offline


2. passender datensatz

ID
----
4
----
Alfentanil
----
Amp. 2 ml, 10 ml Vial 2 ml, 10 ml
0,5 mg/ml
0,5 mg/ml
----
(ein feld, das nicht immer belegt ist)
----
Opioid Analgesics
----
online / offline

LG Mario

Re: Suchfunktion in Xform / Table Manager

Verfasst: 12. Jun 2016, 20:31
von concon
Ich sehe auch gerade, das der Table Manager ja eine eigene Suchfunktion im Backend hat.
Funktioniert auch genau so wie ich das im Frontend haben möchte.

Aber wie bekomme ich das im Frontend übertragen, diese Suchfunktion.
Habe es mit verschiedenen Änderungen versucht, aber funktioniert leider nichts.

Re: Suchfunktion in Xform / Table Manager

Verfasst: 13. Jun 2016, 09:16
von runstop64
Wie sieht das Ausgabemodul Deiner Suche aus?
Hast Du Dir mal das Daten-Array angesehen, das von RexSearch zurückgegeben wird? Dort sind jede Menge Informationen drin, die Du für Deine Ausgabe nutzen kannst. Unter anderem die Tabelle und ID eines Datensatzes. Anhand derer kannst du einfach den vollständigen Datensatz aus der Datenbank holen und anzeigen.
XForm macht eine MySQL-Abfrage mit den Formulareingaben, das geht auch. Wenn Du aber sowieso RexSearch im Einsatz hast ist die Arbeit mit dessen Daten-Array einfacher.

Re: Suchfunktion in Xform / Table Manager

Verfasst: 13. Jun 2016, 10:53
von concon
Hallo Daniel!
Vielen Dank, das Du Dich wieder gemeldet hast:
Ich habe schon viele Redaxo genutzt für die Homepages, habe eigentlich auch immer alles irgendwie hinbekommen. Allerdings bin ich wirklich kein großer php-Künstler und mit dieser Geschchte habe ich meine Schwierigkeiten.
REXSearch sollte eigentlich gar nicht genutzt werden. Das habe ich nun zunächst als Alternative versucht.

Dazu habe ich folgendes im Template eingesetzt:

Code: Alles auswählen

<form id="rexsearch_form" action="index.php" method="get">
    <fieldset><legend>Suche</legend>
      <input type="hidden" name="article_id" value="16" />
      <input type="hidden" name="clang" value="REX_CLANG_ID" />
      <input type="text" name="rexsearch" value="<?php if(!empty($_GET['rexsearch'])) echo htmlspecialchars($_GET['rexsearch']); ?>" />
    </fieldset>
  </form>
   
<br /><br />

 <?php
  if(!empty($_REQUEST['rexsearch']))
  {
    $rexsearch = new RexSearch();
    $result = $rexsearch->search($_REQUEST['rexsearch']);

    if($result['count'] > 0)
    {
      echo '<ul class="searchresults">';
      foreach($result['hits'] as $hit)
      {
        if($hit['type'] == 'article')
        {
          $article = OOArticle::getArticleById($hit['fid']);
          echo '<li>
    <h4><a href="'.($url = htmlspecialchars($article->getUrl())).'">'.$article->getName().'</a></h4>
      <p class="highlightedtext">'.$hit['highlightedtext'].'</p>
      <p class="url">'.$REX['SERVER'].rex_getUrl($hit['fid'], $hit['clang']).'</p></li>';
        }
      }
      echo '</ul>';
    }
  }
?>
Lieber würde ich nämlich auf rexsearch verzichten und das hier ganz oben genutzte Script soweit nutzen, das es als Suchfunktion funktioniert. Aber wenn das mit rexserach besser geht, ist das natürlich auch okay. Die betr. Daten des Tablemanagers habe ich im setup von rexsearch frei gegeben.

HG Mario

Re: Suchfunktion in Xform / Table Manager

Verfasst: 13. Jun 2016, 14:42
von runstop64
1. Du kannst einfach die SQL-Abfrage anpassen, um nach Teil-Strings zu suchen, das kann je nach Umfang der Datentabelle und Länge der Texte recht lange dauern, da bei jeder Abfrage die Tabelle komplett durchsucht werden muss. Das ginge über WHERE LIKE %...% ungefähr so:

Code: Alles auswählen

$sql->setQuery("SELECT * FROM ".$db_table." WHERE feldname LIKE '%".$suchstring."%'"); 
2. RexSearch gibt die Ergebnisse als Array zurück, in deinem RexSerach-Modul-Code wäre der Datentyp in der Foreach-Schleife 'db_column', du könntest auf eine DB-Tabelle prüfen und die Modul-Ausgabe entsprechend anpassen. Ich würde mit

Code: Alles auswählen

if($hit['type'] == 'db_column') {
      echo '<pre>'.print_r($hit,1).'</pre>'
}
erstmal das Array anschauen und die Daten dann entsprechend weiterverarbeiten.
So sollte z.B. die ID des Datensatzes zu finden sein, den Du mit

Code: Alles auswählen

$sql->setQuery("SELECT * FROM ".$db_table." WHERE id = ".$datensatz_id); 
aus der Tabelle holen kannst. Wenn die Daten auch in einem Artikel ausgegeben werden, sollte der Artikel aus der Suche ausgeschlossen werden (im Backend), sonst kommt das Ergebnis zweimal, einmal als db_column, einmal als Artikel.

Schau Dir auch mal hier http://www.redaxo.org/de/wiki/index.php?n=R4.Rexsearch die Beispiele an.

Der Vorteil von RexSearch ist, dass es die Datenbank im Vorfeld indiziert und dann bei der Suchanfrage nur noch auf seinen Index zugreift, was bei umfangreichen Daten deutlich schneller geht.

Re: Suchfunktion in Xform / Table Manager

Verfasst: 13. Jun 2016, 22:05
von concon
Hallo Daniel!

Ein bißchen weiter bin ich.

Hier ist z.B. ein Array

Code: Alles auswählen

Array
(
    [id] => 636
    [fid] => 9
    [table] => rex_medikamente
    [column] => product
    [type] => db_column
    [clang] => 
    [unchangedtext] => Aminophylline
    [plaintext] => Aminophylline
    [teaser] => Aminophylline 
    [highlightedtext] => 
    [article_teaser] => 
---------------------------------------------------------------
    [values] => Array
        (
            [nummer] => 7
            [product] => Aminophylline
            [pharmaceu] => Tablets
            [strenght] => 150 mg
            [reference] => Eifilins
            [therapeutic] => Obstructive lung diseases
        )
DIESEN TEIL BEKOMME ICH NICHT ANGEZEIGT
---------------------------------------------------

    [filename] => 
    [fileext] => 
)
Wobei ich alles ausgelesen bekomme, aber den fetten Teil zeigt er nicht an.
Alles andere funktioniert, auch die Ausgabe von mehreren Daten, wenn vorhanden.

So siehst derzeit aus:

Code: Alles auswählen

<?php
  if(!empty($_REQUEST['rexsearch']))
  {
    $rexsearch = new RexSearch();
    $result = $rexsearch->search($_REQUEST['rexsearch']);

    if($result['count'] > 0)
    {
      echo '<ul class="searchresults">';
      foreach($result['hits'] as $hit)
      {
        if($hit['type'] == 'db_column' AND $hit['table'] == $REX['TABLE_PREFIX'].'article')
          $text = $hit['article_teaser'];
        else
          $text = $hit['highlightedtext'];
          $product = $hit['product'];
          $plaintext = $hit['plaintext'];
          $reference = $hit['reference'];

        $article = OOArticle::getArticleById($hit['fid']);

        echo '<li>
      <p class="highlightedtext">'.$text.'</p>
<p>Produkt: '.$product.'</p>
<p>Plaintext: '.$plaintext.'</p>
<p>Reference: '.$reference.'</p></li>';
      }
      echo '</ul>';
    }
  }
  ?>
AUSGABE:


Produkt:

Plaintext: Alfentanil

Reference:


Produkt:

Plaintext: Alfentanil

Reference:

Referenz und Produkt, also die value Datenfelder liest er so nicht aus.
Und genau die benötige ich. Alle anderen interessieren mich gar nicht.

LG Mario

Re: Suchfunktion in Xform / Table Manager

Verfasst: 13. Jun 2016, 22:46
von runstop64
Leider verstehe ich Dein Problem nicht ganz:
Du hast die Daten im Array, kannst sie aber nicht auslesen? - auf ein verschachteltes Array greifst du so zu:

Code: Alles auswählen

$product = $hit['values']['product']; 
also immer die nächst tiefere Ebene hinten dran hängen.
Oder sind nicht die richtigen Werte im Array?

Re: Suchfunktion in Xform / Table Manager

Verfasst: 14. Jun 2016, 09:20
von concon
Moin Daniel!

Ich bin halt zu doof für diese Welt! :)
Nee, vielen Dank, nun klappt das genauso, wie ich mir das vorgestellt habe.

Schade, das man noch keine Kiste Bier oder so über´s Internet beamen kann,
stattdessen ein großes Dankeschön an Dich!

Viele Grüße Mario