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

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
concon
Beiträge: 45
Registriert: 18. Jun 2005, 00:10

Suchfunktion in Xform / Table Manager

12. Jun 2016, 11:20

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

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Suchfunktion in Xform / Table Manager

12. Jun 2016, 14:25

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.
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

concon
Beiträge: 45
Registriert: 18. Jun 2005, 00:10

Re: Suchfunktion in Xform / Table Manager

12. Jun 2016, 15:19

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

concon
Beiträge: 45
Registriert: 18. Jun 2005, 00:10

Re: Suchfunktion in Xform / Table Manager

12. Jun 2016, 20:31

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.

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Suchfunktion in Xform / Table Manager

13. Jun 2016, 09:16

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.
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

concon
Beiträge: 45
Registriert: 18. Jun 2005, 00:10

Re: Suchfunktion in Xform / Table Manager

13. Jun 2016, 10:53

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

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Suchfunktion in Xform / Table Manager

13. Jun 2016, 14:42

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.
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

concon
Beiträge: 45
Registriert: 18. Jun 2005, 00:10

Re: Suchfunktion in Xform / Table Manager

13. Jun 2016, 22:05

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

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Suchfunktion in Xform / Table Manager

13. Jun 2016, 22:46

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?
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

concon
Beiträge: 45
Registriert: 18. Jun 2005, 00:10

Re: Suchfunktion in Xform / Table Manager

14. Jun 2016, 09:20

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

Zurück zu „Allgemeines [R4]“