<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jörg Bösche - Web &#38; Fotografie &#187; CakePHP</title>
	<atom:link href="http://blog.joergboesche.de/themen/web/cakephp/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.joergboesche.de</link>
	<description>(Szene-)Fotografie - Webdevelopment - Suchmaschinenoptimierung - Privat</description>
	<lastBuildDate>Sat, 21 Jan 2012 20:48:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Google-Maps Tool bei favicate.de: Latitude &amp; Longitude finden!</title>
		<link>http://blog.joergboesche.de/google-maps-tool-bei-favicate-de-latitude-longitude-finden</link>
		<comments>http://blog.joergboesche.de/google-maps-tool-bei-favicate-de-latitude-longitude-finden#comments</comments>
		<pubDate>Tue, 14 Jun 2011 20:01:07 +0000</pubDate>
		<dc:creator>Jörg</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[favicate]]></category>
		<category><![CDATA[gmaps]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[latitude]]></category>
		<category><![CDATA[longitude]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[Webentwicklung & Programmierung]]></category>

		<guid isPermaLink="false">http://blog.joergboesche.de/?p=739</guid>
		<description><![CDATA[Jeder Webapplikation-Entwickler kennt das Problem, dass er vor der Aufgabe steht und soll für eine Umkreissuche die richtigen Koordinaten für die Adresse und den Ort ermitteln. Oftmals muss kurzfristig anhand einer Adresse die geographische Länge (Längen- und Breitengrad) ermittelt werden und das passende Tool bzw. die passende Applikation fehlt. Durch die Entwicklung der API’s von [...]]]></description>
			<content:encoded><![CDATA[<p> 	Jeder Webapplikation-Entwickler kennt das Problem, dass er vor der Aufgabe steht und soll für eine Umkreissuche die richtigen Koordinaten für die Adresse und den Ort ermitteln. Oftmals muss kurzfristig anhand einer Adresse die geographische Länge (Längen- und Breitengrad) ermittelt werden und das passende Tool bzw. die passende Applikation fehlt. Durch die Entwicklung der API’s von Google und dessen Programm „Google Maps“, ist es möglich geworden anhand weniger Codezeilen die Ermittlung von Längen- und Breitengrad zu programmieren. Webapplikation-Entwickler stehen unter Zeitdruck und möchten schnell an die gewünschten Daten der API’s gelangen.</p>
<p><a title="Längengrad &amp; Breitengrad (geographische Länge) mit Google Maps finden" href="http://www.favicate.de/geo-laengen-breitengrade" target="_blank"><img class="aligncenter size-medium wp-image-740" title="Längengrad &amp; Breitengrad (geographische Länge) mit Google Maps finden" src="http://blog.joergboesche.de/wp-content/uploads/2011/06/favicate-geo-laengen-und-breitengrad-gmaps-295x300.png" alt="Längengrad &amp; Breitengrad (geographische Länge) mit Google Maps finden" width="295" height="300" /></a></p>
<p>Zahlreiche Tools und PHP-Skripte ermöglichen zwar über die Google-Maps XML-API die Anfragen zu stellen, jedoch werden<span id="more-739"></span> zu viele Daten und sehr verschachtelt über die XML-Struktur zurückgegebenen. Anhand dieser Kriterien (Zeitdruck, komplizierte API’s, …) wurde auf der Seite von <a title="Längen- und Breitengrad via Google Maps ermitteln." href="http://www.favicate.de/geo" target="_blank">www.favicate.de</a> ein Google-Maps Tool veröffentlicht, welches sich mit der Ermittlung der Latitude und Longitude (Längen- und Breitengrad) befasst. Ausreichend zur Ermittlung der geographischen Länge sind Adressdaten in Form von „Straße und Hausnummer, Postleitzahl, Ort, Land“ oder noch einfacher die Eingabe eines bekannten Platzes oder Ortes. (zum Beispiel: Brandenburger Tor, Berlin)<br />
Als optische Aufbereitung wird zu den Längen- und Breitengraden die Google-Maps-Karte via JavaScript geladen und zeigt die Zieladresse mit einem Marker (Pointer) an. Per Drag and Drop lassen sich die Koordinaten verändern und die Längen- und Breitengrade verändern sich automatisch. (on-the-fly). Für Webapplikation-Entwickler wurde ein Bereich eingerichtet, welcher die Daten direkt für die Copy &amp; Paste-Funktion aufbereitet und direkt in eine Datenbank, kommasepariert, zur Verfügung stellt.</p>
<p>Erweiterungswünsche und Tipps sind immer herzlich willkommen.</p>
<p style="text-align: right;">Bildquelle: <a title="Favicate - Web-Tools &amp; Favicon hochladen" href="http://www.favicate.de" target="_blank">favicate.de</a>, <a title="Google Maps" href="http://maps.google.com" target="_blank">GoogleMaps-Karte</a> (Stand: 14.06.2011)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joergboesche.de/google-maps-tool-bei-favicate-de-latitude-longitude-finden/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP: Umkreissuche mittels OpenGeoDB und CakePHP</title>
		<link>http://blog.joergboesche.de/cakephp-umkreissuche-mittels-opengeodb-und-cakephp</link>
		<comments>http://blog.joergboesche.de/cakephp-umkreissuche-mittels-opengeodb-und-cakephp#comments</comments>
		<pubDate>Tue, 13 Jul 2010 20:13:04 +0000</pubDate>
		<dc:creator>Jörg</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[breitengrad]]></category>
		<category><![CDATA[codesnippet]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[längengrad]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[umkreissuche]]></category>

		<guid isPermaLink="false">http://blog.joergboesche.de/?p=659</guid>
		<description><![CDATA[Umkreissuchen werden durch moderne Dienste wie Google-Maps auf Internetauftritten immer beliebter. Gerade Unternehmen nutzen diesen Dienst gerne, um Partner oder Fachbetriebe in der Region für den Besucher optisch und auch bedienerfreundlich zu präsentieren. Da sich viele Programmierer an der Umkreissuche aufgrund der Längen- und Breitengrade scheuen, habe ich ein kleines Codesnippet aufbereitet. Dieses Codesnippet benutze [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_547" class="wp-caption alignleft" style="width: 160px"><a href="http://blog.joergboesche.de/wp-content/uploads/2009/07/cake-logo.png"><img class="size-thumbnail wp-image-547" title="CakePHP: the rapid development php framework" src="http://blog.joergboesche.de/wp-content/uploads/2009/07/cake-logo-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">CakePHP: the rapid development php framework</p></div>
<p>Umkreissuchen werden durch moderne Dienste wie Google-Maps auf Internetauftritten immer beliebter.<br />
Gerade Unternehmen nutzen diesen Dienst gerne, um Partner oder Fachbetriebe in der Region für den Besucher optisch und auch bedienerfreundlich zu präsentieren. Da sich viele Programmierer an der Umkreissuche aufgrund der Längen- und Breitengrade scheuen, habe ich ein kleines Codesnippet aufbereitet.</p>
<p>Dieses Codesnippet benutze ich selbst bei meinen <strong>Umkreissuchen</strong> und die Abweichung ist recht gering. Die mySQL-Query ist ein Standard, der auch bei der OpenGeoDB und mySQL-Queries eingesetzt wird.<br />
Das Framework CakePHP arbeitet auf dem Model-View-Controller-Prinzip und um diese Umkreissuche recht CakePHP-konform zu gestalten, <span id="more-659"></span>habe ich mir die Mühe gemacht und die Fields, Conditions, Groups und Ergebnisse als Array aufzuteilen, sodass die Anpassung sehr einfach zu gestalten ist.</p>
<p>Auf www.codeblocks.de könnt ihr den Codesnippet für die Umkreissuche in CakePHP einsehen. Dort gehe ich auf ein Beispiel mit Firmen,  diese eine Postleitzahl und Längen- und Breitengrade enthalten, und der OpenGeoDB ein.</p>
<p>Sicherlich gibt es viele weitere Ansätze die <strong>Umkreissuche</strong> zu gestalten. - Dies soll nur als Beispiel und Hilfe für die Entwicklung einer<a title="Umkreissuche mit Längen- und Breitengraden in CakePHP" href="http://www.codeblocks.de/cakephp" target="_blank"><strong> Umkreissuche in CakePHP</strong></a> dienen.</p>
<p>Codesnippet als Plain-Text hier zum Download: <a href="http://blog.joergboesche.de/wp-content/uploads/2010/07/cakephp-umkreissuche.txt" target="_blank" title="Umkreissuche mit CakePHP gestalten">Umkreissuche mit CakePHP gestalten</a> (TXT-File)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joergboesche.de/cakephp-umkreissuche-mittels-opengeodb-und-cakephp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP-Shells als Cronjob auf Shared-Server einrichten</title>
		<link>http://blog.joergboesche.de/cakephp-shells-als-cronjob-auf-shared-server-ausfuehren</link>
		<comments>http://blog.joergboesche.de/cakephp-shells-als-cronjob-auf-shared-server-ausfuehren#comments</comments>
		<pubDate>Sun, 13 Dec 2009 22:18:44 +0000</pubDate>
		<dc:creator>Jörg</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[bake]]></category>
		<category><![CDATA[bakery]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[cronjob]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[http-cronjob]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[shared]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://blog.joergboesche.de/?p=626</guid>
		<description><![CDATA[Bei der Entwicklung von Internetauftritten wird es immer wichtiger mit nächtlichen Cronjobs zu arbeiten, diese einem die Arbeit der Datenvalidierung oder Datenerfassung erleichtern. Da die Kunden nicht immer über einen Managed- oder RootServer verfügen, ist es kaum möglich mit der CakePHP-Console zu arbeiten. Über die CakePHP-Console lassen sich Models, Views, Controller und auch die wichtigen [...]]]></description>
			<content:encoded><![CDATA[<p> 	Bei der Entwicklung von Internetauftritten wird es immer wichtiger mit nächtlichen Cronjobs zu arbeiten, diese einem die Arbeit der Datenvalidierung oder Datenerfassung erleichtern.</p>
<p>Da die Kunden nicht immer über einen Managed- oder RootServer verfügen, ist es kaum möglich mit der CakePHP-Console zu arbeiten. Über die CakePHP-Console lassen sich Models, Views, Controller und auch die wichtigen Shells entwickeln.</p>
<p>Eine Shell ist dazu da, um kommandozeilenbaiserende Skripte zu schreiben, diese aber vom Benutzer entfernt bleiben.<br />
Wie oben bereits angesprochen, z.B. die Datenvalidierung oder ein nächtlicher Export von Datensätzen als CSV-Datei.<br />
Ein Export der Datenbank kann u.a. bei APIs oder Shopsystemen sehr vorteilhaft sein.</p>
<p>Um auch die CakePHP-Shell auf einem Shared-Host / Shared-Server via HTTP-Request ausführen zu können,<br />
muss der PHP-Befehl "exec()" aktiviert sein. Darüber lassen sich in einem PHP-Skript diverse Kommandozeilen starten.</p>
<p>In unserem Fall auch die CakePHP-Shell und das als HTTP-Request.<br />
Natürlich ist es wichtig, dass ihr eure PHP-Skripte dementsprechend vor Fremdeingriffe schützt.<br />
Eine .htaccess Authentifizierung oder PHP_AUTH-Methode wäre hier angebracht. Viele Cronjob-Dienste können die HTTP-Requests auch mit einem Benutzernamen und Passwort übersenden. Das PHP-Modul cUrl macht es möglich.</p>
<p><strong>Wie führe ich die CakePHP-Shell in einem PHP-Skript aus?</strong><br />
Beim Hoster all-inkl muss der exec()-Befehl vorher durch eine .htaccess mit " AddHandler php-fastcgi .php" <span id="more-626"></span>Datei freigeschaltet werden.</p>
<p>Die Cronjob.php-Datei legt ihr in das Verzeichnis "/app/webroot/_cronjob/" ab.<br />
Den Ordner "_cronjob" müsst ihr vorher anlegen. - Darin wird auch die "log.txt" geschrieben.</p>
<p>Bei " here_comes_the_vendors_shell_file" wird die CakePHP-Shell-Datei angegeben. Z.B.: csv_export, diese im Verzeichnis /app/vendors/shells/csv_export.php" liegt.</p>
<blockquote><p>&lt;?php<br />
$app_dir = dirname(dirname(dirname(__FILE__))); // app Path<br />
$cake_dir = dirname(dirname(dirname(dirname(__FILE__)))); // cake-core Path<br />
$logfile = $app_dir."/webroot/_cronjobs/log.txt"; // Log-File Path define(RECEIVER,'email@domain.de');<br />
define(EMAIL_SUBJECT, 'CakePHP SHELL Cronjob');</p>
<p>$command = "php ".$cake_dir."/cake/console/cake.php -app ".$app_dir."/ -core ".$cake_dir."/cake/ -i cake here_comes_the_vendors_shell_file &gt; ".$logfile; // exec command with cakephp-shell exec($command);</p>
<p>// get log.txt content for e-mail-body<br />
$msg = file_get_contents($logfile);<br />
mail(RECEIVER,EMAIL_SUBJECT,$msg); // send mail to defined receiver<br />
?&gt;</p></blockquote>
<p>Die Ausgabe der Shell wird in eine Datei umgelenkt und bei jedem Aufruf neu geschrieben.<br />
Eine E-Mail an einen oben definierten Empfänger wird mit genau diesem Inhalt verschickt.</p>
<p><strong>Wie führe ich die CakePHP-Shell auf einem Managed- oder RootServer aus?</strong><br />
Hierzu gibt es eine sehr ausführliche Dokumentation auf <a title="CakePHP-Shells als Cronjob ausführen" href="http://book.cakephp.org/de/view/846/Running-Shells-as-cronjobs" target="_blank" rel="nofollow">book.cakephp.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joergboesche.de/cakephp-shells-als-cronjob-auf-shared-server-ausfuehren/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP: Linklift Marketing implementieren</title>
		<link>http://blog.joergboesche.de/cakephp-linklift-marketing-implementieren</link>
		<comments>http://blog.joergboesche.de/cakephp-linklift-marketing-implementieren#comments</comments>
		<pubDate>Sun, 05 Jul 2009 13:16:42 +0000</pubDate>
		<dc:creator>Jörg</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[entwicklung]]></category>
		<category><![CDATA[framwork]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[linklift]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programmierung]]></category>
		<category><![CDATA[Webentwicklung & Programmierung]]></category>

		<guid isPermaLink="false">http://blog.joergboesche.de/?p=546</guid>
		<description><![CDATA[Das Onlinemarketing-System Linklift für Textlinkverkäufe bietet eine PHP-Schnittstelle für die Integration der verkauften Textlinks auf dem eigenen Internetauftritt an. Diverse Content-Management-Systeme werden dabei angeboten, jedoch keine Implementierungs-Hilfe für das Framework CakePHP. Da ich derzeit mit dem Framework CakePHP entwickel, musste ich eine Lösung des Problems finden. Da CakePHP mit Models, Controllern, und Views arbeitet, lässt [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_547" class="wp-caption alignleft" style="width: 190px"><a href="http://blog.joergboesche.de/cakephp-linklift-marketing-implementieren/"><img class="size-full wp-image-547" title="CakePHP: the rapid development php framework" src="http://blog.joergboesche.de/wp-content/uploads/2009/07/cake-logo.png" alt="CakePHP: the rapid development php framework" width="180" height="180" /></a><p class="wp-caption-text">CakePHP: the rapid development php framework</p></div>
<p>Das Onlinemarketing-System Linklift für Textlinkverkäufe bietet eine PHP-Schnittstelle für die Integration der verkauften Textlinks auf dem eigenen Internetauftritt an.</p>
<p>Diverse Content-Management-Systeme werden dabei angeboten, jedoch keine Implementierungs-Hilfe für das Framework CakePHP. Da ich derzeit mit dem Framework CakePHP entwickel, musste ich eine Lösung des Problems finden.</p>
<p>Da CakePHP mit Models, Controllern, und Views arbeitet, lässt sich die standardgemäße "include /require" Variante nicht problemlos einsetzen.</p>
<p>Dafür gibt es in CakePHP die App:import-Variante. Eigentlich ist es ganz einfach eigene Vendor(s) / Plugins zu implementieren, jedoch hat Linklift leider schon eine automatisierte Initialisierung der PHP-Klasse und gibt nur noch per ECHO die Werte zurück. So besteht keine Möglichkeit mehr die Ausgabe in eine temporäre Variable zu speichern oder die Ausgabe zu beeinflussen.<span id="more-546"></span></p>
<p>Durch die Echo-Ausgabe wird in CakePHP die Darstellung des App-Vendors im Kopfbereich der Seite ausgegeben.<br />
Dies ist denkbar ungünstig, wenn man z.B. die Ausgabe im Footerbereich des Internetauftritts haben möchte.</p>
<p>Meine Lösung ist nun die, dass ich mir die Linklift-PHP-Datei (Linklift-API) per App::import holte und diese direkt in den Footer meines Layouts ausgebe.</p>
<pre>&lt; ?php App::import('Vendor','linklift', array('file' =&gt; 'linklift.inc.php')); ?&gt;</pre>
<p>Im app/vendors/ Ordner liegt eine Datei namens "linklift.inc.php", worin sich der generierte Linklift Code befindet.<br />
Da ich die Datei nicht jedesmal nach einem Update von Seiten Linklifts aktualisieren / anpassen möchte, style ich mir die Ausgabe später per CSS nach (!important - Anweisungen via CSS).<br />
Sicherlich könnte die Ausgabe und Initialisierung der Linklift-Class händisch angepasst werden, jedoch wenn ein Update kommt, muss alles von Neuem angepasst werden. Daher die oben beschriebene Variante.</p>
<p>Die XML-Datei legt ihr in das "/app/webroot/"-Verzeichnis, da dieses als "Root-Verzeichnis" für eure Domain angesehen wird.</p>
<p>Vielleicht kann ich mit diesem kleinen Tipp die Integration von Linklift-Skripten erleichtern.</p>
<p>Wer noch weitere Möglichkeiten oder Tipps parat hat, kann sie mir gerne als Kommentar in diesem Beitrag hinterlassen.</p>
<p>Bildquelle: <a title="CakePHP Framework" href="http://www.cakephp.org" target="_blank">www.cakephp.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.joergboesche.de/cakephp-linklift-marketing-implementieren/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

