Ergebnis 1 bis 7 von 7

Thema: Catalog mit cfs_maps - Hook für Suchergebnisse

  1. #1
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard Catalog mit cfs_maps - Hook für Suchergebnisse

    Hallo,

    ich versuche gerade, die cs-mpas Erweiterung mit dem Catalog zusammen laufen zu lassen. Das funktioniert soweit auch ganz gut. nur an einer Stelle hänge ich:

    Mittels Hook wird eine sql-Anweisung an cfs_maps übergeben, um gefilterte Listen auch gefiltert auf der Karte anzuzeigen. Das funktioniert bei einer Filterung z.B. nach der Katagorie auch hervorragend mit:

    PHP-Code:
     return 'category ='.$kategorie
    Wenn die Suche via Suchbegriff aber verwendet wird weiß ich nicht, wie ich an die Parameter herankomme.

    Ein Gedanke ist:

    PHP-Code:
    class CFSMapsFiltered extends System
    {
        public function 
    onCfsMapsSqlCondition($tabName$mapId$mapDataObj$objModule)
        {
            if (
    $tabName == 'cat_meinKatalog')
            {                
                
    $suche $this->Input->get('search');    
                
                if (
    strlen($suche)){            
                    return  
    '?????????';
                }
            }        
        }

    Die Fragezeichen müssten die sql-Anweisung sein, mit der ich die entsprechenden Einträge aus der Datenbank übergeben kann. Oder funktioniert es mit $this->Input->get('search') gar nicht, sondern eventuell anders?

    Für einen hilfreichen Tipp wäre ich überaus dankbar.

    Viele Grüße,
    Marcel

  2. #2
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard

    Ich bin jetzt ein wenig weiter. Mein Problem ist jetzt, dass ich nicht weiß ob und wie man ein array von einem Modul in das andere übergeben kann. Gibt es dafür eine Möglichkeit.

    Anstelle von

    PHP-Code:
    $suche $this->Input->get('search'); 
    will ich ein Array mit den benötigten Daten abrufen. Dieses muss aus dem Catalog irgendwie übergeben werden. Eine schlichte $GLOBALS tut es irgendwie nicht.

    Viele Grüße,
    Marcel

  3. #3
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard geschafft

    Nach langem Suchen und probieren ist es endlich geschafft. Leider etwas dreckig, da ich direkt in den Catalog gehen musste und die globale Variable zu erzeugen. Gibt es eine schönere Möglichkeit, um an Daten innerhalb eines Moduls zu kommen, ohne sich direkt an dem Code zu schaffen zu machen?

    Die Lösung ist, dass die SQL-Abfrage nicht selber erzeugt wird, sondern aus dem Katalog übernommen. Eine eigene Nachbildung war mir zu aufwendig und zu komplex. Aus dem Catalog heraus wird eine globale Variable beschrieben, die im Hook ausgewertet werden kann. Dabei unbedingt die Reihenfolge der Module im Artikel beachten!

  4. #4
    Contao-Nutzer
    Registriert seit
    04.05.2010.
    Beiträge
    19

    Standard cfs_Maps Karten aus Catalog Filter Ergebnis

    Hallo!

    Ich habe auch das Problem, dass ich gerne cfs_Maps Karten aus dem Catalog Filter Ergebnis erstellen möchte.

    Hier mein Thread dazu, ist evtl. falsch plaziert, sorry:
    https://www.contao-community.de/show...ps-integrieren


    Nun habe ich gesehen, dass du schon eine Lösung hast?

    Super! Kannst du mir die Schritte bis zur Lösung schildern? Anhand deiner Postings komme ich leider nicht weiter...


    DANKE!

  5. #5
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard

    So wie ich das verstehe scheint dein Problem zu sein, die Catalogeinträge in der Karte anzeigen zu lassen. Ich habe das so gelöst:

    Für die Listenansicht und die Detailansicht sind zwei verschiedene Karten angelegt worden. Bei haben den Lokationstyp Tabelle und dort die Tabelle des Catalog ausgewählt.

    Um die gefilterte Anzeige zu bekommen musst du ein kleines Modul erstellen. In der config kannst du den Hook der CFS-Maps aufgreifen:

    PHP-Code:
    $GLOBALS['TL_HOOKS']['cfsMapsSqlCondition'][] = array('CFSMapsFiltered''onCfsMapsSqlCondition'); 
    In der Datei CFSMapsFiltered steht bei mir folgendes:

    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');

    class 
    CFSMapsFiltered extends System
    {
        public function 
    onCfsMapsSqlCondition($tabName$mapId$mapDataObj$objModule)
        {
            if (
    $tabName == 'TABELLENNAME')
            {                            
                
    $filteredId implode(',',$GLOBALS['myCatalog']['myMapId']);
                if(
    $filteredId != "")
                {            
                    
    $sqlBack "id IN (".$filteredId.")";
                }
                else
                {    
                        
    $sqlBack "";//must be empty for the detail-site    
                
    }
                return 
    $sqlBack;
                
            }        
        }
    }
    ?>
    Sinn der Sache ist, die SQL-Anweisung, die bei den CFS-Maps verarbeitet wird von der gefilterten Liste zu bekommen. Es ist eine einfache Liste aller angezeigten ID's.

    Die globale Variablen habe ich in der Datei ModuleCataogList.php erzeugt (das ist nicht sauber und Updatesicher). Das "//Run Query" und der Datenbankaufruf sind original aus der Datei (die Zeile weiß ich leider nicht, da ich noch weitere Änderungen vorgenommen habe). Darunter kommen meine Änderungen:

    PHP-Code:
    // Run Query
                
    $objCatalogStmt $this->Database->prepare("SELECT ".implode(',',$this->systemColumns).",".implode(',',$arrQuery).", (SELECT name FROM tl_catalog_types WHERE tl_catalog_types.id=".$this->strTable.".pid) AS catalog_name, (SELECT jumpTo FROM tl_catalog_types WHERE tl_catalog_types.id=".$this->strTable.".pid) AS parentJumpTo FROM ".$this->strTable." WHERE pid=?".$strWhere.(strlen($strOrder) ? " ORDER BY ".$strOrder ""));         

    /////////////// für CFS MAPS                        
    // gleiche Abfrage nur ohne LIMIT und auf die ID beschränkt - übergabe an die cfsMaps    
    $myStmt $this->Database->prepare("SELECT id FROM ".$this->strTable." WHERE pid=?".$strWhere.(strlen($strOrder) ? " ORDER BY ".$strOrder "")); 
    $myTotal $myStmt->execute($params);

    $myIdData = array();
    while (
    $myTotal->next())
    {
         
    array_push($myIdData,$myTotal->id);  

    // das Array wird global gespeichert und von cfs_maps via Hook ausgelesen
    $GLOBALS['myCatalog']['myMapId'] = $myIdData;

    ... 
    Der Teil muss somit an der entsprechende Stelle eingefügt werden.

    Ich hoffe ich konnte weiterhelfen.

    Viele Grüße

    EDIT: Den Detaileintrag kann man einfach mit Hilfe des Hakens "Nur aktuellen Eintrag anzeigen" im Kartenprofil anzeigen.
    Geändert von Erdpferd (15.08.2012 um 16:42 Uhr)

  6. #6
    Contao-Nutzer
    Registriert seit
    04.05.2010.
    Beiträge
    19

    Standard

    Danke für deine prompte Antwort!

    Ich habe zwischenzeitlich und nach langem Stöbern einen alternativen Weg gefunden, ohne cfs_maps:

    http://de.contaowiki.org/Catalog_mit..._Anfahrtskarte

    Das erschien mir als einfacher, weil man im Prinzip nur ein Template anpassen muss.

    Und falls man auf seiner Karte dann mehrere anhand des Katalog-Suchergebnisses personalisierte Marker will, hilft dieser Link weiter:

    http://stackoverflow.com/questions/3...marker-example

  7. #7
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard

    Das scheint in der tat einfacher zu sein. Leider war Google-Mpas für meine Variante wegen der Kosten ab 25.000 Aufrufe/Monat keine Alternative.

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
  •