Schnippsel

Code-Schnippsel – Coding-History

Hinführung

Vieles, was man mit der Zeit so entwickelt hat – kleinere Funktionen und Ideen aber auch Helferlein sind gemeint – geht irgendwie verloren in so einem Entwicklerleben. Eigentlich Schade, wenn man sich nicht mehr so recht an die tollen Errungenschaften erinnern kann, die man dereinst für unglaublich innovativ gehalten hat und die man heute nur unter extrem lebensbedrohlichen Umständen wieder so lösen würde.

Worauf ich hinaus möchte:
Hier also Scripte und kleine Schnippsel, die mich im laufe der Zeit begleitet haben oder vielleicht sogar noch begleiten. Zum Zeitpunkt ihrer Entstehung vielleicht genial – das mögen andere beurteilen – auf jeden Fall aber sehr nützlich und ihren Entstehungszweck erfüllend.

Schnippsel

  1. X Tage in die Vergangenheit
  2. Zend Framework – Charset/Encoding für Zend_Db auf utf8 setzen bzw. erzwingen
  3. SimpleXML simples konvertieren von CDATA in einen String
  4. XHTML im Zend Framework erzwingen

X Tage in die Vergangenheit

	# days to travel back
	$travel_past_days = 30;

	$current_tstamp = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
	$travel_past_tstsamp = $travel_past_days * (60 * 60* 24);
	$day_in_past_tstamp = $current_tstamp - $travel_past_tstsamp;

	# check the result
	# echo date("d.m.Y", $day_in_past_tstamp);

Eigentlich simpel aber doch immer wieder nützlich. Einen Timestamp x Tage in der Vergangenheit ermitteln (Sollte recht einfach sein das Script an x Tage in der Zukunft anzupassen – deswegen sage ich nix).

Zend Framework – Charset/Encoding für Zend_Db auf utf8 setzen bzw. erzwingen

	/**
	* just makes sure, that we have/get utf8
	* @return void
	*/
	public function init()
	{
		$this->_db->query('SET NAMES utf8;');
		$this->_db->query('SET CHARACTER SET utf8;');
	}

Kurz: Zend_Db liefert kein utf8 per Default. Alle Möglichkeiten über die .ini der Applikation, die angeblich funktionieren sollte taten eben dies nicht – weswegen ich sie hier auch einfach weglasse. Um den Output sauber encoded zu bekommen habe ich eine init()-Methode in das Model eingefügt, welche utf8 erzwingt für die folgenden Queries – welche ja dank autoload automatisiert aufgerufen wird. Nicht wirklich sehr elegant, aber es funktioniert soweit und wie es aussieht gibt es für das zf auch schon ein Ticket bezüglich des Encodings – also abwarten bis es implementiert ist.

SimpleXML simples konvertieren von CDATA in einen String

	$xmlFileResult = simplexml_load_file($this->filename,
	'SimpleXMLElement', LIBXML_NOCDATA);

Das ersparte mir das rauslesen des CDATA-Blocks in der Beschreibung(Description) eines RSS-Feeds über ein Schleifenkonstrukt – über eine direkte Abfrage des Attributes bekam ich nur ein Object innerhalb der SimpleXML-Struktur zurück oder einen Leerwert. Mit LIBXML_NOCDATA gibt es einen String zurück wenn

	$description = $xmlFileResult->description;

angesprochen wird.

XHTML im Zend Framework erzwingen

Es gibt da ein Problem, dass Zend_Form Input-Tags nicht XHTML-konform mit einem “/” versieht – sprich die mit Zend_Form erzeugten Formular-Objekte sind unvalides XHTML – dem kann allerdings abgeholfen werden,

	# make sure we get XHTML
	$this->view->doctype('XHTML1_TRANSITIONAL');
	$this->view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');

Ich habe das ganze in eine _initView()-Methode in die Bootstrap.php eingefügt. Da ich Smarty als Wrapper für den View benutze, erzeuge ich eine Instanz des Views folgendermaßen:

	# init the Zend_View_Smarty wrapper
	$this->view = new Zend_View_Smarty(array(
		'template_dir' => $this->settings->smarty->templateDir,
		'compile_dir' => $this->settings->smarty->compileDir,
		'cache_dir' => $this->settings->smarty->cacheDir,
		'config_dir' => $this->settings->smarty->confDir,
		'compile_check' => $this->settings->smarty->compileCheck,
		'caching' => $this->settings->smarty->caching
	));
	$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
	$viewRenderer->setView($this->view)
		->setViewBasePathSpec($this->view->getScriptPaths('_STRING'))
		->setViewScriptPathSpec(':controller/:action.:suffix')
		->setViewScriptPathNoControllerSpec(':action.:suffix')
		->setViewSuffix('tpl');

Die Erläuterung des Smarty-Views würde den Snippet-Rahmen wohl sprengen deswegen hier nicht mehr dazu – eher später in einem Artikel oder einem Tutorial – mal sehen. Allgemein ohne Smarty sollte es sowas sein:

	$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
	$viewRenderer->init();
	$view = $viewRenderer->view;