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.
Lesezeichen