Hi!
Danke für den Anstoß.
Zuerst habe ich die Extension um 2 Eingabefelder bei der Kategorie erweitert:
tca.php:
"left_offset" => Array (
"exclude" => 1,
"label" => "Left offset",
"config" => Array (
"type" => "input",
"size" => "5",
"eval" => "int",
'range' => array('lower' => 0,'upper' => 100),
)
),
"top_offset" => Array (
"exclude" => 1,
"label" => "Top offset",
"config" => Array (
"type" => "input",
"size" => "5",
"eval" => "int",
'range' => array('lower' => 0,'upper' => 100),
)
),
[.......]
"types" => Array (
"0" => Array("showitem" => "hidden;;1;;1-1-1, title, descr, parent_uid, image;;2,tabprefix")
),
"palettes" => Array (
"1" => Array("showitem" => ""),
"2" => Array("showitem" => "left_offset,top_offset")
)
Nicht vergessen die Datenbank-Spalten einzufügen (INT DEFAULT 0)
Danach habe ich die class.tx_rggooglemap_pi1.php geändert:
function xmlFunc($content,$conf) {
/********** vorher ***************/
// category image
$table = 'tx_rggooglemap_cat';
$field = 'uid,';
$where = 'deleted = 0 AND hidden=0 ';
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($field,$table,$where,$groupBy='',$orderBy,$limit='');
while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
if ($row['image']=='') {
// get image of parent category
$whereTemp = 'deleted = 0 AND hidden=0 AND uid = '.$row['parent_uid'];
$res2 = $GLOBALS['TYPO3_DB']->exec_SELECTquery($field,$table,$whereTemp);
$row2 = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res2);
$catImg[$row['uid']] = $row2['image'];
} else {
$catImg[$row['uid']] = $row['image'];
}
}
/********** nachher ***************/
// category image
$table = 'tx_rggooglemap_cat';
$field = '*';
$where = 'deleted = 0 AND hidden=0 ';
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($field,$table,$where,$groupBy='',$orderBy,$limit='');
while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
if ($row['image']=='') {
// get image of parent category
$whereTemp = 'deleted = 0 AND hidden=0 AND uid = '.$row['parent_uid'];
$res2 = $GLOBALS['TYPO3_DB']->exec_SELECTquery($field,$table,$whereTemp);
$row2 = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res2);
$catImg[$row['uid']] = $row2['image'];
$leftOffset[$row['uid']] = $row2['left_offset'];
$topOffset[$row['uid']] = $row2['top_offset'];
} else {
$catImg[$row['uid']] = $row['image'];
$leftOffset[$row['uid']] = $row['left_offset'];
$topOffset[$row['uid']] = $row['top_offset'];
}
}
/*******************************************/
/********** vorher ***************/
$catDivider = strpos($row['rggmcat'],',');
if ($catDivider == false) {
if (!$catImg[$row['rggmcat']]) {
if (!file_exists('uploads/tx_rggooglemap/dot.png')) {
copy($this->conf['defaultPOIIcon'],'uploads/tx_rggooglemap/dot.png');
}
$catImg[$row['rggmcat']] = 'dot.png';
}
$img = $catImg[$row['rggmcat']];
#
} else {
$firstCat = substr($row['rggmcat'],0,$catDivider);
$img = $catImg[$firstCat];
}
$test = '';
# $conf['recursive'] = 2;
$this->addRecord($table, $row,$conf, $img,$test);
/********** nachher ***************/
$catDivider = strpos($row['rggmcat'],',');
if ($catDivider == false) {
if (!$catImg[$row['rggmcat']]) {
if (!file_exists('uploads/tx_rggooglemap/dot.png')) {
copy($this->conf['defaultPOIIcon'],'uploads/tx_rggooglemap/dot.png');
}
$catImg[$row['rggmcat']] = 'dot.png';
}
$img = $catImg[$row['rggmcat']];
$leftOff = $leftOffset[$row['rggmcat']];
$topOff = $topOffset[$row['rggmcat']];
#
} else {
$firstCat = substr($row['rggmcat'],0,$catDivider);
$img = $catImg[$firstCat];
$leftOff = $leftOffset[$firstCat];
$topOff = $topOffset[$firstCat];
}
$test = '';
# $conf['recursive'] = 2;
// Bildgröße ermitteln
unset($info);
$info = getimagesize('uploads/tx_rggooglemap/'.$img);
$row['image_width'] = $info[0];
$row['image_height'] = $info[1];
$row['left_offset'] = $leftOff;
$row['top_offset'] = $topOff;
$this->addRecord($table, $row,$conf, $img,$test);
/*******************************************/
-----------------------------------------------------
function addRecord($table, $row,$conf, $img,$test) {
/* Zeile 1659 geändert in */
$this->lines[]=$this->Icode.'<marker image_height="'.$row['image_height'].'" image_width="'.$row['image_width'].'" top_offset="'.$row['top_offset'].'" left_offset="'.$row['left_offset'].'" cat="'.$row['rggmcat'].'" uid="'.$row["uid"].'" lng="'.$row['lng'].'" lat="'.$row['lat'].'" img="'.$img.'" table="'.$row['table'].'" test="'.$test.'" >';
Dann habe ich die gm.js angepasst, indem ich folgende Zeile einfach entfernt habe:
var baseIcon = new GIcon();
//baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(16, 16);
//baseIcon.shadowSize = new GSize(37, 34);
//baseIcon.iconAnchor = new GPoint(5, 8-);
baseIcon.iconAnchor = new GPoint(8, 8-);
baseIcon.infoWindowAnchor = new GPoint(32, 32);
baseIcon.infoShadowAnchor = new GPoint(80, 25);
baseIcon.transparent = "http://www.google.com/mapfiles/markerTransparent.png";
Dann nochmals in der class.tx_rggooglemap_pi1.php folgende Änderungen:
function getXMLData(clearOverlay) {
/********** vorher ************/
for (var i = 0; i < markers.length; i++) {
// obtain the attribues of each marker
var lat = parseFloat(markers[i].getAttribute("lat"));
var lng = parseFloat(markers[i].getAttribute("lng"));
var point = new GLatLng(lat,lng);
var title = [GXml.value(markers[i].getElementsByTagName("t")[0]) ];
var id = parseFloat(markers[i].getAttribute("uid"));
var table = markers[i].getAttribute("table");
var img = markers[i].getAttribute("img");
marker = createMarker(point, id, img, title, table);
clusterer.RemoveMarker( marker );
if (!gmarkers[id]) {
gmarkers[id] = marker;
//clusterer.AddMarker(marker,title);
'.$addMarker.'
}
}
/******************* nachher ********************/
for (var i = 0; i < markers.length; i++) {
// obtain the attribues of each marker
var lat = parseFloat(markers[i].getAttribute("lat"));
var lng = parseFloat(markers[i].getAttribute("lng"));
var l_off = parseFloat(markers[i].getAttribute("left_offset"));
var t_off = parseFloat(markers[i].getAttribute("top_offset"));
var width = parseFloat(markers[i].getAttribute("image_width"));
var height = parseFloat(markers[i].getAttribute("image_height"));
var point = new GLatLng(lat,lng);
var title = [GXml.value(markers[i].getElementsByTagName("t")[0]) ];
var id = parseFloat(markers[i].getAttribute("uid"));
var table = markers[i].getAttribute("table");
var img = markers[i].getAttribute("img");
marker = createMarker(point, id, img, title, table,l_off,t_off,width,height);
clusterer.RemoveMarker( marker );
if (!gmarkers[id]) {
gmarkers[id] = marker;
//clusterer.AddMarker(marker,title);
'.$addMarker.'
}
}
und zu guter letzt in selber Datei
function createMarker(point, id, img, title,table,l_off,t_off,width,height) {
// kein BaseIcon verwenden
// var icon = new GIcon(baseIcon);
var icon = new GIcon();
icon.iconSize = new GSize(width, height);
icon.iconAnchor = new GPoint(l_off, t_off);
icon.infoWindowAnchor = new GPoint(32, 32);
icon.infoShadowAnchor = new GPoint(8, 8-);
icon.transparent = "http://www.google.com/mapfiles/markerTransparent.png";
Sooo...
Ganz schön harter Tobak. Vielleicht hilft es einem.
Vielleicht nimmt Georg diese Abwandlungen, um die Extension zu updaten :-)
Grüße
McGregor
P.S. Mit diesen Änderungen kann das Bild dynamisch geändert und die Position angepasst werden.