Hallo!
Ab sofort steht die Version 1.8.2 zur Verfügung.
Diese Version ist die letzte Fassung der Serie 1.8, denn die SPIP-Entwicklung wird mit einem anderen System fortgeführt (wir werden dann unter SVN anstelle von CVS arbeiten) und es werden wichtige Änderungen erfolgen — dazu die Ablösung der Erweiterung .php3
durch .php
und eine neue Verzeichnisstruktur.
Diese Version korrigiert die meisten (bekannten) Bugs der Version 1.81 und verbessert die generelle Stabilität.
Die wichtigsten Neuerungen:
Darstellung und Interface
— Zahlreiche Verbesserungen der XHTML-Kompatibilität wurden in die Funktion propre()
und bei der Integration von Dokumenten in Texte eingearbeitet.
— Die "Barrierefreiheit" von Tabellen wurde verbessert.
— Interne Foren, Einträge im persönlichen Nachrichtensystem sowie Vorschläge für Artikel und Meldungen können per RSS verteilt werden.
— Zusätzliche Optionen für die Syndizierung von Websites: Man kann "Links automatisch offline stellen", wenn sie nicht mehr in der RSS-Datei der syndizierten Website erscheinen und sie nach einer bestimmten Zeit wahlweise zusätzlich aus der Datenbank löschen. Außerdem wurde die Auswertung der RSS-Dateien um mehrere Elemente erweitert:
- Verlinkte Dokumente auf entfernten [1] Servern (Erläuterungen zu podcasting und enclosure weiter unten)
- Aktualisierungsdatum
- Änderungen an Titel oder Inhalt
— Im Redaktionssystem kann die Uhrzeit (bisher nur das Datum) der Veröffentlichung von Artikeln eingestellt werden.
Dokumentenmanagement
— Verlinkte Dokumente auf entfernten Servern.
Im Formular, mit dem Dokumente bisher hochgeladen werden konnten, kann jetzt der URL eines "verlinkten Dokuments" auf einem entfernten Server angegeben werden. Solch ein Dokument wird in die Datenbank eingetragen und wie ein lokales Dokument behandelt, ohne daß es im Verzeichnis IMG/ gespeichert wird.
Diese "verlinkten Dokumente" werden auf die gleiche Weise verlinkt wie lokale Dokumente: Man kann ihre Titel und Beschreibung bearbeiten, SPIP überprüft das Vorhandensein und die Dateigröße und legt eine lokale Kopie von Grafiken auf dem eigenen Server an, um automatisch Vorschaubilder (Thumbnails) zu erzeugen.
Man kann verlinkte Dokumente durch Einfügen eines Filters in die Seitenvorlagen (Skelette) systematisch auf den eigenen Server kopieren: |copie_locale
. Dieser Filter hat folgende Funktionsweise: Nachdem SPIP eine lokale Kopie des Dokuments angelegt hat (bei Dokumenten, die mehrere MB groß sind, kann der Vorgang einige Zeit in Anspruch nehmen), wird die lokale Adresse ausgegeben.
SPIP wendet das Prinzip der "verlinkten Dokumente" auch auf die Syndikation an: Einerseits werden in den RSS- bzw. Syndikationsstream eingebettete Links zu Dokumenten ausgewertet (podcasting), andererseits publiziert das Skelett dist/backend.html
im selben Format alle Dokumente zu einem Artikel, die nicht im Text des Artikels verlinkt werden (Es handelt sich um die Dokumente, die im Redaktionssystem als Portfolio bzw. an Artikel angehängte Dokumente angezeigt werden).
— Indexierung von Dokumenten. Titel und Beschreibung aller Dokumente werden in den Suchindex aufgenommen, können also mit dieser Schleife gesucht und angezeigt werden:<BOUCLE(DOCUMENTS){recherche}{par points}{inverse}>
Wo immer es möglich ist, indexiert SPIP ebenfalls den Inhalt der Dokumente (das betrifft besonders die Dokumente in den Formaten HTML, TXT, PDF, RTF und DOC). Dieses Feature kann man mit weiteren "Extrahierungsskripten" erweitern (es sollte leicht möglich sein, solche Skripte für die Formate MP3 und OpenOffice zu schreiben).
— - Uploads zippen. Wenn ein Dokument in einem "verbotenen" Format, das nicht in der Tabelle table spip_types_documents beschrieben ist (z.B. eine PHP-Datei), hochgeladen wird, bietet SPIP an, es zu "zippen". (Bisher wurden solche Uploads verweigert, d.h. stillschweigend ignoriert.)
Kalender veröffentlichen
Mit der vorliegenden Version von SPIP ist es möglich, die internen Kalender zu veröffentlichen und diverse andere Kalender mit den zugehörigen Layoutwerkzeugen zu entwickeln. Dieses Feature wird durch ein neues Schleifenkriterium und zwei neue Filter umgesetzt.
Das Kriterium agenda
kennt eine Reihe Argumente bzw. Parameter, die nicht alle übergeben werden müssen. Die ersten beiden lauten:
- Name eines SQL-Datenfeldes des Typs datetime
(z.B. date oder date_redac eines Artikels). Dieser Parameter kann entfallen.
- Typ des Kalenders, die bereits implementierten sind jour
(Tag), semaine
(Woche), mois
(Monat)
ou periode
(Zeitraum). mois
ist der Standardwert (default).
Bei diesen Argumenten handelt es sich um Literale, d.h. sie können nicht zur Laufzeit mit dem Code #ENV
oder anderen SPIP-Tags erzeugt werden. Darauf folgt optional eine Gruppe aus drei Argumenten, die mit SPIP-Tags erzeugt weden können:
- eine Zeichenkette aus genau 4 Ziffern für das Jahr,
- eine Zeichenkette aus genau 2 Ziffern für den Monat,
- eine Zeichenkette aus genau 2 Ziffern für den Tag.
Werden diese Variablen nicht angegeben, wird ihnen der Wert des aktuellen Tages zugewiesen.
Wenn das zweite Argument periode
lautet, erwartet SPIP eine zweite Dreiergruppe im oben genannten Format. Wird sie weggelassen, ersetzt SPIP ihre Werte durch das aktuelle Datum, sollte die erste Dreiergruppe ebenfalls fehlen, umfasst der dargestellte Zeitraum die gesamte Lebenszeit des Website (bei Websites mit vielen Artikeln kann die Ausführungszeit des Skripts sehr lang werden, wenn nicht andere Kriterien die Ergebnismenge begrenzen).
Das Kriterium agenda
wird in einer Schleife mit einem Feld des Typs datetime
als erstes Argument verwendet. Es sorgt dafür, daß die Schleife nur Elemente zurückgibt, deren Wert mit den weiteren Argumenten übereinstimmt:
- Wert gleich Inhalt von Jahr-Monat-Tag
wenn der Kalendertyp jour
(Tag) ist.
- Wert liegt innerhalb der Kalenderwoche des Datums Jahr-Monat-Tag
wenn der Kalendertyp semaine
(Woche) ist.
- Wert liegt innerhalb der Monats des Datums Jahr-Monat-Tag
wenn der Kalendertyp mois
(Monat) ist.
- Wert liegt innerhalb des Zeitraums zwischen den beiden Dreiergruppen im Formnat Jahr-Monat-Tag
wenn der Kalendertyp periode
(Zeitraum) ist.
Der Filter agenda_memo
kann auf diese Elemente angewendet werden:
- ein Datum
- eine Beschreibung (#DESCRIPTIF)
- einen Titel (#TITRE)
- den URL eines Artikels mit diesem Titel, Beschreibung und Datum
- den Namen einer CSS class
- einen Kalendertyp (
jour
,semaine
,mois
oderperiode
).
Wenn das sechste Argument nicht übergeben wird, speichert der Filter die vier ersten in einer privaten Tabelle, die mit dem fünften Argument identifiziert wird.
Wenn das sechste Argument übergeben wird, gibt der Filter die zwischengespeicherten Elemente im Layout des gewählten Kalendertyps und der CSS-class zurück.
Bei Verwendung des Kalendertyps periode
wird die Anzeige auf den Zeitraum vom ersten gefundenen bis zum letzten gefundenen Element beschränkt, so daß man große Zeitspannen angeben kann, ohne zu lange Ausgaben zu produzieren.
Mit dem fünften Argument, das private Tabellen identifiziert, kann man beliebig viele Kalender auf einer Seite anzeigen, wenn gewünscht auch mit individueller Textgestaltung. Das Stylesheet calendrier.css bietet dafür 28 unterschiedliche Stile, die man ändern und erweitern kann.
Der letzte Filter agenda_connu
prüft, ob ein bekannter Kalendertyp (jour
, semaine
, mois
oder periode
) übergeben wurde.
Das Kriterium und die dazugehörigen Filter werden in den neuen Skeletten jour.html
, semaine.html
, mois.html
und periode.html
verwendet, die aus dem Skelett agenda.html
aufgerufen werden. agenda.html
definiert die erforderlichen Stylesheets und Javascript-Funktionen (Die man für eigene Erfordernisse ersetzen kann). Diese Skelette sind als Beispielanwendung gedacht.
Neue Filter
— Neuer Filter |inserer_attribut{Variable, Waleur}
, um Attribute eines HTML-Tags zu erzwingen.
Anwendungsbeispiel:[(#LOGO_ARTICLE|#URL_ARTICLE||inserer_attribut{alt,#TITRE})]
— Neuer Filter |alterner
- ermöglicht, Listenelemente farblich zu unterscheiden (z.B. mit [(#COMPTEUR_BOUCLE|alterner{1,2,3})]
). Die Anzahl der Argumente gibt den Rhythmus der Wechsel vor, es können also nicht nur gerade und ungerade Zeilen bzw. Elemente unterschieden werden.
Anmerkung: Da dieser Filter rein numerisch arbeitet, gibt er den Wert 1 für Artikel mit ungerader Artikelnummer und 2 für Artikel mit gerader aus, wenn er so auf id_article angewendet wird ([(#ID_ARTICLE|alterner{1,2})]
).
— Filter für "absolute" URL. Alle Links, die SPIP an Stelle der Kürzel
[->article 11]
oder von Tags des Typ #URL_ARTICLE
produziert, sind "relative" Links, die nicht den kompletten Pfad zum verlinkten Objekt enthalten. Unter manchen Umständen, z.B. für RSS-Dateien kann es erforderlich sein, den kompletten URL anzugeben. Für diese Fälle wurden die zwei Filter eingeführt:
- |url_absolue
wird auf einen URL angewendet ([(#URL_ARTICLE|url_absolue)]
).
- |liens_absolus
wird auf Textfelder angewendet und wandelt die Adressen von Links und Bildern in absolute um ([(#TEXTE|liens_absolus)]
).
(Der Filter |abs_url
vereint die beiden Filter in einem einzigen und wendet |url_absolue
auf #URL_ARTICLE
, und |liens_absolus
auf Elemente des Typ #TEXTE
an.)
— Der Filter |reduire_image
ist jetzt in der Lage, Bilder innerhalb eines Textes verkleinern, und kann damit auf den SPIP-Tag #TEXTE
angewendet werden. Geändert wurde auch sein Verhalten: Wenn man den Wert 0 als Angabe für horizontale oder vertikale Maße macht, wird der Wert proportional zur Änderung der anderen Seitenkante berechnet. So reduziert der Code [(#LOGO_ARTICLE||reduire_image{60,0})]
die Breite des Logos auf maximal 60 Pixel und berechnet die Höhe proportional zur Änderung der Breite, so daß die Seitenverhältnisse beibehalten werden.
Verbesserung der Syntax für Skelette
— Die Standardskelette sind jetzt im Format XHTML 1.0 transitional.
- Der SPIP-Tag #DOSSIER_SQUELETTE
vereinfacht die Installation von vorgefertigten Skeletten und Layout-Sets in Unterverzeichnissen.
— #FORMULAIRE_FORUM
hat jetzt einen Parameter für die Adresse, zu der ein Besucher geschickt wird, nachdem er einen Eintrag im Forum geschrieben hat. Die Standardeinstellung dieser Adresse bleibt wie bisher #URL_FORUM
, manche Anwendungen erfordern die Rückkehr zur selben Seite (mit der Schreibweise [(#FORMULAIRE_FORUM{#SELF})]
) oder zu einer bestimmten Seite ([(#FORMULAIRE_FORUM{danke.php})]
).
— Verallgemeinerung der Syntax [(#TAG|filter{[(#ANDERER-TAG|anderer_filter)]})]
, so daß jetzt beliebig tiefe Verschachtelungen möglich sind. Diese Konstruktion umfaßt ebenfalls die Kriterien der Abfrageschleifen, wobei die eckigen Klammern überflüssig sind und sogar zu einer Fehlermeldung führen.
— Zur Vereinheitlichung der Syntax wurde der SPIP-Tag #EXPOSER
durch #EXPOSE
ersetzt. Der einzige Unterschied besteht darin, daß jetzt [(#EXPOSE{on,off})]
anstelle von [(#EXPOSER|on,off)]
geschrieben wird.
— Wenn eine Schleife das Kriterium {statut}
enthält, wird die Standardeinstellung des Status der Elemente, die mit dieser Schleife verbunden sind, abgeschaltet. Mit anderen Worten: Schleifen des Typs (ARTICLES) wählen weiterhin nur veröffentlichte Artikel aus (das Feld "statut" hat den Wert 'publie'
), die Schleife <BOUCLE_a(ARTICLES){statut=prop}>
hingegen wählt alle zur Veröffentlichung vorgeschlagenen Artikel.
So erlaubt die Schleife <BOUCLE_indy(BREVES){statut IN prop, publie}>
alle vorgeschlagenen und veröffentlichten Meldungen auszuwählen. Mit dem Tag #STATUT
kann für jede Meldung der Status angezeigt werden (z.B. um ihnen unterschiedliche CSS-Klassen zuzuweisen).
— Dem Kriterium par
(Sortierung nach) können jetzt Namen von SQL-Feldern dynamisch zugewiesen werden, wofür sich besonders der Tag #ENV
eignet, das Unterlassen der Zuweisung eines entsprechenden Wertes löst dabei keinen SQL-Fehler aus. Außerdem kann man jetzt mit dem Ausdruck {!par ...}
die Sortierreihenfolge für alle Spalten umkehren (dadurch wird das Kriterium inverse
überflüssig, das nur auf die letzte Spalte wirkte). Um eine Sortierung in aufsteigender Reihenfolge für einige Spalten und in absteigender für die anderen zu erzielen, genügt es, mehrere unterschiedliche Kriterien par
zu formulieren. Diese Neuerungen bewirken zusammen, daß man jetzt sehr leicht Skelette schreiben kann, die mehrere Spalten enthalten, welche man mit Schaltern zum Umschalten der Sortierung versieht, wie man es aus einer Tabellenkalkulation kennt. Eine Beispielanwendung findet man hier.
* *
Diese Neuheiten werden wie gewohnt nach und nach in die Dokumentation aufgenommen.