Module durchsuchen und indexieren

  • Hallo zusammen,


    ich bastele gerade an einer Internetseite und um den Content auf den Seiten etwas schicker und ansprechender zu gestalten setze ich auf mehreren Seiten Module ein, welche teilweise viel Text und wichtige Informationen enthalten. Diese Module lade ich dann per z.B. {loadmodule mod_articleinline,Leistungen} zu dem regulären Content in die Beiträge.
    Der Hintergrund ist, dass ich möglichst wenig HTML in den Beiträgen verwenden möchte und das Erstellen von solchem Content mit Modulen natürlich wesentlich schneller geht und alles einheitlich geändert wird, sobald ich das Modul ändere.


    Nun das eigentliche Problem:
    Ich möchte nun gerne eine Suchfunktion in die Seite integrieren, wobei ich feststellen musste, dass Module, welche per loadmodule in Beiträge geladen wurden nicht mit durchsucht werden, was in meinem Fall echt mies ist und die Suche eigentlich recht unbrauchbar macht, da ich ca. 50% den Contents in Module gepackt habe.
    Gibt es eine Möglichkeit an den Corefiles etwas zu "schrauben", damit auch die Module mit durchsucht werden? Oder kennt jemand ggf. eine Extension, welche das Ganze schon integriert hat?


    Ich verwende Joomla 3.7.0-29
    Unter plugins/content/loadmodule/loadmodule.php ist in Zeile 39-43 scheinbar die indexierung für loadmodule explizit ausgeklammert.

    Code
    // Don't run this plugin when the content is being indexed
            if ($context === 'com_finder.indexer')
            {
                return true;
            }


    Wenn ich die Zeilen jedoch entferne, bekomme ich beim Indexieren folgende Fehlermeldung:

    Zitat

    Es ist ein Fehler aufgetreten.
    Unable to load renderer class


    Ich hoffe, dass jemand eine Lösung dafür kennt, oder bereit ist sich dort ein wenig reinzufuchsen um eine Lösung zu finden.


    Mit freundlichem Gruß
    xoxo

  • Das Durchsuchen/Indexieren von Modulen selbst, ist wenig sinnvoll, da ein Modul sonstwo sein kann, im Beitrag, an Position, gar nicht. Es hat eine eigene Tabelle, eine eigene Speicherroutine, keinen Link, keinen Router... Ein Artikel weiß beim Speichern nicht, welches Modul wo wie warum "auftauchen" wird. Der hat aber einen Link, Router...


    Theorie:
    Also musst in deinem individuellen Fall erst die loadmodule-Passage rendern bevor dann der Artikeltext inklusive des jetzt reingerenderten Modulinhalts durch die Indexierung läuft.


    Wennst einen Blick in Plugin loadmodule wirfst, stellst fest, dass dort mit $article->text gearbeitet wird.
    https://github.com/joomla/joom…module/loadmodule.php#L87
    Bei "vollen" Beiträgen eine Zusammenfassung aus #__content-Tabellenfeldern introtext sowie fulltext.


    Das Plugin finder/content/content.php schickt aber $item->summary sowie $item->body an die Content-Plugins.
    https://github.com/joomla/joom…ent/content.php#L262-L263
    summary ist dabei introtext, body fulltext der #__content-Tabelle.
    https://github.com/joomla/joom…/content/content.php#L344
    Und erwartet auch als Rückgabe die veränderten Eigenschaften $item->summary sowie $item->body und kann mit $item->text nix anfangen.


    Ergo, als erster unausgereifter Hudel-Ansatz einer Individuallösung:
    Variante A)
    - Du musst dir das Content-Plugin loadmodule abkupfern, also ein eigenes unter eigenem Namen erstellen.
    - - Als Filter setzt ein, dass es nur im context === 'com_finder.indexer' laufen soll. Wie man das präziser filtern kann, hab ich nicht geschaut, wird aber vermutlich nötig sein, je nachdem welche Erweiterungen alles indexiert werden bei dir (welche Finder-Plugins aktiv sind).
    - - Plugin loadmodule umschreiben, so, dass nicht $article->text, sondern $article->summary und $article->body inklusive gerendertem Modulinhalt zurückgegeben werden.


    Variante B)
    - Du musst dir das o.g. Finder-Plugin abkupfern, das Original deaktivieren.
    - - Dann kannst am Aufruf der Zeilen
    https://github.com/joomla/joom…ent/content.php#L262-L263
    schrauben (Context manipulieren, Objekt-Eigenschaften summary/body), so, dass Plugin loadmodule alles durchlässt. Dann $item->text "auflösen" zu $item->body bzw. $item->summary.


    Beide Varianten haben natürlich den Nachteil, dass eben nicht beim Ändern eines Moduls neu indexiert wird, sondern bestenfalls beim Speichern der Beiträge. Ob beim Klick auf "Index leeren" und beim neu "Indexieren" in der SuchIndex-Komponente ebenfalls die Plugins so durchlaufen werden, keine Ahnung. Ich verwende das Teil nicht. Hab mich ja nun auch schon genug reingefuchst ;)


    Der Rest ist Rattenschwanz für Tüftler. Bspw. ein weiteres Aufpasser-Plugin, dass die Indexierung beim Modulspeichern neu anstößt, aber welche Indexierung eigentlich, für welchen Beitrag eigentlich ;) Und So Weiter...



    EDIT: Einfachere Variante: Integrier dir eine Google-Suche nur für deine Domain und lass den Joomlasuchekram einfach weg.

  • Heyho RE:Later,


    vielen Dank für deine Lösungsansätze und ausführlichen Erklärungen. Ich werde mir das Ganze bei Gelegenheit mal anschauen und bis dahin wohl ohne Suchfunktion klar kommen müsen. Jetzt habe ich aber zumindest eine Ecke in der ich anfangen kann.


    LG
    xoxo

  • Wie gesagt, es gibt von Google die Möglichkeit ein Googlesuchfeld in die eigene Seite einzubinden ("Benutzerdefinierte Suchmaschine", "CSE"), das nur in den Domains sucht, die man beim Einrichten einstellt, also bspw. http://www.example.org).
    Entgegen der Beschreibung kann man das Suchfeld auf beliebigen Seiten einrichten, nicht nur auf der Startseite. Da ich bei mir nie Werbung sehe, kann man das wohl auch irgendwo abschalten. Ergebnisse in einem responsiven PopUp.
    Einen oder andern Kompromiss muss man (vielleicht) machen.