Neues Modul "Google Maps"
Was mir da spontan einfällt:
Die Felder "Strasse", "Hausnummer", "Postleitzahl", "Ort" und "Land" müssen ausgefüllt sein und dürfen AFAIK keine Leerzeichen enthalten.
Die Strasse "Bei der Lohmühle" hab ich z.B. als "Bei_der_Lohmühle" eingetragen.
Ob "Breite der Karte" bzw. "Höhe der Karte" ausgefüllt sein muss bin ich im Moment überfragt. "Text im Infofenster" kann auf jedem Fall leer bleiben.
Die Felder "Strasse", "Hausnummer", "Postleitzahl", "Ort" und "Land" müssen ausgefüllt sein und dürfen AFAIK keine Leerzeichen enthalten.
Die Strasse "Bei der Lohmühle" hab ich z.B. als "Bei_der_Lohmühle" eingetragen.
Ob "Breite der Karte" bzw. "Höhe der Karte" ausgefüllt sein muss bin ich im Moment überfragt. "Text im Infofenster" kann auf jedem Fall leer bleiben.
Frag Tommo
Da Modul ist nicht von mir. Hab es nur auf die neue (?) Google API angepasst.
Wollte es mir immer schon mal ansehen, bin aber ehrlich gesagt noch nicht dazu gekommen. Leerzeichen durch Unterstriche ersetzen hat bislang bei mir immer geklappt.
Ich schick dir dem Code aber noch mal als XML Export, wenn du mir deine Mailadresse per PM schickst.
Da Modul ist nicht von mir. Hab es nur auf die neue (?) Google API angepasst.
Wollte es mir immer schon mal ansehen, bin aber ehrlich gesagt noch nicht dazu gekommen. Leerzeichen durch Unterstriche ersetzen hat bislang bei mir immer geklappt.
Ich schick dir dem Code aber noch mal als XML Export, wenn du mir deine Mailadresse per PM schickst.
Ich habe das Modul jetzt so angepasst, das es mit allow_url_follow = off funktioniert.
Dafür habe ich eine extra Parser-Klasse geschrieben, die über fsocketopen() die Daten bezieht, diese aber so umbastelt, als seien die Daten von fopen() gekommen.
Die nachfolgende Klasse (class.rssCleaner.php) in das Verzeichnis /contenido/classes kopieren/erstellen:
Im Modul sind auch noch ein paar Anpassungen nötig... zudem hab ich den Code etwas aufgeräumt
Hier der Modul-Code:
INPUT
OUTPUT:
Muss mal gesagt werden:
Hier im Forum wird ne Menge gutes Zeug programmiert, aber - nichts für ungut - die Übersichtlichkeit im Code ist bei einem Großteil der Codesniplets meist unter aller Sa... Sa... na Ihr wisst schon
Erleichtert uns und Euch die Arbeit und Programmiert übersichtlicher. Ihr werdet sehen, das spart euch selbst auch ne Menge Zeit, und bei Problemen wird euch direkt doppelt so gern und schnell geholfen!
Dafür habe ich eine extra Parser-Klasse geschrieben, die über fsocketopen() die Daten bezieht, diese aber so umbastelt, als seien die Daten von fopen() gekommen.
Die nachfolgende Klasse (class.rssCleaner.php) in das Verzeichnis /contenido/classes kopieren/erstellen:
Code: Alles auswählen
<?php
/* class.rssCleaner.php
*
* Copyright (c) 2006 Suther Kommunikationsdesign All rights reserved.
* Redistribution of source must retain this copyright notice.
*
* Suther Kommunikationsdesign (http://www.suther.de) specializes in
* website design and software consulting.
*
* Version : 0.0.1
* Created : 26.06.2006
* LastChange by : Samuel Suther
* Changes :
*/
/**
* Class RssCleaner
* Use this class to clean RSS-Feed-Data
* you've get by fsocketopen()-Methode
*/
class RssCleaner {
var $header;
var $content;
function cleanRssData_fsocketopen($rssData, $charset="iso8859-1")
{
// split Header and Content
list($strHeader, $strContent) = explode("\r\n\r\n", $rssData, 2);
$strHeader = explode("\r\n", $strHeader);
$this->setHeader($strHeader);
// del first row with stange chars
list($strAbfall, $strContent) = split("[\r\n]", $strContent, 2);
// del last row
$arr = split("[\r\n]", trim($strContent));
array_pop($arr);
$strContent = implode("\r\n",$arr);
$rssData = trim($strContent);
unset($arr, $strAbfall, $res);
$this->setContent($rssData);
// Convert Charset to needs
$this->convertCharset($charset);
}
function convertCharset($toCharset)
{
foreach($this->header as $row)
{
$i=0;
$row=strtolower($row);
//if charset != $toCharset convert it
if(eregi("charset=",$row) && !eregi($toCharset,$row))
{
$i++;
$tmpCharset = explode("charset=",$row);
$charset = $tmpCharset[1];
switch($charset)
{
case "utf-8":
$this->setContent(utf8_decode($this->getContent()));
$this->header[$i] = eregi_replace($charset,$toCharset,$this->header[$i]);
break;
}
}
}
}
function getHeader()
{
return $this->header;
}
function setHeader($inHeader)
{
$this->header=$inHeader;
}
function getContent()
{
return $this->content;
}
function setContent($inContent)
{
$this->content=$inContent;
}
}
?>
Hier der Modul-Code:
INPUT
Code: Alles auswählen
echo"
<table cellspacing=\"0\" cellpadding=\"5\" border=\"0\">
<tr valign=\"top\">
<td width=\"302\" colspan=\"2\"><strong>Ziel</strong></td>
</tr>
<tr valign=\"top\">
<td width=\"302\">Land</td>
<td><INPUT TYPE=\"text\" NAME=\"CMS_VAR[1]\" VALUE=\"CMS_VALUE[1]\"></td>
</tr>
<tr>
<td colspan=\"2\"><hr style=\"width: 100%;\"></td>
</tr>
<tr valign=\"top\">
<td width=\"302\" colspan=\"2\"><strong>Konfiguration</strong></td>
</tr>
<tr valign=\"top\">
<td width=\"302\">Breite der Karte*</td>
<td><INPUT TYPE=\"text\" NAME=\"CMS_VAR[2]\" VALUE=\"CMS_VALUE[2]\">px</td>
</tr>
<tr valign=\"top\">
<td width=\"302\">Höhe der Karte</td>
<td><INPUT TYPE=\"text\" NAME=\"CMS_VAR[3]\" VALUE=\"CMS_VALUE[3]\">px</td>
</tr>
<tr valign=\"top\">
<td width=\"302\">Kartenart*</td>
<td>
<select name=\"CMS_VAR[8]\">
<option value=\"0\">Karte</option>";
if (CMS_VALUE[8] == 1) {
echo '<option value="1" selected="selected">Satellit</option>';
} else {
echo '<option value="1">Satellit</option>';
}
if (CMS_VALUE[8] == 2) {
echo '<option value="2" selected="selected">Hybrid</option>';
} else {
echo '<option value="2">Hybrid</option>';
}
echo "
</select>
</td>
</tr>
<tr valign=\"top\">
<td width=\"302\">Kartenauswahlfunktion anzeigen*</td>
<td>
<select name=\"CMS_VAR[9]\">
";
if (CMS_VALUE[9] == 1) {
echo '<option value="1" selected="selected">Nein</option>';
} else {
echo '<option value="1">Nein</option>';
}
if (CMS_VALUE[9] == 2) {
echo '<option value="2" selected="selected">Ja</option>';
} else {
echo '<option value="2">Ja</option>';
}
echo "
</select>
</td>
</tr>
<tr valign=\"top\">
<td width=\"302\">Zoomfunktion anzeigen*</td>
<td>
<select name=\"CMS_VAR[10]\">
";
if (CMS_VALUE[10] == 1) {
echo '<option value="1" selected="selected">Aus</option>';
} else {
echo '<option value="1">Aus</option>';
}
if (CMS_VALUE[10] == 2) {
echo '<option value="2" selected="selected">Klein</option>';
} else {
echo '<option value="2">Klein</option>';
}
if (CMS_VALUE[10] == 3) {
echo '<option value="3" selected="selected">Groß</option>';
} else {
echo '<option value="3">Groß</option>';
}
echo "
</select></td></tr><tr><td colspan=2>
<small>*Wenn Breite < 150px werden automatisch alle Buttons ausgeblendet</small>
</td>
</tr>";
echo "</table>";
Code: Alles auswählen
<?php
cInclude("classes", "class.rssCleaner.php");
// Durch input type=hidden in Post umwandeln
if ( !is_object($db) ) {
$db = new DB_Contenido;
}
$sql =" SELECT *
FROM con1_branche
WHERE id = ".$_GET['id']." ";
$db->query($sql);
if ($db->next_record())
{
$str = $db->f('strasse');
$hsn = $db->f('nr');
$plz = $db->f('plz');
$ort = $db->f('ort');
$infotextfenster = $db->f('beschreibung');
}
$land = "CMS_VALUE[1]";
if(empty($land))
$land = "Germany";
$width = CMS_VALUE[2];
if(empty($width))
$width = "200";
$height = CMS_VALUE[3];
if(empty($height))
$height = "200";
$maptyp = CMS_VALUE[8];
$mapcontrol = CMS_VALUE[9];
$zoomcontrol = CMS_VALUE[10];
if($width<201) $smallBtn = "true";
function get_lat_long($q)
{
global $lat,$lon;
$cleanRss = new RssCleaner();
$q = urlencode($q);
$file = "maps.google.com/maps?q=" . str_replace('','+',$q) . "&output=js";
$tmpPath = explode("/","$file",2);
$fileName = explode("/","$file");
$fileName = end($fileName);
$cleanRss->cleanRssData_fsocketopen($fileName);
$this->rssHeader= $cleanRss->getHeader();
$rssData = $cleanRss->getContent();
$tmp = sendPostRequest($tmpPath[0],"/".$tmpPath[1],"");
#$gm = fopen('http://maps.google.com/maps?q=' . str_replace('','+',$q) . '&output=js','r');
#$tmp = @fread($gm,30000);
#fclose($gm);
$pos = strpos($tmp,"center");
$wert = substr($tmp,$pos,70);
$lat = substr($wert,12,9);
$lon = substr($wert,35,8);
}
$q = $str.' '.$hsn.', '.$plz.' '.$ort.', '.$land;
$tmp = get_lat_long($q);
if ($maptyp==2){
$anzeige = "G_HYBRID_MAP";
}elseif ($maptyp==1) {
$anzeige = "G_SATELLITE_MAP";
}else{
$anzeige = "G_NORMAL_MAP";
}
?>
<?php
echo $wert;
$infotext = ereg_replace("(\r\n|\n|\r)", "<br>", $infotextfenster);
?>
<div id="map" style="width: <?php echo $width;?>px; height: <?php echo $height;?>px;overflow:hidden;"></div>
<script type="text/javascript">
//<![CDATA[
function load()
{
if (GBrowserIsCompatible())
{
function createMarker(point,html)
{
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(html);
});
return marker;
}
//Map erstellen und zentrieren, Anzeige der Funktionen
var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(<?php echo $lat;?>, <?php echo $lon;?>), 14, <?php echo $anzeige;?>);
<?
// Anzeige der Wechselbuttons für Karte, Hybrid und gemischt
if ($mapcontrol == 2) {echo "map.addControl(new GMapTypeControl($smallBtn));";}
if($width > 150)
{
if ($zoomcontrol == 2){echo "map.addControl(new GSmallMapControl($smallBtn));";}
if ($zoomcontrol == 3){echo "map.addControl(new GLargeMapControl($smallBtn));";}
}
?>
//marker bei klick
function createMarker(point,html)
{
var marker = new GMarker(point);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(html);
});
return marker;
}
var marker1 = createMarker(new GLatLng(<?php echo $lat;?>, <?php echo $lon;?>),"<? echo $infotext;?>");
map.addOverlay(marker1);
return true;
}
else {
alert("Sorry, the Google Maps API is not compatible with this browser");
}
}//endload
//]]>
</script>
Hier im Forum wird ne Menge gutes Zeug programmiert, aber - nichts für ungut - die Übersichtlichkeit im Code ist bei einem Großteil der Codesniplets meist unter aller Sa... Sa... na Ihr wisst schon
Erleichtert uns und Euch die Arbeit und Programmiert übersichtlicher. Ihr werdet sehen, das spart euch selbst auch ne Menge Zeit, und bei Problemen wird euch direkt doppelt so gern und schnell geholfen!
Zuletzt geändert von rethus am Di 17. Jul 2007, 13:45, insgesamt 1-mal geändert.
hmmm, auch mit diesem code bekomme ich den fehler:
Parse error: parse error, unexpected T_STRING in /var/www/web3/html/contenido/includes/include.con_editcontent.php(644) : eval()'d code on line 1158
was kann das sein? ich hab mal meine include.con_editcontent.php angeschaut, aber ie hat keine 1158 lines.
gruesse rene
Parse error: parse error, unexpected T_STRING in /var/www/web3/html/contenido/includes/include.con_editcontent.php(644) : eval()'d code on line 1158
was kann das sein? ich hab mal meine include.con_editcontent.php angeschaut, aber ie hat keine 1158 lines.
gruesse rene
@rene04:
Haste schon mal in Erwägung gezogen, das es auch an anderen Modulen liegen kann, die in dem gleichen Template eingebunden sind.
Hatte mal massive Problem bei nem anderen Modul, weil es sich mit der Benennung von ner Funktion eines anderen Moduls gehackt hat.
Schalte mal alle anderen Module im Template aus - lass nur Google-Maps drin und probier es. Wenns funktioniert fein, dann schaltest du alle Module wieder nach und nach zu und dann wirst du feststellen wo der Fehler liegt.
Übrigens: Wenn du einen Fehler hast, schalte den Debug-modus ein, und hackel den PHP-Code durch... das machen alle von uns
TIPP: Fehlereingrenzung ist immer der erste Schritt zur Lösung
Haste schon mal in Erwägung gezogen, das es auch an anderen Modulen liegen kann, die in dem gleichen Template eingebunden sind.
Hatte mal massive Problem bei nem anderen Modul, weil es sich mit der Benennung von ner Funktion eines anderen Moduls gehackt hat.
Schalte mal alle anderen Module im Template aus - lass nur Google-Maps drin und probier es. Wenns funktioniert fein, dann schaltest du alle Module wieder nach und nach zu und dann wirst du feststellen wo der Fehler liegt.
Übrigens: Wenn du einen Fehler hast, schalte den Debug-modus ein, und hackel den PHP-Code durch... das machen alle von uns
TIPP: Fehlereingrenzung ist immer der erste Schritt zur Lösung
map geht leider keine Sprechblase
also mit der letzten anweisung funktioniert das Map modul soweit wie es soll. Bis auf die Tatsache dass der Beschreibungstext und der Marker nicht angezeigt werde.
Ich bekomme aber auch keine Fehler meldung oder sonst was.
Bin für jede Hilfe dankbar.
Ich bekomme aber auch keine Fehler meldung oder sonst was.
Bin für jede Hilfe dankbar.
Gruß
Jochen K
Jochen K
Jups, da war noch ein kleiner Fehler drin. Hab oben den Code neu gepostet.
Dort ist jetzt auch neuer INPUT-CODE, da ich den Spaß so angepasst habe, das er die Daten nur für einen Eintrag aus der DB nimmt (angepasst für mein Branchenbuch).
Falls du nur den Fehler beheben willst, dann musst du auf die $lat und $lon Werte achten. Bei mir funzte es, wenn ich folgendes geändert habe:
Dort ist jetzt auch neuer INPUT-CODE, da ich den Spaß so angepasst habe, das er die Daten nur für einen Eintrag aus der DB nimmt (angepasst für mein Branchenbuch).
Falls du nur den Fehler beheben willst, dann musst du auf die $lat und $lon Werte achten. Bei mir funzte es, wenn ich folgendes geändert habe:
in$lon = substr($wert,35,9);
Weil da sonst irgendwie ein } dazwischengerutscht war.$lon = substr($wert,35,8);
und ohne diese Db
Hat sich erledigt: habe das Orginal Input modul mit deinem Ausgabemodul ohne Db Abfrage um bzw zusammengebastelt
und wenn man dein modul der KontaktDb nicht nutzen will/kann soll/
Wie sieht der Input/output dann aus?
gruss Jochen
und wenn man dein modul der KontaktDb nicht nutzen will/kann soll/
Wie sieht der Input/output dann aus?
gruss Jochen
Gruß
Jochen K
Jochen K
dieses Modul für 4.4.5
Hallo,
wie kann man das klasse Modul für die Version 4.4.5 anpassen?
Diese Fehlermeldung in der Templatekonfiguration sieht so aus:
contenido/includes/include.pretplcfg_edit_form.php(131) : eval()'d code on line 46
Für eine kurze Info wäre dankbar.
Viele Grüsse vom Bodensee, Uwe
wie kann man das klasse Modul für die Version 4.4.5 anpassen?
Diese Fehlermeldung in der Templatekonfiguration sieht so aus:
contenido/includes/include.pretplcfg_edit_form.php(131) : eval()'d code on line 46
Für eine kurze Info wäre dankbar.
Viele Grüsse vom Bodensee, Uwe
Hier noch eine Verbesserung, weil die Ermittlung der Geo-Daten noch buggy war.
Manchmal wurde die ein oder andere Adresse nicht angezeigt, weil die ermittelten Werte von lat: nicht immer die gleiche Zeichenausgabelänge haben.
Ersetzt einfach am Ende der Funktionget_lat_long($q) die Zeilen
durch:
So haben auch die Ständigen Fehler, die aufgrund dieser String-Zusammensetzung hier des öfteren auftauchten endlich ein Ende![/quote]
Manchmal wurde die ein oder andere Adresse nicht angezeigt, weil die ermittelten Werte von lat: nicht immer die gleiche Zeichenausgabelänge haben.
Ersetzt einfach am Ende der Funktionget_lat_long($q) die Zeilen
Code: Alles auswählen
$pos = strpos($tmp,"center");
$wert = substr($tmp,$pos,70);
$lat = substr($wert,12,9);
$lon = substr($wert,35,8);
Code: Alles auswählen
// Beginne nach lat: und ende vor dem nächsten ,
$latStart = (int) strpos($wert,"lat:")+ strlen("lat:");
$latEnd = (int) strpos($wert,",lng:") - $latStart;
$lat = substr($wert,$latStart,$latEnd);
// Beginne nach lat: und ende vor dem nächsten }
$lonStart = (int) strpos($wert,"lng:")+ strlen("lng:");
$lonEnd = (int) strpos($wert,"}")-$lonStart;
$lon = substr($wert,$lonStart,$lonEnd);
Fuktioniert fast:
Die Daten von Google sind wohl recht unterschiedlich. Ich muste zusätzlich das ändern:
durch:
ersetzen
dann wie schon oben gepostet:
Die Daten von Google sind wohl recht unterschiedlich. Ich muste zusätzlich das ändern:
Code: Alles auswählen
$pos = strpos($tmp,"center");
$wert = substr($tmp,$pos,70);
Code: Alles auswählen
$pos = strpos($tmp,"center");
$pos2 = strpos($tmp,"}");
$wert = substr($tmp,$pos, $pos2);
dann wie schon oben gepostet:
Code: Alles auswählen
// Beginne nach lat: und ende vor dem nächsten ,
$latStart = (int) strpos($wert,"lat:")+ strlen("lat:");
$latEnd = (int) strpos($wert,",lng:") - $latStart;
$lat = substr($wert,$latStart,$latEnd);
// Beginne nach lat: und ende vor dem nächsten }
$lonStart = (int) strpos($wert,"lng:")+ strlen("lng:");
$lonEnd = (int) strpos($wert,"}")-$lonStart;
$lon = substr($wert,$lonStart,$lonEnd);