Möchte man einen DELETE über mehrere Tabellen hinweg machen (mit Hilfe von Joins), kann es durchaus vorkommen, dass man beim Ausführen seines DELETE-Statements einen Fehler bekommt.

Nach längerer Suche bin ich auf folgenden Hinweis gestoßen.

Ich wollte folgendes SQL ausführen:

DELETE FROM
  table1
JOIN
  table2 ON [**onClause**]
JOIN
  table3 ON [**onClause**]
WHERE
  [**whereClause**]

Dieses Statement lieferte mir allerdings einen Syntaxerror zurück. Durch Einfügen von USING funktionierte meine Query dann so, wie sie sollte.

DELETE FROM
  table1
USING
  table1
JOIN
  table2 ON [**onClause**]
JOIN
  table3 ON [**onClause**]
WHERE
  [**whereClause**]

Alternativ funktioniert auch Folgendes:

DELETE table1 FROM
  table1
JOIN
  table2 ON [**onClause**]
JOIN
  table3 ON [**onClause**]
WHERE
  [**whereClause**]

Liegt wahrscheinlich daran, das die Query nicht wirklich weiß, aus welcher Tabelle sie die ermittelten Datensätze löschen soll.

Ich hoffe dem Einen oder Anderen so eine unnötige Sucherei erspart zu haben :)

Um das Rendern der View im Controller zu unterbinden, kann folgendes Codesnippet benutzt werden:

$this->_helper->viewRenderer->setNoRender(true);

Weitere Infos dazu lassen sich hier finden.

Um einen Hover-Effekt auf Tabellenzeilen zu erzielen kann man folgende CSS-Notation benutzen:

tr:hover td{
    background-color: #F0F0F0;
    cursor:pointer;
}

Ein einfaches tr:hover funktioniert in diesem Fall nicht, da tr-Elemente keine Hintergrundfarbe besitzen.

Aber Achtung: Der IE kann dies u.U nicht darstellen.

Um Datumsangaben vom deutschen Datumsformat in das englische Datumsformat umzuwandeln (bspw. für eine Datenbankquery), kann man Zend_Date benutzen. Folgendes Codesnippet zeigt, wie einfach eine solche Datumsumwandlung realisiert werden kann.

$date = new Zend_Date('29.11.2011', 'd.m.Y');
$date->toString('Y-m-d');

Als Output bekommt man ein Datum der Form ’2011-11-29′. Klappt natürlich auch andersrum.

Alternativ kann man das Ganze auch über natives PHP umsetzen. Das Ganze sieht dann folgendermaßen aus:

$date = date('Y-m-d', strtotime('29.11.2011'));

Falls ihr in eurem Projekt auf die Javascript-Bibliothek jQuery nicht verzichten wollt, könnte der folgende Artikel interessant sein. Ich werde erklären, wie man über die Integration der ZendX Library jQuery im Projekt verfügbar macht und aktiviert.
Read on »

Bei größeren Projekten kommt man evtl. auf die Idee das Errorhandling der Webapplikation in ein eigenes Modul auszulagern. Mit Hilfe des Zend Frameworks sind dazu drei Schritte notwendig:

  • Error-Modul anlegen
  • Error-Plugin zum Setzen des Standard-Error-Moduls
  • application.ini und Bootstrap.php der Anwendung konfigurieren

Read on »

Um neue Webtechnologien, wie beispielsweise CSS3 auch im Internet Explorer 6 nutzen zu können, gibt es verschiedene Ansätze. Ein paar davon hat euch das Smashing Magazine zusammengestellt. Es wird dabei auf Javascriptlösungen, sowie sinnvolle Fallbacks eingegangen. Für die Grafiker und Frontendentwickler unter euch auf jeden Fall ein Lesetipp.

Link: CSS3 in älteren Browsern

Das Wechseln des Design in Abhängigkeit von eurem Modul kann im Zend Framework über ein Plugin realisiert werden. Legt dazu im Ordner application/Plugin/Layout die Datei Changer.php an und füge folgenden Inhalt in die Datei:

class Plugin_Layout_Changer extends Zend_Controller_Plugin_Abstract
{
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        //Prüft ob eine Layoutdatei in Abhängigkeit vom Modulnamen existiert
        if(is_file(Zend_Layout::getMvcInstance()->getLayoutPath()
        .$request->getModuleName().'.phtml'))
        {
            //wenn ja, dann diese setzen
            Zend_Layout::getMvcInstance()->setLayout($request->getModuleName());
        }
        else
        {
            //wenn nicht, dann Standardlayout setzen, hier: bibo
            Zend_Layout::getMvcInstance()->setLayout('bibo');
        }
    }
}

Jetzt müsst ihr noch in eurer Bootstrap-Datei eurer Anwendung das Plugin initialisieren. Fügt dazu einfach folgende Methode eurer Bootstrap-Klasse hinzu:

protected function _initLayoutChanger()
{
	$this->bootstrap('frontController');
	$this->getResource('frontController')
		 ->registerPlugin(new Plugin_Layout_Changer());
}

Überprüft, ob folgende Einträge in eurer application.ini vorhanden sind:

bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
autoloadernamespaces.0 = "Plugin_"

Nun ändert sich automatisch das Layout, in Abhängigkeit von eurem Modulnamen. Achtet darauf, dass die entsprechende Layoutdatei im Ordner application/layouts/scripts/ genauso benannt ist, wie euer Ordnername des Moduls. Bei mir existieren beispielsweise im Ordner application/modules/ die Module “bibo” und “login”. Demzufolge heißen meine Layoutscripte im Ordner application/layouts/scripts auch “bibo.phtml” und “login.phtml”. Existiert keine entsprechende Layoutdatei, wird das in der Changer.php im else Zweig angegebene Layout geladen (in meinem Fall das Layoutscript bibo.phtml).

Um Layout- & Viewscripte zu entschlacken und von Programmcode zu befreien (MVC-Prinzip), gibt es in Zend die Möglichkeit View-Helper einzusetzen. View Helper können auch dazu verwendet werden, um wiederkehrenden Code in seperaten Dateien abzulegen und somit doppelten Code zu vermeiden.

Ich erkläre das Prinzip beispielhaft für das Einbinden eines Copyrights incl. Jahreszahl (bspw.: © 2005 – 2011).
Read on »