Rückblick auf die letzten 12 Monate
Rückblick auf die letzten 12 Monate
Leider gibt es bislang nur sieben Mitwirkende:
Software ohne Dokumentation ist entweder absolut selbsterklärend oder weitestgehend nutzlos! Umso dankbarer sind wir, dass sich wenigsten die sieben Helfer gefunden haben.
Wir wünschen uns für die Zukunft aber eine regere Beteiligung.
Blick auf die nächste Contao-Version
Der Dateiwähler zeigt das Dateisystem in Echtzeit an und fügt die ausgewählten Dateien bzw. Ordner automatisch zum DBAFS hinzu, sofern sie noch keinen Datenbank-Eintrag haben.
Hinweis: Der automatische Abgleich mit dem DBAFS funktioniert nur für neue Dateien. Werden Dateien bzw. Ordner per FTP umbenannt und/oder verschoben, muss nach wie vor synchronisiert werden.
Die Seiten- und Dateiwähler können nun auf Teilbäume begrenzt werden, so wie es bereits in der Seitenstruktur und in der Dateiverwaltung der Fall ist. Zudem kann man nun im Popup-Dialog zwischen dem Wähler und der Seitenstruktur bzw. der Dateiverwaltung hin und her wechseln.
Die TinyMCE-Picker, mit denen man Seiten oder Bilder auswählen kann, wurden durch den Contao-Seitenwähler bzw. Dateiwähler ersetzt.
Elemente können zur Bearbeitung direkt angeklickt werden, ohne dass die entsprechenden Icons dafür verwendet werden müssen.
Zusammen mit dem Klick muss die Control-Taste (Windows/Unix) bzw. die Command-Taste (Mac OS) gedrückt werden:
[Ctrl]+Klick
: Element bearbeiten[Ctrl]+[Shift]+Klick
: Einstellungen bearbeitenBeziehungsweise auf Mac OS:
[Cmd]+Klick
: Element bearbeiten[Cmd]+[Shift]+Klick
: Einstellungen bearbeitenAlle Elemente, die bisher mittels der grünen Pfeile schrittweise hoch und runter geschoben werden konnten, lassen sich jetzt bequem per Drag und Drop verschieben.
Frontend-Module können direkt im Seitenlayout deaktiviert werden und werden dann nicht auf der Webseite angezeigt.
Die Detailansicht eines Elements wird in einem Popup-Fenster angezeigt.
Alle Elemente, die in anderen Elementen verlinkt werden, wie z.B. Aliaselemente in Artikeln oder Frontend-Module im Seitenlayout, können in einem modalen Fenster direkt bearbeitet werden.
Werden im Backend Links in einem neuen Tab oder Fenster geöffnet, bleibt die Browser-Historie davon unbeeinflusst. Jedes Tab bzw. Fenster bekommt seine eigene Historie.
Wird ein Backend-Formular automatisch abgeschickt, z.B. beim Wechsel des Elementtyps, erzeugen leere Pflichtfelder keine Fehlermeldung mehr.
Artikel können nun genau wie Seiten und Inhaltselemente geschützt werden, so dass nur bestimmte Mitgliedergruppen im Frontend darauf zugreifen können.
Contao 3.1 unterstützt Sprachdialekte wie z.B. de-CH
.
Diese können in den Einstellungen einer Website-Startseite oder als
Gebietsschema (dann werden sie de_CH
geschrieben!)
bei der Übersetzung des Systems verwendet werden.
de-DE
, de-AT
und
de-CH
sind möglichpt_PT
und
pt_BR
sind möglichDie Ausgabe eines Inserttag kann mittels Flags an eine oder mehrere
Funktionen weitergereicht und so noch einmal verändert werden. Flags
werden dem Inserttag mit einer Pipe (|
) angehängt.
Auf Basis von swipe.js wurde ein Slider für Inhaltselemente zum Core hinzugefügt. Der Slider unterstützt Wischgesten auf mobilen Endgeräten und lässt sich im Backend mittels Wrapper-Elementen konfigurieren.
Alle Fehlerseiten, die bislang als gelber Kasten ausgegeben wurden, wurden an das Contao-Design angepasst und können jetzt auch übersetzt werden. Die beinhaltet folgende Meldungen:
Ein neuer Datensatz wird angelegt:
$author = new AuthorModel(); $author->name = 'Leo Feyer'; $author->company = 'iNet Robots'; $author->save(); echo $author->id; // ID des neuen Datensatzes
Ein Datensatz wird abgerufen:
$author = AuthorModel::findByName('Leo Feyer'); echo $author->company; // Name der Firma
Anlegen mit der Datenbank-Klasse:
$set = array(); $set['name'] = 'Leo Feyer'; $set['company'] = 'iNet Robots'; $stmt = $this->Database->prepare("INSERT INTO tl_author %s") ->set($set) ->execute(); echo $stmt->insertId; // ID des neuen Datensatzes
Abrufen mit der Datenbank-Klasse:
$author = $this->Database->prepare("SELECT * FROM tl_author WHERE name=?") ->execute('Leo Feyer'); echo $author->company; // Name der Firma
Zu einem Artikel sollen die Daten der beinhaltenden Seite sowie des Autors ausgegeben werden. Es müssen also drei Datensätze aus drei verschiedenen Tabellen geladen werden.
// Artikeldaten $article = $this->Database->prepare("SELECT * FROM tl_article WHERE id=?") ->execute(5); // Seitendaten $page = $this->Database->prepare("SELECT * FROM tl_page WHERE id=?") ->execute($article->pid); // Autordaten $author = $this->Database->prepare("SELECT * FROM tl_user WHERE id=?") ->execute($article->author);
// Alles in einer Abfrage $data = $this->Database->prepare(" SELECT * FROM tl_article a LEFT JOIN tl_page p ON a.pid=p.id LEFT JOIN tl_user u ON a.author=u.id WHERE a.id=? ")->execute(5);
id
, pid
,
tstamp
, title
…tl_user.id
oder
tl_page.id
möglich// Artikeldaten $article = ArticleModel::findByPk(5); // Seitendaten $page = $article->getRelated('pid'); // Autordaten $author = $article->getRelated('author');
getRelated()
lädt in Beziehung stehende
Models// Eine Seite anhand ihrer ID oder ihres Alias finden $page = PageModel::findByIdOrAlias('contact'); // Eine Seite mit ihren vererbten Eigenschaften laden $page = PageModel::findWithDetails(3); // Die erste reguläre Seite unterhalb einer Seite finden $page = PageModel::findFirstPublishedRegularByPid(2); // Alle veröffentlichten Inhaltselemente eines Artikels laden $elements = ContentModel::findPublishedByPidAndTable(7, 'tl_article');
Beide nachfolgenden Code-Schnipsel machen exakt dasselbe.
// Model $page = PageModel::findFirstPublishedRegularByPid(2);
// Datenbank-Abfrage $query = "SELECT * FROM tl_page WHERE pid=? AND type='regular'"; if (!BE_USER_LOGGED_IN) { $query .= " AND published=1 AND (start='' OR start<" . time() . ") AND (stop='' OR stop>" . time() . ")"; } $page = $this->Database->prepare($query)->execute(2);
Blick in die Zukunft
Die Arbeitsgruppe hat sich in der Zeit von Februar bis Mai 2013 in regelmäßigen Skype-Konferenzen mit der Frage nach einem möglichen Wechsel des zugrundeliegenden PHP-Frameworks beschäftigt.
Dabei ging es nicht nur um die Entscheidung dafür oder dagegen, sondern auch um den grundsätzlichen Aufbau der Applikation sowie die Implementierung der Kernfunktionen.
Zu verschiedenen Spezialthemen, wie z.B. dynamische Doctrine-Entities oder PHPCR, haben wir externe Berater hinzugezogen, die bereits entsprechende Erfahrungen gemacht haben und teilweise direkt in den Entwicklungsprozess eingebunden sind.
Sowohl die Mitglieder der Arbeitsgruppe als auch die Berater haben ihr Wissen und ihre Zeit ohne Gegenleistung zur Verfügung gestellt. Dafür an dieser Stelle noch einmal ein großes Dankeschön!
Zum jetzigen Zeitpunkt ist jedoch nicht klar, ob wir genug Zeit und Manpower haben, um die Umstellung durchzuführen. Der Fokus liegt weiterhin auf der Entwicklung von Contao 3, daher haben die damit verbundenen Aufgaben Priorität vor der Arbeit an Contao reloaded.
Sollten wir feststellen, dass sich das Projekt nicht in einem vertretbaren Zeitrahmen neben der Entwicklung von Contao 3 realisieren lässt, werden wir das Vorhaben wieder aufgeben.
Vielen Dank für die Aufmerksamkeit