<?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>PHP Gangsta - Der PHP Blog mit Praxisbezug &#187; excel</title> <atom:link href="http://www.phpgangsta.de/tag/excel/feed" rel="self" type="application/rss+xml" /><link>http://www.phpgangsta.de</link> <description>Ein PHP Blog mit Themen aller Art. Manchmal vergewaltige ich PHP...</description> <lastBuildDate>Thu, 02 Feb 2012 22:22:51 +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>Nicht-HTML-Responses mit dem Zend Framework</title><link>http://www.phpgangsta.de/nicht-html-responses-mit-dem-zend-framework</link> <comments>http://www.phpgangsta.de/nicht-html-responses-mit-dem-zend-framework#comments</comments> <pubDate>Thu, 02 Jul 2009 12:52:19 +0000</pubDate> <dc:creator>Michael Kliewe</dc:creator> <category><![CDATA[PHP]]></category> <category><![CDATA[ajax]]></category> <category><![CDATA[excel]]></category> <category><![CDATA[html]]></category> <category><![CDATA[rss]]></category> <category><![CDATA[zend framework]]></category> <category><![CDATA[Zend_Layout]]></category><guid isPermaLink="false">http://www.phpgangsta.de/?p=157</guid> <description><![CDATA[Wenn man dynamische Bilder oder RSS-Feeds oder einen AJAX/JSON-Service oder ein Excel-Export mithilfe des Zend Frameworks erstellen will, mußt man 2-3 wichtige Dinge beachten. Der Code soll dann in einem Rss-/Graph-/Ajax-/Export-Controller stehen. Ein Problem bekommt man, wenn man ein Layout benutzt (Zend_Layout). Denn dann wird dieses Layout immer ausgegeben. Im hier betrachteten Fall wäre das [...]<br/><br/> Ähnliche Artikel:<ol><li><a href='http://www.phpgangsta.de/php-und-das-zend-framework' rel='bookmark' title='PHP und das Zend Framework'>PHP und das Zend Framework</a></li></ol>]]></description> <content:encoded><![CDATA[<p>Wenn man dynamische Bilder oder RSS-Feeds oder einen AJAX/JSON-Service oder ein Excel-Export mithilfe des Zend Frameworks erstellen will, mußt man 2-3 wichtige Dinge beachten. Der Code soll dann in einem Rss-/Graph-/Ajax-/Export-Controller stehen.</p><p>Ein Problem bekommt man, wenn man ein Layout benutzt (Zend_Layout). Denn dann wird dieses Layout immer ausgegeben. Im hier betrachteten Fall wäre das aber sehr schädlich, denn dadurch würden wir unser Bild/RSS-Feed/AJAX/Excel-Response zerstören.</p><p><strong>Unschön</strong> kann man das wie folgt lösen:</p><pre class="brush: php; title: ; notranslate">public function rssAction()
{
	// calculate rss data and echo it (with correct headers)

	exit;
}</pre><p><strong>Richtig und deutlich schöner</strong> ist das Abschalten des Layout in der Action, wie folgt:</p><pre class="brush: php; title: ; notranslate">public function rssAction()
{
	// disable layout
	$this-&gt;_helper-&gt;layout()-&gt;disableLayout();

	// disable view rendering
	$this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender();

	// calculate rss data and echo it (with correct headers)
}</pre><p>Wir schalten auch gleich noch den ViewRenderer mit aus, damit auch nicht versucht wird, ein Viewscript zu rendern (das es wahrscheinlich garnicht gibt).</p><p>Dieses RSS-Beispiel funktioniert natürlich genauso für die anderen Beispiele, wo kein klassischer HTML-Quelltext zurückgegeben werden soll, sondern eine Antwort in einem anderen Format gefordert ist.</p><p>Damit kann man dann seine dynmisch erstellten Bilder (z.B. mittels <a href="http://pchart.sourceforge.net/" target="_blank">pChart</a>, <a href="http://www.aditus.nu/jpgraph/" target="_blank">jpgraph</a> oder direkt die <a href="http://de.php.net/manual/en/book.image.php" target="_blank">GD-Funktionen/image* in php</a>), RSS-Feeds (<a href="http://framework.zend.com/manual/en/zend.feed.html" target="_blank">Zend_Feed</a>), Ajax-Services (<a href="http://framework.zend.com/manual/de/zend.json.html" target="_blank">Zend_Json</a>) usw. realisieren.</p><p>Hier noch schnell ein Beispiel eines Excel-Exports aus einer Datenbank, mit Hilfe der Spreadsheet-Klasse aus dem PEAR-Framework (vereinfacht auf das Wesentliche):</p><pre class="brush: php; title: ; notranslate">class ExportController extends Zend_Controller_Action
{
	public function excel() {
		// disable layout
		$this-&gt;_helper-&gt;layout()-&gt;disableLayout();

		// disable view rendering
		$this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender();

		// get some data from database here

		// create empty file
		//include 'Spreadsheet/Excel/Writer.php';
		$excel = new Spreadsheet_Excel_Writer();
		// add worksheet
		$sheet =&amp; $excel-&gt;addWorksheet('Daily Export');

		$sheet-&gt;setColumn(0,0,20);
		$sheet-&gt;setColumn(1,1,15);
		$sheet-&gt;setColumn(2,2,18);
		$sheet-&gt;setColumn(3,3,23);
		$sheet-&gt;setColumn(4,4,35);
		$sheet-&gt;setColumn(5,5,15);

		$format_bold =&amp; $excel-&gt;addFormat();
		$format_bold-&gt;setBold();

		$format_headline =&amp; $excel-&gt;addFormat();
		$format_headline-&gt;setBold();
		$format_headline-&gt;setSize(20);
		$format_headline-&gt;setAlign('center');

		// headline
		$sheet-&gt;write(0, 0, 'Results: '.date('d.m.Y H:i'), $format_headline);
		$sheet-&gt;mergeCells(0,0,0,5);

		// add data to worksheet
		$rowCount=2;

		foreach ($data as $groupName=&gt;$serverData) {
			$sheet-&gt;write($rowCount, 0, $groupName, $format_bold);
			$rowCount++;

			foreach ($serverData as $row) {
				$colcount = 0;
				foreach ($row as $key =&gt; $value) {
					$sheet-&gt;write($rowCount, $colcount, $value);
					$colcount++;
				}
				$rowCount++;
			}
			$rowCount++;
		}
		// send client headers
		$excel-&gt;send('daily_export_'.date(&quot;Ymd-His&quot;).'.xls');
	}
}</pre><p>Dies hier ist alter Code, mittlerweile nutzen wir <a href="http://phpexcel.net/">PHPExcel</a>.</p> <br/><br/><p>Ähnliche Artikel:</p><ol><li><a href='http://www.phpgangsta.de/php-und-das-zend-framework' rel='bookmark' title='PHP und das Zend Framework'>PHP und das Zend Framework</a></li></ol>]]></content:encoded> <wfw:commentRss>http://www.phpgangsta.de/nicht-html-responses-mit-dem-zend-framework/feed</wfw:commentRss> <slash:comments>5</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: basic
Database Caching 1/16 queries in 0.051 seconds using disk: basic
Object Caching 596/612 objects using disk: basic

Served from: www.phpgangsta.de @ 2012-02-08 00:25:50 -->
