Contao-Camp 2024
Ergebnis 1 bis 11 von 11

Thema: Suchfunktion anpassen?

  1. #1
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard Suchfunktion anpassen?

    Hallo,

    besteht die Möglichkeit anzupassen, welche Elemente beim Suchen bzw. Indexieren einer Contao-Seite verwendet werden?
    Ein User möchte für seine Contao-Seite z.B. nur Suchergebnisse erhalten, die über den Text aus Überschriften gefunden worden sind, geht das?

    Weiterhin soll die Suche auch Events finden und dabei eine bei der Suche übergebenen von - bis Zeitraum berücksichtigen.


    Danke für Hinweise


    Mark

  2. #2
    Contao-Nutzer
    Registriert seit
    14.03.2012.
    Ort
    Berlin
    Beiträge
    225

    Standard

    Hi,

    über Template-Anpassungen könntest du dies realisieren.
    Schau dir mal ein paar Templates an. Da gibt es immer mal wieder
    HTML-Code:
    <!-- indexer::stop -->
    und

    HTML-Code:
    <!-- indexer::continue -->
    Alles dazwischen wird nicht indexiert.

    Man könnte nun z.B. die mod_article.html5 entsprechend anpassen, da die normalerweise für jeden Artikel benutzt wird.

  3. #3
    Alter Contao-Hase
    Registriert seit
    28.09.2010.
    Beiträge
    1.368

    Standard

    Zitat Zitat von jk1 Beitrag anzeigen
    Hi,

    über Template-Anpassungen könntest du dies realisieren.
    Schau dir mal ein paar Templates an. Da gibt es immer mal wieder
    HTML-Code:
    <!-- indexer::stop -->
    und

    HTML-Code:
    <!-- indexer::continue -->
    Alles dazwischen wird nicht indexiert.

    Man könnte nun z.B. die mod_article.html5 entsprechend anpassen, da die normalerweise für jeden Artikel benutzt wird.

    ah, stimmt, daran hatte ich nicht gedacht, das probiere ich mal .....

    danke

    mark

  4. #4
    Contao-Fan Avatar von Stefko
    Registriert seit
    25.10.2012.
    Ort
    Karlsruhe
    Beiträge
    771
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von jk1 Beitrag anzeigen
    Man könnte nun z.B. die mod_article.html5 entsprechend anpassen, da die normalerweise für jeden Artikel benutzt wird.
    Also auch für die Überschriften, welche indiziert werden sollen
    Da müsste man dann wohl in dem Überschriften-Template ein <!-- indexer::continue --> einfügen.
    Und Überschriften, die z.B. im IE-Text oder einem Modul vergeben werden würden davon auch nicht erfasst.
    Grüße, Stefko

  5. #5
    Contao-Nutzer
    Registriert seit
    14.03.2012.
    Ort
    Berlin
    Beiträge
    225

    Standard

    Das war auch noch keine komplette Lösung, sondern ein Wink mit dem Zaunpfahl - wir sind hier schließlich im Entwickler-Forum

  6. #6
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Also wenn schon im Entwickler-Forum:

    Nimm den indexPage-Hook. Du kannst den Inhalt mit einer Regex nach Überschriften absuchen und nur diesen Inhalt indexieren lassen.
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  7. #7
    Contao-Nutzer
    Registriert seit
    07.04.2010.
    Ort
    Berlin
    Beiträge
    155

    Standard

    Ich hätte noch eine weiterführende Frage zu diesem Thema.
    Auch ich versuche gerade die Suchfunktion für die Darstellung von Events zu nutzen. Dafür würde ich gerne in den Suchergebissen neben dem Eventtitel auch die Felder für Datum, Location, Teasertext und Teaserbild ausgeben lassen.

    Habe schon versucht die entsprechenden Variablen aus dem Template event_full.html5 einfach in das Template search_default.html5 einzubauen, aber da funktionieren sie nicht.
    Kein Wunder - wenn ich mir mit <?php $this->showTemplateVars(); ?> alle im Template search_default.html5 verfügbaren Variablen anzeigen lasse, tauchen die Event-Variablen dort natürlich nicht auf.

    Gibt es denn nun eine Möglichkeit diese Variablen auch im Such-Template ausgeben zu lassen?
    Oder ist das Quatsch und es gibt einen besseren Ansatz um diese Aufgabe zu lösen?

  8. #8
    Contao-Nutzer
    Registriert seit
    07.04.2010.
    Ort
    Berlin
    Beiträge
    155

    Standard

    Hallo? Hat wirklich niemand eine Idee dazu?
    Bin für jeden Hinweis dankbar!

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    Die nötigen Schritte wären folgende:

    Ziel ist es später bei den Suchergebnissen zu wissen, ob es sich bei dem Suchergebnis um bspw. eine News oder ein Event handelt. Daher könnte man beim Aufbauen des Suchindexes für die jeweiligen Seiten überprüfen, ob es sich um eine News oder ein Event handelt und dann die ID zum Suchergebnis (in tl_search) speichern. Dazu kann man den indexPage Hook verwenden. Dieser könnte zB. so aussehen (für News):
    PHP-Code:
    /**
     * Adds news and event info to page index
     * 
     * @param  string $strContent
     * @param  array $arrData
     * @param  array $arrSet
     * 
     * @return void
     */
    public function onIndexPage($strContent, array &$arrData, array &$arrSet)
    {
        
    // check for news
        
    if (null !== ($objNews = \NewsModel::findByAlias(\Input::get('auto_item'falsetrue))))
        {
            
    // check if redirect page of archive is on the current page
            
    if ($objNews->getRelated('pid')->jumpTo == $arrData['pid'])
            {
                
    $arrSet['newsId'] = $objNews->id;
                return;
            }
        }

        
    // check for events
        
    if (null !== ($objEvent = \CalendarEventsModel::findByAlias(\Input::get('auto_item'falsetrue))))
        {
            
    // check if redirect page of archive is on the current page
            
    if ($objEvent->getRelated('pid')->jumpTo == $arrData['pid'])
            {
                
    $arrSet['eventId'] = $objEvent->id;
                return;
            }
        }

    Natürlich muss man auch das DCA von tl_search erweitern für diese zwei Felder:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_search']['fields']['newsId'] = ['sql' => "int(10) unsigned NOT NULL default '0'"];
    $GLOBALS['TL_DCA']['tl_search']['fields']['eventId'] = ['sql' => "int(10) unsigned NOT NULL default '0'"]; 
    Später kann man sich dann im search_default Template den jeweiligen tl_search Datenbank Eintrag über $this->url nochmal holen, überprüfen ob für dieses Suchergebnis eine News oder Event ID vorliegt, den News Artikel bzw. das Event aus der Datenbank holen und dann im Template entsprechende Daten ausgeben.
    Geändert von Spooky (20.04.2018 um 11:03 Uhr)

  10. #10
    Contao-Nutzer
    Registriert seit
    07.04.2010.
    Ort
    Berlin
    Beiträge
    155

    Standard

    Problem gelöst, ein Kollege hat bereits 2018 die search-default.html5 so angepasst, daß auch die Eventvariablen (Datum, Location, Teasertext und Teaserbild) mit ausgegeben werden:


    HTML-Code:
    <?php
    // "saubere" url erzeugen
    $url = substr($this->url, (strrpos($this->url, "/") + 1));
    // event model holen
    $event = \CalendarEventsModel::findOneByAlias($url);
    // calendar model holen
    $calendar = \CalendarModel::findById($event->pid);
    // thumbnail holen
    $objFile = FilesModel::findByUuid($event->singleSRC);
    if ($objFile->path)
        $picture = \Picture::create($objFile->path, 2)->getTemplateData(); // 2 = Contao Bild Preset "Event Teaser"
    $picture['alt'] = specialchars($event->alt);
    $picture['title'] = specialchars($event->title);
    if ($objFile->meta) { // zu dem Bild sind Metadaten eingetragen
        $meta = deserialize($objFile->meta);
        if (!is_null($meta['de']['title'])) { // es steht etwas im Title-Feld des Bildes
            $picture['title'] = specialchars($meta['de']['title']);
        }
    }
    ?>
    
    <div class="mod_eventlist">
    
            <div class="event layout_teaser <?= $calendar->title ?>" itemscope itemtype="http://schema.org/Event">
                <div class="archivname" style="display:none"><?php echo $calendar->title ?></div>
    
                <?php if ($event->addImage): ?>
                <figure class="image_container">
                    <?php $this->insert('picture_default', $picture); ?>
                </figure>
                <?php endif; ?>
    
                <div class="header<?= $event->classHeader ?>">
                    <span class="day"><?php echo $this->parseDate("D", $event->startDate); ?></span>
                    <span class="date" itemprop="startDate" content="<?php echo $this->parseDate("Y-m-d", $this->startDate); ?><?php if ($event->addTime): ?>T<?php echo $this->parseDate("H:i", $event->startTime); ?><?php endif; ?>"><?php echo $this->parseDate("d.m.y", $event->startDate); ?></span>
    
                	<span class="time">
                        <?php if ($event->addTime): ?>
                            <?php if ($event->startTime != $event->endTime): ?>
                                <?php echo $this->parseDate("H:i", $event->startTime); ?>-<?php echo $this->parseDate("H:i", $event->endTime); ?> Uhr
                            <?php endif; ?>
                            <?php if ($event->startTime == $event->endTime): ?>
                                <?php echo $this->parseDate("H:i", $event->startTime); ?> Uhr
                            <?php endif; ?>
                        <?php endif; ?>
                    </span>
    
                    <?php if ($event->endDate): ?>
                        <span class="trenner">-</span>
                    	<span class="end day"><?php echo $this->parseDate("D", $event->endDate); ?></span>
                    	<span class="end date" itemprop="endDate" content="<?php echo $this->parseDate("Y-m-d", $this->endDate); ?>"><?php echo $this->parseDate("d.m.y", $event->endDate); ?></span>
                    <?php endif; ?>
    
                </div>
    
                <?php if ($this->url): ?>
                <h2 itemprop="name"><a href="<?= $this->url; ?>" itemprop="url"><?= $event->title ?></a></h2>
                <?php else: ?>
                <h2 itemprop="name"><span class="nolink"><?= $event->title ?></span></h2>
                <?php endif; ?>
    
                <div class="ce_text block" itemprop="description">
    
                    <?php if ($event->location): ?>
                        <span class="location" itemprop="location" itemscope itemtype="http://schema.org/Place">
                            <span itemprop="name">MUK - <?= $event->location ?></span>
                        </span>
                    <?php endif; ?>
    
                    <?php echo $event->teaser; ?>
    
                </div>
    
            </div>
    
    </div>
    Als Referenzseite im entsprechenden Modul „Suchmaschine“ ist die Event-Detailseite mit dem EventReader eingestellt.

    Damit hat es seit 2018 unter Contao 4.4 sehr gut funktioniert.

    Seit dem Update von Contao 4.4 auf 4.9 funktioniert diese Eventsuche leider nur noch fehlerhaft - welche Events gefunden werden und welche nicht erscheint nun etwas willkürlich. Hier die Webseite: www.muk.de (Menüpunkt „Programm“)

    Auf der Webseite ist eine weitere Suchfunktion mit einem Suchmaschinenmodul eingebunden, das nicht nur die Events sondern auch alle anderen Seiten durchsucht (Keine Referenzseite eingestellt). Das findet auch weiterin alle Events (Im Menü ganz oben unter „Suche“).

    Habe den Suchindex mit dem Crawler mehrmals neu aufgebaut, keine Veränderung.

    Am den modifizierten Template search_default.html5 dürfte es eigentlich auch nicht liegen, weil dies lediglich die Anzeige der Suchergebnisse beeinflusst, aber nicht die Suchfunktion bzw. die Suchergebnisse selbst.

    Jemand ne Idee woran es liegen könnte?

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.062
    Partner-ID
    10107

    Standard

    In Contao 4.9.2 gibt es einen Fehler beim Aufbauen des Suchindex. Wird in Contao 4.9.3 behoben sein. Wird vermutlich bald veröffentlicht.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •