Schnellnavigation:

Kategorien

« August 2010»
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Kopieren Sie diesen Link in Ihren RSS-Reader

RSS 0.91Nachrichten
RSS 2.0Nachrichten

In eigener Sache

Peter Linzenkirchner, Lisardo EDV Beratung in Augsburg. Freelance und Partner für Design- und Webagenturen in Augsburg und München. Pixelgenaue Templates, valides HTML, barrierearm. TYPO3-Projekte, Extension-Programmierung und mehr ... 

Zur Zeit wird gefiltert nach: August 30
Filter zurücksetzen

30August2010

Formulare in Typo3

Mit dem normalen Inhaltselement FORM kann man bereits einiges machen, allerdings hat es einige Einschränkungen:

  • man kann die Formularelemente nur sehr mühsam mehrspaltig anordnen
  • Zwischentexte zwischen den Elementen sind zwar möglich, können aber nur mit einer einheitlichen Formatierung versehen werden.
  • die Validierung erfolgt nur mittels JavaScript
  • der Absender bekommt die gesendeten Inhalte nicht mehr gezeigt.
  • die eingebenen Daten werden nicht in einer Datenbank gespeichert

Es gibt einige Erweiterungen, die das Inhaltselement FORM erweitern, ausserdem kann man Erweiterungen einsetzen, die es komplett ersetzen.

Tipps zu FORM

Einzelne Elemente mit Klassen versehen:

  1. tt_content.mailform.20.params.input = class="mein_input"
  2. tt_content.mailform.20.params.textarea = class="mein-text"

In den Beispielen auf Typo3.org findet sich eine Syntax, wie Kopien an mehrere Empfänger versendet werden können

  1. |recipient_copy=hidden | copy@email.com

und wie man eine Bestätigungs-E-Mail an den Absender schicken kann: 

  1. |auto_respond_msg=hidden|Hello / This is an autoresponse. //We have received your mail.
  2.  

Diese Nachricht wird nur gesendet, wenn die E-Mailadresse bekannt ist, also das Feld “email” ausgefüllt wurde. Unklar ist dabei, inwieweit das gegen Spam geschützt werden kann. Ich vermute, dass es ein neues Feature von Typo3 Vs. 4 ist.

Weiterführende Links:

FORM in css_styled_content

In css_styled_content findet sich ein ziemlich ausführliches TypoScript zum FORM-Objekt, das als Ausgangspunkt genommen werden kann. Es ist dann relativ einfach, dieses zu ergänzen. Nachfolgend zuerst der Code, wie das FORM-Objekt standardmäßig überschrieben wird:

  1. tt_content.mailform = COA
  2. tt_content.mailform.10 = < lib.stdheader
  3. tt_content.mailform.20 = FORM
  4. tt_content.mailform.20 {
  5.   layout = <tr><td class="csc-form-labelcell">###LABEL###</td><td class="csc-form-fieldcell">###FIELD###</td></tr>
  6.   labelWrap.wrap = <p class="csc-form-label">|</p>
  7.   commentWrap.wrap = <p class="csc-form-comment">|</p>
  8.   radioWrap.wrap = <span class="csc-form-radio">|</span><br />
  9.   REQ = 1
  10.   REQ.labelWrap.wrap = <p class="csc-form-label-req">|</p>
  11.   COMMENT.layout = <tr><td colspan="2" class="csc-form-commentcell">###LABEL###</td></tr>
  12.   target = {$styles.content.mailform.target}
  13.   goodMess = {$styles.content.mailform.goodMess}
  14.   badMess = {$styles.content.mailform.badMess}
  15.   redirect.field = pages
  16.   redirect.listNum = 0
  17.   recipient.field = subheader
  18.   data.field = bodytext
  19.   locationData = 1
  20.  
  21.   stdWrap.wrap = <table border="0" cellspacing="1" cellpadding="1" class="csc-mailform">| </table>
  22.   stdWrap {
  23.       editIcons = tt_content: bodytext, pages, subheader
  24.       editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.form
  25.  
  26.       prefixComment = 2 | Mail form inserted:
  27.   }
  28. }

Danach folgt die neue Version ([compatVersion = 3.9.0]):

  1. tt_content.table.20.innerStdWrap.wrap = |
  2.  
  3. tt_content.mailform.20 {
  4.   accessibility = 1
  5.   noWrapAttr=1
  6.   formName = mailform
  7.   dontMd5FieldNames = 1
  8.   REQ = 1
  9.   layout = <div class="csc-mailform-field">###LABEL### ###FIELD###</div>
  10.   COMMENT.layout = <div class="csc-mailform-label">###LABEL###</div>
  11.   RADIO.layout = <div class="csc-mailform-field">###LABEL### <span class="csc-mailform-radio">###FIELD###</span></div>
  12.   LABEL.layout = <div class="csc-mailform-field">###LABEL### <span class="csc-mailform-label">###FIELD###</span></div>
  13.   labelWrap.wrap = |
  14.   commentWrap.wrap = |
  15.   radioWrap.wrap = |<br />
  16.   REQ.labelWrap.wrap = |
  17.   stdWrap.wrap = <fieldset class="csc-mailform"> | </fieldset>
  18.   params.radio = class="csc-mailform-radio"
  19.   params.check = class="csc-mailform-check"
  20.   params.submit = class="csc-mailform-submit"
  21. }

Das ergibt zum Beispiel folgenden Output:

  1. <form action="Divers.64.0.html" id="mailform" name="mailform" enctype="multipart/form-data" method="post" target="_self" onsubmit="return validateForm('mailform','the_name,Name:,email,Email:','','Leere Pflichtfelder:','')">
  2.   <div style="display:none;">
  3.       <input type="hidden" name="html_enabled" id="mailformhtml_enabled" value="1" />
  4.       <input type="hidden" name="subject" id="mailformsubject" value="This is the subject" />
  5.       <input type="hidden" name="auto_respond_msg" id="mailformauto_respond_msg" value="Hello / This is an autoresponse. //We have received your mail." />
  6.       <input type="hidden" name="tv" id="mailformtv" value="0" />
  7.       <input type="hidden" name="locationData" value="64:tt_content:165" />
  8.   </div>
  9.   <fieldset class="csc-mailform">
  10.       <div class="csc-mailform-field">
  11.           <label for="mailformthe_name">Name:</label>
  12.           <input type="text" name="the_name" id="mailformthe_name" size="20" value="Enter your name here" />
  13.       </div>
  14.       <div class="csc-mailform-label">
  15.           Eine kleine Zwischenzeile
  16.       </div>
  17.       <div class="csc-mailform-field">
  18.           <label for="mailformemail">Email:</label>
  19.           <input type="text" name="email" id="mailformemail" size="20" value="" />
  20.       </div>
  21.       <div class="csc-mailform-field">
  22.           Label <span class="csc-mailform-label">Label value</span>
  23.       </div>
  24.       <div class="csc-mailform-field">
  25.           <label for="mailformtv">Like TV:</label>
  26.           <input type="checkbox" value="1" name="tv" id="mailformtv" class="csc-mailform-check" />
  27.       </div>
  28.       <div class="csc-mailform-field">
  29.           <input type="submit" name="formtype_mail" id="mailformformtype_mail" value="Send this!" class="csc-mailform-submit" />
  30.       </div>
  31.   </fieldset>
  32. </form>

Funktionserweiterungen für FORM

Drei Extensions von Christian Jul Jensen erweitern FORM um einige dieser aufgezählten Funktionen:

  • julle_formpreview: zeigt nach dem Ausfüllen und vor dem Absenden des Formulars nochmals alle Daten.RepositoryManual
  • julle_formreceipt: Damit kann eine Bestätigungsmail an den Ausfüller versendet werden. RepositoryManual
  • julle_form2csv: speichert die Daten im CSV-Format. RepositoryManual
  • formevalwizard: Damit können Validierungsvorgaben gespeichert werden; das macht es für die Redakteure einfacher, komplexe Validierungen einzusetzen, da sie keine regulären Ausdrücke mehr benötigen. Repository,Manual
  • qforms: ein einfach zu nutzender Formulareditor, der den Redakteuren das Anlegen von Formularen erleichtern soll. Repository]=search&no_cache=1&tx;_terfe_pi1[sword]=qforms, Manual

MailformPlus

Diese Extension wird wohl am häufigsten eingesetzt, um FORM zu ersetzen. Die Handhabung ist recht einfache, das eigentliche Formular wird einfach als HTML-Template angelegt, mit den üblichen Platzhaltern. Es ermöglicht somit ein völlig freies Layout. Seine Features:

  • flexibles Layout mit Templates
  • serverseitige Validierung
  • E-Mail an den Absender
  • Speichern in Datenbank und als Export als CSV-Datei
  • Erweiterbar um JavaScript-Validierung, bis hin zu Ajax.
  • ermöglicht mehrseitige Formulare

Nachteil:

  • man kann keine Felder dynamisch vorbelegen
  • komplexere Validierungen (die über »Feld leer« hinausgehen, sind offensichtlich nicht möglich.

RepositoryManual. Eine schöne Beispielseite mit etwas AJAX ist bei Steffen Kamper zu finden.

Mehrsprachigkeit kann mit mailformplus so realisiert werden:

  1. plugin.tx_thmailformplus_pi1.default.email_htmltemplate = /fileadmin/tmpl/deutsch.html
  2. [globalVar = GP:L=1]
  3.   plugin.tx_thmailformplus_pi1.default.email_htmltemplate = /fileadmin/tmpl/andereSprache.html

Mir ist noch dre_formmaker aufgefallen: offensichtlich extrem mächtig, aber neu und noch im Experimentalstadium. Das Manual ist verwirrend, ausserdem erfordert es mindestens PEAR und noch weitere Bibliotheken. Sollte man aber im Auge behalten … RepositoryManual

Kategorien: Extensions  Kommentare 1
Tags: formular, form

Eine kleine Übersicht über die wichtigsten Download-Extensions für TYPO3, mit einer kurzen Beschreibung ihrer wichtigsten Features. Mir geht es hierbei schwerpunktmäßig um sicheren Download, der keine Deeplinks auf zugangsbeschränkte Dateien zulässt.  

Secure Downloads (naw_securedl)

Absicherung von Downloadbereichen, so dass kein direkter Link mehr möglich ist. Für verschiedene Dateitypen und unterschiedliche Ordner. Erzwungener Download möglich.

Beschreibung im TER

Download Stats (wwe_documentstats)

Statistik für das oben beschriebene Secure Downloads (Backend-Modul)

Beschreibung im TER

Modern Downloads (ab_downloads)

Downloadbereich mit Kategorien und Listen; ausserdem Community-Funktionen wie Bewertungsmöglichkeiten, am häufigsten Heruntergeladen, sponsored Downloads und statistische Auswertung. Ermöglicht vor allem Front-End-Usern einen Upload bzw. Upload-Vorschläge.

Beschreibung im TER

File List (dr_blob)

Dateiliste für Download, wobei die Dateien wahlweise in der DB oder als Datei zur Verfügung stehen. Front-End-User können eigene Kriterien für Downloadlisten erstellen (Subscribe-Funktion). Extension kann ich andere Extensions intergriert werden. indexed_search kann den Inhalt durchsuchen.

Berechtungen für versch. Frontend-Usergruppen möglich, allerdings wird bei fehlender Berechtigung der Datensatz gar nicht gezeigt. Anzeige + Verweis auf Login ist nicht möglich.

Integration mit der Extension link_handler; also Verlinkung aus dem RTE möglich.

Beschreibung im TER

PDF Shop (pdf_order)

Man kann Downlaoddateien per E-Mail bestellen. Darstellung der Dateien wie in einem Shop. Enthält keinerlei Bezahlmodul und keinen Warenkorb.

Beschreibung im TER

Download system (sb_downloader)

Downloadlisten mit (ausführlichen) Beschreibungen, Click-counter, Dateigrößen und Vorschau.

Demo

Beschreibung im TER

Download link with hit counter (jpk_downloadcounter)

Erstellen von Downloadlinks mit jeweils eigenem Click-Counter.

Bescrheibung im TER

Documents download (rtg_files)

Erstellen von Downloadlisten für unterschiedliche Dateiarten. Kann Quelltext als Text darstellen. Ausführliche Statistik. Suche. Listen können echte Downloads enthalten oder externe Links.

Beschreibung im TER

Passwortgeschützte Downloads (fhm_downloads)

Passwortschutz für Downloads als eigenes Inhaltselement. Der Besucher muss ein Passwort eingeben, dann kann er downloaden. Keine Lokalisierung!

Beschreibung im TER

Secure Download (rs_securedownload)

Erlaubt einen passwortgeschützten Download. Mit Statistikfunktionen im Backend.

Beschreibung im TER

Password Secured Downloads (fr_pwsdownload)

Passwortgeschützte Downloads als neues Inhaltselement. Kann ergänzt werden um eine Liste von Usern, die downloaden dürfen. Leider als kommaseparierte Liste und nicht als Gruppe … kann aber wahrscheinlich leicht angepasst werden.

Beschreibung im TER

Kategorien: Extensions  Kommentare 0
Tags: download, secure

Bei der Extension-Programmierung steht man immer wieder vor dem Problem, dynamisch erstelltes JavaScript oder CSS ausgeben zu müssen. Man kann das natürlich direkt auf der Seite bzw. über die $content-Ausgabe, aber das ist nicht schön und funktioniert auch manchmal gar nicht. Es gibt deshalb die Möglichkeit, beides aus der Extension heraus in den HEAD-Bereich zu schreiben:

  1. $GLOBALS['TSFE']->setJS($this->extKey, 'alert("Mach was. ")');
  2. $GLOBALS['TSFE']->setCSS($this->extKey, 'p {padding:2em}');

Die Deklaration kann weggelassen werden, das übernimmt Typo3. Die Einträge verwenden das globale Array $GLOBALS[‘TSFE’]->additionalJavaScript bzw. $GLOBALS[‘TSFE’]->additionalCSS. Da diese Einträge nach denen des TypoScript-Templates erscheinen, können so auch vorher definierte Werte überschrieben werden.

Weiterführende Links

siehe auch den Artikel zu GLOBALS TSFE

Kategorien: API/Extensions  Kommentare 0
Tags: extension, api
30August2010

Bilder mit Lupe

Ziel ist, normale Inhaltsbilder von Typo3 mit einer Lupe oder einem Pluszeichen zu versehen, das darauf hindeutet, dass die Bilder vergrößert werden können. Die gleiche Technik kann aber auch verwendet werden, um die Bilder z. B. mit abgerundeten Kanten oder Schatten zu versehen.

Grundtechnik: Bilder mit Wasserzeichen

Die einfachste Möglichkeit ist es, das IMAGE-Objekt der Contentelemente mit einer Maske zu versehen:

  1. tt_content.image.20.1.file.m.bgImg = fileadmin/....
  2. tt_content.image.20.1.file.m.mask = fileadmin/....
  3.  

Nachteil dieser Technik ist, dass die Bilder dazu alle eine vorgebene Größe haben müssen – Maske wie Hintergrund werden brutal auf die Größe der Bilder gezoomt. Das ist für Wasserzeichen u. U. ganz sinnvoll, aber um Bilder mit einer Lupe zu versehen ist dieser Ansatz ungeeignet.

GIFBUILDER verwenden

Prinzipiell können die Bilder über GIFBUILDER manipuliert werden, wie hier im GIFBUILDER-Artikel des typo3-Wikis wunderbar beschrieben. So können erstaunliche Effekte erreicht werden, wie z. B. transparente Flächen oder Texte mit Schatten auf Bildern. Ein Beispiel:

  1. lib.test = IMAGE
  2. lib.test {
  3.     file = GIFBUILDER
  4.     file {
  5.         XY = 1024,768
  6.         format = jpg
  7.         quality = 88
  8.         10 = IMAGE
  9.         10.file = fileadmin/backimage.jpg
  10.  
  11.         15 = IMAGE
  12.         15.offset = 420,18
  13.         15.file = fileadmin/overlay.png
  14.         15.mask = fileadmin/mask.png
  15.     }
  16. }

Leider hat diese Technik einen großen Nachteil: damit imageLinkWrap funktioniert, darf “file” kein GIFBUILDER-Objekt sein. Heisst im Klartext: man kann auf derartig manipulierte Grafiken keinen Link setzen, weder die Klickvergrößerung noch einen individuellen. Damit funktionieren auch die üblichen Lightbox-Skripte nicht mehr.

Falls das nicht benötigt wird, ist es aber die ideale Technik.

Tipp: Damit die Qualität der Bilder stimmt, muss im Install-Tool png_truecolor aktiviert werden, ausserdem muss die GDLIB 2 verwendet werden.

Lösung des Problems:

Sie erfolgt letztlich doch über die oben erwähnten Masken, allerdings mit einem recht aufwändigen Umweg. Grundlage meiner Lösung ist dieser Artikel im TYPO3wizard-Forum (meinen besten Dank an Andy!). Im Prinzip werden einfach Masken eingesetzt, diese werden allerdings mit Hilfe von IMG_RESSOURCE und GIFBUILDER mit einem Hintergrund in der Größe der Bilder versehen, so dass die Lupe selbst nicht mitzoomt sondern an einem ganz konkreten Platz positioniert werden kann.

  1. tt_content{
  2.   image.20.1.file >
  3.   image.20.1.file {
  4.       import.current = 1
  5.       width.field = imagewidth
  6.       m.mask.import.cObject = IMG_RESOURCE
  7.       m.mask.import.cObject.file = GIFBUILDER
  8.       m.mask.import.cObject.file {
  9.           # Hier wird die dynamische Maske mit der gleichen Größe wie das aktuelle
  10.           # Bild erstellt. Die 10 ist der Bezug auf das folgende IMAGE-Objekt
  11.           XY = [10.w],[10.h]
  12.           format = png
  13.           # Da der "XY" Parameter keinen stdWrap hat, finden wir die Größe durch
  14.           # erneutes Laden des Bilds heraus
  15.           10 = IMAGE
  16.           10.file {
  17.               import.current = 1
  18.               width.field = imagewidth
  19.               maxW = {$styles.content.imgtext.maxW}
  20.               maxW.override.data = register:maxImageWidth
  21.               maxWInText = {$styles.content.imgtext.maxWInText}
  22.               maxWInText.override.data = register:maxImageWidthInText
  23.           }
  24.           # Erstellen einer weißen Box die die ganze Größe einnimmt
  25.           20 = BOX
  26.           20.dimensions = 0,0,[10.w],[10.h]
  27.           20.color = #FFFFFF
  28.           # Positionierung der Lupe rechts unten
  29.           60 = IMAGE
  30.           60.file = fileadmin/img/mask2.png
  31.           60.align = r,b
  32.       }
  33.       # Nun muss noch der Hintergrund erstellt werden, Ablauf im Prinzip wie oben:
  34.       m.bgImg.import.cObject = IMG_RESOURCE
  35.       m.bgImg.import.cObject.file = GIFBUILDER
  36.       m.bgImg.import.cObject.file {
  37.           # wieder eine Maske mit der gleichen Größe wie das Bild erstellen
  38.           XY = [10.w],[10.h]
  39.           format = png
  40.           # und dazu das Bild erneut laden
  41.           10 = IMAGE
  42.           10.file {
  43.               import.current = 1
  44.               width.field = imagewidth
  45.               maxW = {$styles.content.imgtext.maxW}
  46.               maxW.override.data = register:maxImageWidth
  47.               maxWInText = {$styles.content.imgtext.maxWInText}
  48.               maxWInText.override.data = register:maxImageWidthInText
  49.           }
  50.           # wieder eine Box in der Größe des Bildes
  51.           15 = BOX
  52.           15.dimensions = 0,0,[10.w],[10.h]
  53.           15.color = #FFFFFF
  54.           # und darauf die Maske der Lupe platzieren
  55.           60 = IMAGE
  56.           60.file = fileadmin/img/plus2.png
  57.           60.align = r,b
  58.       }
  59.   }
  60. }

Möglich, dass es auch einfacher geht … aber diese Lösung tut was sie soll. Links, Alt- und Title-Attribute funktionieren.

Grundsätzlich kann eine Extension als gecachtes USER-Objekt oder als ungecachtes USER_INT-Objekt eingebunden werden. Prinzipiell kann das für jede Extensions sowohl im PHP-Code wie auch über Typoscript bestimmt werden.

Extensions, die gecachet werden sollen

Zunächst erhalten Sie folgenden Eintrag in der ext_localconf.php. Die “1” am Ende steht für aktivierten Cache:

  1. t3lib_extMgm::addPItoST43(
  2.   $_EXTKEY, 'piX/class.tx_myExtension_pi1.php',
  3.   '_pi1', 'list_type',1
  4. );

Zusätzlich muss innerhalb der Extension der cHash aktiviert werden, indem eine Klassenvariable definiert wird:

  1. var$pi_checkCHash=true;

Die Ausgabe des cHash ist nötig, damit für jede Paramter-Kombination ein eigener Cache-Eintrag angelegt wird. Ohne cHash wird jeweils der erste Seitenaufruf für die gesamte Seite gechachet und die weiteren Parameter-Kombinationen ignoriert. Der cHash ist ein Hash-Wert, der aus den Parametern und dem Encryption key des Install-Tools errechnet wird. Er soll verhindern, dass über zufällig aufgerufene Parameter der Cache überflutet wird – was einer DOS-Attacke gleich käme. Nur gültige Parameter erzeugen einen Cache-Eintrag.

Natürlich müssen die Links entsprechend erstellt werden, sinnvollerweise über die TypoLink-Funktionen von TYPO3:

  1. tslib_pibase.pi_linkTP    (
  2.     $str,
  3.     $urlParameters= array(),
  4.     $cache=1,
  5.     $altPageId=0
  6. )

Weitere Beispiel im Artikel Links in Extensions.

Dynamische Extensions ohne Cache

Extensions, die z. B. mit Formularen umgehen oder aktuelle Daten liefern sollen, dürfen nicht gecached werden. Allerdings sollte natürlich trotzdem der Rest der Seite gecachet werden, nur eben rein der Code der Extension nicht. Das kann so erreicht werden:

  1. t3lib_extMgm::addPItoST43(
  2.   $_EXTKEY,'piX/class.tx_myExtension_pi1.php',
  3.   '_pi1','list_type',0);

Damit wird die Extension als USER_INT – also als nicht cachende Extension – eingebunden.

Steuerung über TypoScript

Es ist ohne weiteres möglich, Plugins über Typoscript umzustellen von USER auf USER_INT. Mit 

  1. plugin.tx_myExt_pi1=USER_INT

kann ein Plugin nachträglich von USER auf USER_INT umgestellt werden. Das erlaubt Konstruktionen dieser Art:

  1. [globalVar=TSFE:id=100] 
  2.      plugin.tx_tx_myExt_pi1=USER_INT

Tipp: Diese Einstellung in der main-Function:

  1. functionmain($content,$conf){ 
  2.    $this->pi_USER_INT_obj=1;
  3. }

Wird oft zusätzlich empfohlen, um ein USER_INT-Plugin anzulegen. Meines Wissens schreibt sie auch der Extensions-Manager entsprechend rein. Ich würde das nicht empfehlen, da dadurch der TypoScript-Umschalter natürlich deaktiviert wird und die oben erwähnten Methoden nicht mehr funktionieren.

Steuerung über Flexforms

Das ist nicht so einfach und setzt einen entsprechenden PHP-Code im Plugin selbst voraus. Ausserdem ist es erst ab TYPO3 4.3 möglich. Dieser Code in der main-Function des (USER-)Plugins:

  1. switch ($this->conf['code']){
  2.   case'FORM':
  3.       $this->cObj->convertToUserIntObject();
  4.       $content.='Bin jetzt ein USER_INT-Objekt und cache nicht.';
  5.     break;
  6.     default:
  7.       $content.='Bin ein USER-Objekt und cache. ';
  8.     break;
  9. }

schaltet automatisch bei der Auswahl von FORM in den Flexforms um auf ein USER_INT. Hier ist noch eine andere Variante, welche die USER/USER_INT-Eigenschaften abhängig macht von der TypoScript-Variablen “allowCaching”:

  1. if ($this->cObj->getUserObjectType() ==tslib_cObj::OBJECTTYPE_USER){
  2.   $content.='Ich bin ein USER Objekt.<br>';
  3.   if (!$this->conf['allowCaching']){
  4.       $this->cObj->convertToUserIntObject(); return'';
  5.     }
  6. }else{   
  7.     $content.='Nun bin ich ein USER_INT Objekt<br>';
  8. }

Quelle: USER to USER_INT conversion. Aber Achtung: dort stimmt die Syntax nicht! Meine hier ist richtig.

Ausgabe eines USER_INT-Plugins innerhalb eines USER-Plugins

Machmal besteht die Notwendigkeit, innerhalb einer gecachten Extension eine einzelne Ausgabe ungecached machen zu lassen – z. B. die Ausgabe einer Zeit. Das kann man über ein kleines zusätzliches Plugin lösen, das im eigentlichen Plugin aufgerufen wird:

  1. $content.='Normale, gechachte Ausgabe. <br>';
  2.  
  3. $cObj=t3lib_div::makeInstance('tslib_cObj');
  4. $cObj->start(array());
  5. $conf2=$GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_myExt_pi2.'];
  6. $conf2['includeLibs']='EXT:myExt/pi2/class.tx_test_pi2.php';
  7. // ungecachte Ausgabe aus einem anderen Plugin:
  8. $content.=$cObj->cObjGetSingle('USER_INT',$conf2);
  9.  
  10. $content.='<br> und wieder die gecachte Ausgabe ... ';

Quelle: das Buch “Extension entwickeln” von Dimitry Dupolev, S. 129.

Weiterführende Links

Kategorien: API/Extensions  Kommentare 1
Tags: cache, extension
Besuchen Sie mich auf Google+