[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Suchfunktion einschränken auf Ctype1 ? - 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/
Vinc
Beiträge: 5
Registriert: 1. Jun 2008, 21:57

Suchfunktion einschränken auf Ctype1 ?

24. Jun 2008, 01:20

Hallo an alle,

ich habe ein kleines Problem mit der Suchfunktion:
http://www.redaxo.de/180-Addondetails.html?addon_id=307

Ich möchte verhindern das Ctype2 bei mir ausgegeben wird, da sich dort eine Artikelliste bzw. Sitemap befindet.

Ich wäre wirklich glücklich,
wenn mir einer schreiben könnte wo und was ich im Modul eintragen muss.

Code: Alles auswählen

<?php
$search = new rex_search_index();
$search->searchIds = true;

// 1 => sucht nur in Online Artikeln, 
// 0 => sucht nur in Offline Artikeln, 
// '' => sucht Status unabhängig
$search->status = 1; 
// Einschränken auf eine Sprache 
// $search->clang = 0;
 
// Beliebige eigene SQL WHERE Bedingung
// $search->custom_where_conditions = ' AND article_id not in (2)';

// Anzahl anzuzeigender Buchstaben um den Suchtreffer herum 
$search->surroundchars = 2000;

// Anzahl der anzuzeigenden gefundenen Suchstellen im Artikel
$search->highlightsNum = 5;

// Pre-/Suffix für Suchwortauszeichnung
$search->sourround_start_tag = "<strong>";
$search->sourround_end_tag = "</strong>";

// Suche starten
$result = $search->rex_search($_REQUEST['rexsearch']);

if (is_array($result))
{
  foreach ($result as $hit)
  {
    /*
     * Verfügbare Variablen:
     * $hit['id']
     * $hit['name']
     * $hit['clang']
     * $hit['highlightedtext']
     * 
     * Alle Artikel/Kategorie Eigenschaften sind via OOF verfügbar, Beispiel:
     * 
     *   $hit_art = OOArticle::getArticleById( $hit['2'], $hit['clang']);
     *   echo $hit_art->getUpdateUser();
     *   $hit_cat = OOCategory::getCategoryById( $hit_art->getCategoryId());
     *   echo $hit_cat->getName();
     */
    print '<p>';
    print '<a href='.rex_getUrl($hit['id'], $hit['clang']).'>';
    print $hit['name'];
    print '</a>';
    print '<br />';
    print $hit['highlightedtext'];
    print '</p>';
  }
}
else
{
  print "<h1>Sorry</h1><p>Ihre Suche hat keine Ergebnisse geliefert.</p>";
}
?>
Vielen herzlichen Dank
Vinc

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

24. Jun 2008, 08:14

Dazu musst Du IMHO innerhalb einer Methode (rex_indexArticle) der Klasse "rex_search_index" eine Änderung vornehmen, sowie ein öffentliches Attribut zur Klasse hinzufügen (oder direkt angeben, siehe unten).

In der Attribut/Variablendeklaration der Klasse hinzufügen:
var $ctype = -1;

In "rex_indexArticle" die Zeile:
$artcache = $art->getArticle();
ändern in:
$artcache = $art->getArticle($this->ctype);

Im Suchmodul die Variable auf den zu beachtenden CType setzen:
$search->ctype = 1;

Wenn Du nur einen spez. CType ausschliessen möchtest, daher mehr als einen CType berücksichtigen möchtest, müsstest Du innerhalb der angesprochenen Methoden die gewünschten CTypes zusammenfügen.
In diesem Fall wäre var $ctype ein Array mit den gewünschen CType-Nummern und die Vorgehensweise:
$artcache = '';
foreach($this->ctype as $ctype)
{
$artcache .= $art->getArticle($ctype);
}

PS: Der Suchindex muss nach dieser Änderung neu aufgebaut werden.

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

24. Jun 2008, 09:40

Hi,

ich würde die custom_where_conditions auf " AND ctype=1 " setzen

Gruß,
Markus

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

24. Jun 2008, 10:30

Markus.Staab hat geschrieben:Hi,

ich würde die custom_where_conditions auf " AND ctype=1 " setzen

Gruß,
Markus
... und einen SQL-Fehler verursachen (Feld ctype nicht vorhanden)...hehe

Vinc
Beiträge: 5
Registriert: 1. Jun 2008, 21:57

24. Jun 2008, 12:13

Ah wunderbar, es funktioniert wie gewünscht.

Vielen lieben Dank.
Vinc

Tito
Beiträge: 128
Registriert: 8. Mär 2008, 09:53
Wohnort: Aachen
Kontaktdaten: Website

15. Okt 2008, 22:49

Ich setze mich gerade mit der selben Problematik auseinander. Ich will die suche auch auf einen CType beschränken.
zehbaeh hat geschrieben:Im Suchmodul die Variable auf den zu beachtenden CType setzen:
$search->ctype = 1;
Jepp, hab ich gemacht.
zehbaeh hat geschrieben:In der Attribut/Variablendeklaration der Klasse hinzufügen:
var $ctype = -1;
Auch kein problem
zehbaeh hat geschrieben:In "rex_indexArticle" die Zeile:
$artcache = $art->getArticle();
ändern in:
$artcache = $art->getArticle($this->ctype);
ähh ... ja, hier hab ich ein problem: $artcache steht da nicht. Dafür:

Code: Alles auswählen

$content = $art->getArticle();
das hab ich mal in

Code: Alles auswählen

$content = $art->getArticle($this->ctype);
geändert, aber es funzt nicht.
Kann mal jemand das Licht bei mir anknipsen?

P.S.: Natürlich habe ich immer den Suchindex neu angelegt.

Zurück zu „Allgemeines [R4]“