Ergebnis 1 bis 17 von 17

Thema: Eigene Links in die Sitemap

  1. #1
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard Eigene Links in die Sitemap

    Hallo,

    ist es irgendwie möglich eigene generierte Aliase von einen eigene Modul in der Sitemap.xmöl aufzunehmen wie zum Beispiel auch bei den Nachrichten?
    Liebe Grüße
    WebRoxx


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

    Standard

    Ja, das macht man mit dem getSearchablePages Hook. Sieh' es dir am Beispiel des News Moduls an: https://github.com/contao/core/blob/.../News.php#L257

  3. #3
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard

    Das sieht ja doch etwas komplizierter aus als ich es mir gedacht habe :/ Nunja, mal sehen ob ich das meistere
    Liebe Grüße
    WebRoxx


  4. #4
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard

    Wie komme ich denn dort an meine "$this->jumpTo" aus mein Modul ran? Also bei den News ist das JumpTo ja aus dem Archiv
    Liebe Grüße
    WebRoxx


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

    Standard

    Du müsstest dir in so einem Fall:
    • alle "Reader" Module deiner Extension aus der Datenbank holen (das wäre dann deine erste Schleife ähnlich dem while ($objArchive->next())).
    • Für dieses Modul suchst du dir dann das Inhaltselement, das dieses Modul inkludiert
    • … darüber den Parent Article
    • … darüber die Parent Page.
    Diese Page ist dann quasi dein "jumpTo".

  6. #6
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard

    Muss das Thema leider nochmal aufgreifen.

    Der hook läuft ja super, aber wie schreibt man in 2 XML-Files?

    Habe de und en, und es hängt mir meine Seiten in beiden Sprachen in beide Dateien.

    Hier der Code wo ich mir den alias erzeuge
    PHP-Code:
                // Add items to the indexer
                
    while($groups->next()){
                    
    $alias  = ($getModul->product_pages) ? $this->generateFrontendUrl(\PageModel::findPublishedByIdOrAlias($getModul->product_pages)->row(), "".($GLOBALS['TL_CONFIG']['useAutoItem'] ?  '/' '/items/').$groups->alias) : '';
                    
    $arrPages[] = $domain.$alias;
                } 
    Liebe Grüße
    WebRoxx


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

    Standard

    Folgende Parameter werden dem getSearchablePages Hook übergeben:
    PHP-Code:
    public function getSearchablePages($arrPages$intRoot=0$blnIsSitemap=false
    Über $intRoot (wenn > 0) kannst du ermitteln, für welchen Website Root die searchable pages gerade generiert werden. Wie schon im ersten Post von mir hier im Thread erwähnt, solltest du dir den Hook einfach im News Modul ansehen.
    Geändert von Spooky (05.05.2016 um 09:47 Uhr)

  8. #8
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard

    Ja das ist mit klar

    Aber ganz ehrlich verstehe ich ne wie ich da unterscheiden kann in welche xml-Datei geschrieben wird :/
    Liebe Grüße
    WebRoxx


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

    Standard

    Zitat Zitat von Ralf2011 Beitrag anzeigen
    Ja das ist mit klar

    Aber ganz ehrlich verstehe ich ne wie ich da unterscheiden kann in welche xml-Datei geschrieben wird :/
    Welche XML Datei geschrieben wird, hängt ja vom Website Root ab (dort definierst du ja auch, ob eine Sitemap erstellt werden soll und welchen Namen diese Sitemap haben soll).

    Du musst ermitteln, in welchem Website Root sich deine Zielseite befindet und ob sich das mit $intRoot gleicht (wenn > 0).

  10. #10
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard

    Es ist wahrscheinlich totaler Käse aber hier mal komplett ich hoffe man sieht durch

    PHP-Code:
            $getModul $this->Database->prepare("SELECT * FROM tl_content WHERE type=?")->execute('psProductsList'); 
            while(
    $getModul->next()){
                
    $artikel = \ArticleModel::findById($getModul->pid);
                
    $pageRoot = \PageModel::findBy(array('language=?','id=?','type=?'),array($strLanguage,$intRoot,'root'));
                
                   
    $groups $this->Database->prepare("SELECT * FROM tl_products_groups WHERE language=? AND published=?")->execute($pageRoot->language,1);
                
    $domain = ($pageRoot->rootUseSSL 'https://' 'http://') . ($pageRoot->domain ?: \Environment::get('host')) . TL_PATH '/';
                while(
    $groups->next()){
                    
    $alias  = ($getModul->product_pages) ? $this->generateFrontendUrl(\PageModel::findPublishedByIdOrAlias($getModul->product_pages)->row(), "".($GLOBALS['TL_CONFIG']['useAutoItem'] ?  '/' '/items/').$groups->alias) : '';
                    
    $arrPages[] = $domain.$alias;
                }    
                
            }
            return 
    $arrPages
    Liebe Grüße
    WebRoxx


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

    Standard

    Kurzes Code Review:
    PHP-Code:
    $getModul $this->Database->prepare("SELECT * FROM tl_content WHERE type=?")->execute('psProductsList'); 
    Eigentlich holst du dir dort keine Module, sondern Inhaltselemente, daher ist der Variablenname irreführend . Außerdem kannst du dort auch Models verwenden, bspw.:
    PHP-Code:
    $objContent = \ContentModel::findByType('psProductsList'); 

    PHP-Code:
            while($getModul->next()){
                
    $artikel = \ArticleModel::findById($getModul->pid);
                
    $pageRoot = \PageModel::findBy(array('language=?','id=?','type=?'),array($strLanguage,$intRoot,'root')); 
    Den Page root für das Inhaltselement bekommst du zB auch mit
    PHP-Code:
    $intContentRoot $objContent->getRelated('pid')->getRelated('pid')->loadDetails()->rootId
    (komplett gekürzt). Wenn du mal das PageModel des Artikels des Inhaltselements hast, dann sind derartige Informationen auch sofort verfügbar, vorausgesetzt loadDetails oder findWithDetails wurde benutzt. Andere Herangehensweise:
    PHP-Code:
    $intContentRoot = \PageModel::findWithDetails$objContent->getRelated('pid')->pid )->rootId

    Nachdem du die Root ID hast, kannst du danach einfach
    PHP-Code:
    if( $intRoot && $intRoot != $intContentRoot )
        continue; 
    machen.

  12. #12
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard

    Ok, soweit so gut

    deine $intContentRoot erzeugen bei mir aber alle

    Fatal error: Uncaught exception Exception with message Field pid does not seem to be related thrown in system/modules/core/library/Contao/Model.php on line 604

    Dann wo muss ich das setzten
    PHP-Code:
                    if($intRoot && $intRoot != $intContentRoot
                        continue; 
    denn vor meinen "Produktlink" werden diese nicht erzeugt und nachher sind dennoch beide Sprachen in den Files, allerding erzeuge ich die $intContentRoot auch mit meinen Code da der obige ja den Fehler auswirft, vielleicht liegt da bei mir auch der Hund begraben

    EDIT: ja die Variable war blöd, hatte ich aus ein anderen Projekt kopiert
    Geändert von WebRoxx (05.05.2016 um 18:50 Uhr)
    Liebe Grüße
    WebRoxx


  13. #13
    Alter Contao-Hase
    Registriert seit
    18.07.2012.
    Ort
    Löbau
    Beiträge
    1.140

    Standard

    Alles klar so geht

    PHP-Code:
             $objContent = \ContentModel::findByType('psProductsList');  
             if(
    $objContent !== null) {
                 while(
    $objContent->next()){ 
                     
    $artikel = \ArticleModel::findById($objContent->pid);
                    
    $intContentRoot = \PageModel::findWithDetails$artikel->getRelated('pid')->pid )->rootId;  
    .... 
    Vielen Dank für deine wie immer großartige Hilfe, fühl mich schon richtig mies :/
    Liebe Grüße
    WebRoxx


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

    Standard

    Zitat Zitat von Ralf2011 Beitrag anzeigen
    $intContentRoot = \PageModel::findWithDetails( $artikel->getRelated('pid')->pid )->rootId;
    Das
    PHP-Code:
    $artikel->getRelated('pid')->pid 
    ist ein wenig überflüssig, damit holst du dir ja schon die Seite, auf der sich der Artikel befindet. Da könntest du einfach nur
    PHP-Code:
    $artikel->pid
    nehmen.


    Zitat Zitat von Ralf2011 Beitrag anzeigen
    Vielen Dank für deine wie immer großartige Hilfe, fühl mich schon richtig mies :/
    Kein Problem. Du könntest dich ja mit einer Kleinigkeit aus meiner Wunschliste revanchieren .

  15. #15
    Contao-Nutzer
    Registriert seit
    15.10.2015.
    Beiträge
    136

    Standard

    Wenn ich "public function myGetSearchablePages($arrPages, $intRoot=false" setze funktioniert es, allerdings habe ich 3 Seitenbäume und dann ist mein Eintrag in allen Sitemaps enthalten.

    Leider wird mir $intRoot anscheinend nicht übergeben, so dass ich das gezielt steuern könnte.
    Wenn ich $intRoot (nicht als false oder 0 definiere) erhalte ich im Contao 4.5 Log:

    "[2018-02-22 16:13:18] app.CRITICAL: An exception occurred. {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowa bleError(code: 0): Type error: Too few arguments to function mm_produkt_class::myGetSearchablePages(), 1 passed in /****/vendor/contao/core-bundle/src/Resources/contao/classes/RebuildIndex.php on line 104 and at least 2 expected at /***/system/modules/mm_produkt/mm_produkt_class.php:5)"} []"

    Jemand eine Idee, wie ich Einträge nicht in alle XML Daten gleichzeitig schreibe?
    Geändert von kalterwind (22.02.2018 um 15:22 Uhr)

  16. #16
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von windblick Beitrag anzeigen
    Wenn ich "public function myGetSearchablePages($arrPages, $intRoot=false" setze funktioniert es, allerdings habe ich 3 Seitenbäume und dann ist mein Eintrag in allen Sitemaps enthalten.

    Leider wird mir $intRoot anscheinend nicht übergeben, so dass ich das gezielt steuern könnte.
    Wenn ich $intRoot (nicht als false oder 0 definiere) erhalte ich im Contao 4.5 Log:

    "[2018-02-22 16:13:18] app.CRITICAL: An exception occurred. {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowa bleError(code: 0): Type error: Too few arguments to function mm_produkt_class::myGetSearchablePages(), 1 passed in /****/vendor/contao/core-bundle/src/Resources/contao/classes/RebuildIndex.php on line 104 and at least 2 expected at /***/system/modules/mm_produkt/mm_produkt_class.php:5)"} []"

    Jemand eine Idee, wie ich Einträge nicht in alle XML Daten gleichzeitig schreibe?
    Der Hook wird für zwei Anwendungsfälle genutzt:

    + Generierung der Sitemaps
    + Sammlung aller URLs zum Aufbau des Suchindexes.

    Für den ersten Fall, wird die Wurzelseite übergeben, für den zweiten nicht.

    Du musst also mit beiden Fällen umgehen.

  17. #17
    Contao-Nutzer
    Registriert seit
    15.10.2015.
    Beiträge
    136

    Standard

    Zitat Zitat von webstar Beitrag anzeigen
    Du musst also mit beiden Fällen umgehen.
    Ich DANKE DIR! Da bin ich nicht drauf gekommen, dass beides gehen muss Nun geht es auch in der Sitemap & Suche wie gewünscht.

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
  •