User:Maholtz
From TYPO3Wiki
Hallo,
ich werde mich bemühen beim wachsen des deutschsprachigen Teils von http://wiki.typo3.org mitzuhelfen.
gruß, martin
IRC
ries hat den Bot Number-5 gebaut, derzeit läuft der noch auf seinem Server.
Ggf. übernimmt Phlogi (aka Cyrill) die Pflege. (Stand 25.08.2008)
eigene Unterseiten zum aufbau, Gedächtnis und ggf. späterer veröffentlichung
User:Maholtz/Backend sollte auf De:TSconfig landen
Es folgen Code-Schnipsel, Gedächtnisstützen uvm
Seiten die ein TypoScript-Element auf deutsch behandeln bekommen diesen Ausdruck an den Anfang gesetzt. {{De:Tag|TypoScript}}
Mit Gleichheitszeichen Teile ich die Seite in Abschnitte auf, ein Gleichheitszeichen bedeutet h1 usw.
===== Ueberschrift5 =====
Auf diese Abschnitte kann ich dann via Anker referenzieren #Ueberschrift5
Erzeugt ein Sprachenmenü für die TYPOScript Referenz TypoScript Referenz {{Lang|TSref|TypoScript Referenz|}}
Erzeugt ein Sprachenmenü für TypoScript Datentypen {{Lang|TSrefDataTypes|TSref Datentypen|}}
Diese Struktur verwendet?
http://wiki.typo3.org/index.php/TSref/optionSplit
Sprachenmenü, noch zu bearbeiten und als Typoscript markieren
{{Lang|TSref/getText|TypoScript Referenz - getText|}}
''This page is {{Tag|document in progress}}.''
{{De:Tag|TypoScript}}
De:Indexed_search Deutsche Seite zur Indexed Search Extension
De:TSref - TypoScript-Referenz, dort sollten mit der Zeit alle TypoScript Befehle erklärt sein. Dank des Wikis mit einer großen Anzahl von Code-Schnipseln?
Meine Liste
Seiten die ich noch überarbeiten möchte:
- http://wiki.typo3.org/index.php/Category:De:Topic/TypoScript
- Unvollständig: http://wiki.typo3.org/index.php/TSrefDataTypes
- Abschnitt Objekt-Typen unvollständig, einige Textabschnitte sind noch englisch: http://wiki.typo3.org/index.php/De:TSrefDataTypes
- Teileweise noch in englisch: http://wiki.typo3.org/index.php/De:TSrefConditions
- Da fehlt noch einiges: http://wiki.typo3.org/index.php/De:TSrefFunctions
- Screen-Shots für das Konstantenfeld wären gut, ggf. nochmal überprüfen: http://wiki.typo3.org/index.php/De:TSrefConstants
und dann geht es ab dort weiter: http://typo3.org/documentation/document-library/references/doc_core_tsref/4.0.0/view/7/1/
- http://wiki.typo3.org/index.php/De:TSref/getText
- http://wiki.typo3.org/index.php/De:TSref/stdWrap
- http://wiki.typo3.org/index.php/De:TSref/cObject
- http://wiki.typo3.org/index.php/De:TSrefConditions
Howto - was ich bei dem Erstellen von TYPOScript Seiten nicht vergessen möchte
Wie erreiche ich was: http://wiki.typo3.org/index.php/Help:Contents
Sprachenmenü, Seiten befindet sich in Bearbeitung und TypoScript-Tag ganz nach oben.
{{Lang|TSref/getText|TypoScript Referenz - getText|}}
''This page is {{Tag|document in progress}}.''
{{De:Tag|TypoScript}}
Darunter folgt dann die Überschrift
== Überschrift==
Dann vielleicht eine Liste von _wichtigen_ Links:
* [[De:TSref|Zurück zur Übersicht]] * [[De:TSrefFunctions|TypoScript Funktionen]] ([[De:TSref/typolink|typolink]], [[De:TSref/stdWrap|stdWrap]]) * [[De:TSref/getText|getText]], [[De:TSref/optionSplit|optionSplit]] * [[De:TSrefConditions|Bedingungen]] * [[De:TSref/cObject|Liste der TypoScript Objekte]] ([[De:TSref/IMAGE|IMAGE]],[[De:TSref/HMENU|HMENU]]) * [[De:TSrefSetup|Toplevel Objekte]]
schaut dann so aus:
- Zurück zur Übersicht
- TypoScript Funktionen (typolink, stdWrap)
- getText, optionSplit
- Bedingungen
- Liste der TypoScript Objekte (IMAGE,HMENU)
- Toplevel Objekte
Und dann die Elemente.
Links sind in der Regel auf TYPOScript Funktionen, Objekten oder Datentypen.
Datentyp: [[De:TSrefDataTypes#string|string]]
Funktion: [[De:TSref/stdWrap|stdWrap]]
Objekt: [[De:TSref/HTML|HTML]]
Wenn TYPOScript noch getestet werden muss: {{Tag|todo TypoScript-test}}
Bei den Objekten gibt es immer eine Tabelle mit den zur Verfügung stehenden Funktionen:
{| {{DesignTable|background-color:white}}
| '''Eigenschaft'''
| '''Datentyp'''
| '''Kommentar'''
| '''Standardwert'''
|-
|
|
|
|-
|}
[tsref:(cObject).FILE]
{| {{DesignTable|background-color:white}}
| '''Property:'''
| '''Data type:'''
| '''Description:'''
| '''Default:'''
|-
|
|
|
|-
|}
[tsref:(cObject).FILE]
Häufig wiederkehrende Datentypen und Funktionen
| Englisch | Deutsch |
| [[TSref/stdWrap|stdWrap]] | [[De:TSref/stdWrap|stdWrap]] |
| [[TSref/getText|getText]] | [[De:TSref/getText|getText]]
|
| [[TSrefDataTypes#string|string]] | [[De:TSrefDataTypes#string|string]] |
| [[TSrefDataTypes#wrap|wrap]] | [[De:TSrefDataTypes#wrap|wrap]]
|
| [[TSrefDataTypes#int|int]] | [[De:TSrefDataTypes#int|int]] |
| [[TSrefDataTypes#boolean|boolean]] | [[De:TSrefDataTypes#boolean|boolean]]
|
Links auf interne und Externe Quellen
Link auf eine Extension:
<extension>mhnotifychanger</extension> wird zu Notify Changer (mhnotifychanger) (contact: maholtz)
Extensions die Dependency Fehler haben, Seiten deren TypoScript getestet werden usw. unter Teamwork eintragen
Schnipsel die ich nicht vergessen möchte
Crawler
Konfigurationsbeispiel aus Cache Managemetn (cachemgm) (contact: kasper) tx_crawler.crawlerCfg.paramSets { language = &L=[|_TABLE:pages_language_overlay;_FIELD:sys_language_uid] language.procInstrFilter = tx_cachemgm_recache language.baseUrl = http://localhost:8888/typo3/dummy_4.0/ }
Typoscript verwenden
Via Typoscript
plugin.tx_extension_pi1.textdatei = 'EXT:extension/datei.txt';
und im PHP-Skript:
$this->cObj->fileResource($this->conf['textdate']);
öffentliche Extensions
csc_with_multimedia (csc_with_multimedia) (contact: maholtz) Dokumentation
Notify Changer (mhnotifychanger) (contact: maholtz) Extensions/mhnotifychanger/manual
paypal2commerce (paypal2commerce) (contact: maholtz) manual Handbuch
Also Vorlage für Extension Dokumentation sollte das Template verwendet werden. (Die Vorlage gibt es auch als OpenOffice .sxw)
Tipps und Tricks für die Extensionprogrammierung:
// bitte die abgesetzte Query speichern $GLOBALS['TYPO3_DB']->store_lastBuiltQuery = 1; // Query ausführen $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit); // welches Select wurde abgeschickt? echo $GLOBALS['TYPO3_DB']->debug_lastBuiltQuery;
Beim arbeiten mit Frontend-Extensions, können die Felder die bearbeitet werden könnnen geholt werden: $fieldlist = $GLOBALS['TCA'][$this->table]['feInterface']['fe_admin_fieldList'];
Wichtige Links rund um Extension Programmierung
- API: http://typo3.org/fileadmin/typo3api-4.0.0/
- Hook verwenden: http://typo3.org/development/articles/how-to-use-existing-hooks/
- Caching: (no_cache, USER_INT, cHash) http://typo3.org/development/articles/the-mysteries-of-chash/
- Extension_Development,_using_HTML-Templates Templates in Extension verwenden
- Beachten beim Programmieren für TYPO3: http://typo3.org/documentation/document-library/core-documentation/doc_core_cgl/4.1.0/view/1/6/#id3540405
- t3lib_div::getIndpEnv http://typo3.org/documentation/document-library/core-documentation/doc_core_cgl/4.1.0/view/1/3/
TYPOScript
Auf globale Einstellungen zugreifen:
- $GLOBALS["TSFE"]->tmpl->setup['config.']
Page ID auslesen / verwenden
$pid = (isset($this->conf['pid'])?$this->conf['pid']:$GLOBALS['TSFE']->id);
TCA erweitern
Ein Eintrag in der tca.php einer Extension, im Abschnitt "columns" kann z.B. so aussehen:
"name" => Array ( "exclude" => 1, "label" => "LLL:EXT:exampleext/locallang_db.xml:tx_exampleext_table.name", "config" => Array ( "type" => "input", "size" => "30", "eval" => "required", ) ),
Bei dem Config-Bereich können einige Dinge geändert werden. Der Wert von "type" kann folgende Werte annehmen: input, text, check, radio, select, group, none, passthrough, user, flex.
Es können weitere Eigenschaften definiert werden:
default: Default Wert
size : Größe des Input-Feldes
eval : Auswertung, z.B. required, date, double2 (das DB Feld sollte dann via double(11,2) definiert sein)
cols : Bei typ "text"
rows : Bei typ "text"
max : Anzahl maximaler Zeichen
checkbox : Anzeige der Checkbox for dem Feld ("0" oder "1")
range : Bereich in dem ein Wert liegen darf, bei Datum z.B.
"range" => Array (
"upper" => mktime(0,0,0,12,31,date("Y")+20),
"lower" => mktime(0,0,0,date("m")-1,date("d"),date("Y"))
)
Alles rund um Flexforms in eigenen Extensions was mir wichtig erscheint
ext_tables.php anpassen:
// Das Feld pi_flexform enthält die XML-Daten der Flexform. // Also muss es bei der Wahl der Extension auch angezeigt werden. $TCA['tt_content']['types']['list']['subtypes_addlist'][$_EXTKEY.'_pi1']='pi_flexform'; // Flexform an das Plugin binden // meintest steht für das Verzeichnis der Extension, dort wird auch die Flexform-Datei abgelegt t3lib_extMgm::addPiFlexFormValue($_EXTKEY.'_pi1','FILE:EXT:meintest/flexform_ds_pi1.xml'); // Falls mehrere Plugins existieren, werden _pi2 usw. genutzt
// Die XML-Datei bestimmt wie die Flexform aussieht, in diesem Beispiel // wird bei Mehrsprachigkeit trotzdem nur eine Eingabemöglichkeit angegeben // Bei Sprachneutralen Eingaben sinnvoll. flexform_ds_pi1.xml
<T3DataStructure>
<meta>
<langDisable>1</langDisable>
<!-- <langChildren>1</langChildren>!-->
</meta>
<sheets>
<sDEF>
<ROOT>
<TCEforms>
<sheetTitle>Einstellungen - wird dann angezeigt</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<seite>
<TCEforms>
<exclude>1</exclude>
<label>Ein Contentelement wählen</label>
<config>
<type>group</type>
<internal_type>db</internal_type>
<allowed>tt_content</allowed>
<size>1</size>
<maxitems>1</maxitems>
<minitems>0</minitems>
<show_thumbs>1</show_thumbs>
</config>
</TCEforms>
</seite>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
Zugriff in der Extension erhalten wir via:
// Initialisieren der Flexform und die Daten des Plugins holen $this->pi_initPIflexForm(); // einmal z.B. in main() // die Einstellungen holen wir uns dann via: $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'seite', 'sDEF') // pi_getFFvalue ist eine Funktion der Klasse tslib_pibase
TypoScript in eigener Extension verwenden
TypoScript (Liste TypoScript)
#Typoscript:
plugin.tx_meineext.abstract = TEXT
plugin.tx_meineext.abstract {
crop = 250 | ... | 1
wrap = <p>|</p>
}
plugin.tx_meineext.coa = COA
plugin.tx_meineext.coa {
10 = HTML
10.value = Hallo Welt
10.value.wrap = <h1>|</h1>
}
// Die Konfiguration könnte in TypoScript gemacht werden, // es kann aber auch direkt in der Extension geschrieben werden $this->conf['abstract'] = 'TEXT'; $this->conf['abstract.']['crop'] = '250 | ... | 1'; $this->conf['abstract.']['wrap'] = '<p>|</p>';
foreach ($data as $key => $value) {
// Dynamisch kann jetzt der Inhalt von "value" gesetzt werden:
$this->conf['abstract.']['value'] = $value['abstract'];
// Einfache Objekte so:
$content .= $this->cObj->cObjGetSingle($this->conf['abstract'],$this->conf['abstract.'],'abstract.');
// COA (Content Object Arrays):
$content .= $this->cObj->cObjGet($this->conf['coa.'],'coa.');
}
Mehrsprachige Extensions entwickeln
Zur Vorbereitung: http://typo3.org/documentation/document-library/extension-manuals/doc_l10nguide/1.0.0/view/1/2/#id2796573
Der Kickstarter kann schon einiges vorbereiten. Die Verwendung in der Extension ist auch relativ einfach:
Damit via Typoscript
pluginname_pix._LOCAL_LANG.de.text = Anderer Text
gesetzt werden kann, muss die Zuweisung in der Main-Funktion in der folgenden Reihenfolge ablaufen:
$this->conf=$conf; $this->pi_loadLL();
da pi_loadLL auf this->conf zugreift. Und die Ergebnisse zwischenspeichert - also nur einmal berechnet.
In der locallang.xml der Extension werden die Einträge für die unterschiedlichen Sprachen vorgenommen.
<languageKey index="default" type="array"> <label index="list_mode_1">Mode 1</label> .... </languageKey>
Wichtiger Hinweis an dieser Stelle: innerhalb von "default" dürfen nur ANSI Zeichen, also keine Umlaute verwendet werden. Im Abschnitt "de" dürfen dann auch die deutschen Umlaute (öäüß) eingesetzt werden.
<languageKey index="de" type="array"> <label index="list_mode_1">Modus 1</label> .... </languageKey>
In der Extension kann dann auf den Inhalt zugegriffen werden:
$this->pi_getLL('list_mode_1','Text, falls kein Eintrag in locallang.xml',true);
Der erste Parameter entspricht dem index eines label-Tags aus der locallang.xml, der zweite Parameter ist ein "Fallback". Falls in der locallang.xml kein entsprechender Eintrag vorhanden ist, dann wird dieser Text verwendet. Der dritte Parameter bestimmt, ob der Text noch durch htmlspecialchars() geschickt werden soll.
Die entsprechenden Spracheinstellungen können jetzt auch via TypoScript
plugin.tx_meineext_pi1._LOCAL_LANG.de.list_mode_1 = Der erste Modus
angepasst werden.
Wenn aber die Daten aus der Datenbank gelesen werden sollen, und z.B. aus einer mit dem Kickstarter angelegten Tabelle die Einträge in der korrekten Spalte angezeigt werden sollen, hilft folgender Schnipsel weiter:
if ($this->LLkey) {
$where_clause .= ' AND sys_language_uid='.intval($GLOBALS['TSFE']->config['config']['sys_language_uid']);
}
Das Feld sys_language_uid ist in der Tabelle vorhanden (wenn man das entsprechend im Kickstarter angelegt hat). In $this->LLkey wird der Inhalt der gesetzten Sprache (z.B. "en") abgelegt. Er bezieht sich klassicherweise auf den L-Parameter.
In $GLOBALS['TSFE']->config['config']['sys_language_uid'] ist der Wert, den man via TypoScript für den entsprechenden Sprachparamter gesetzt hat.
[globalVar = GP:L=1] config.language = en # Dieser Wert wird für die Übersetzung verwendet und auf diesen Wert wird entsprechend in der Abfrage oben bezogen. config.sys_language_uid = 1 config.htmlTag_langKey = en config.locale_all = en_EN [global]
Wenn jetzt Allerdings auch noch die Seiten (Tabelle pages) relevant werden, dann funktioniert der Weg von oben so nicht mehr.
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit);
// Einen Datensatz holen
$data = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
if ($GLOBALS['TSFE']->sys_language_content) {
// Der sys_language_mode wird berücksichtigt.
$OLmode = ($this->sys_language_mode == 'strict'?'hideNonTranslated':);
// Die bereits abgefragten Daten werden jetzt überschrieben, dafür werden die benötigten Inhalte aus der entsprechend
// übersetzten Tabelle verwendet.
$data = $GLOBALS['TSFE']->sys_page->getRecordOverlay($from_table, $data, $GLOBALS['TSFE']->sys_language_content, $OLmode);
}
Globale Variablen für die TYPO3 Programmierung
Die folgenden Werte existieren, welche wann verwendet werden sollten und in welchem Context vorhanden sind, ist noch offen
- HTTP_POST_VARS
- _POST
- HTTP_GET_VARS - Array
- _GET
- HTTP_COOKIE_VARS
- _COOKIE
- HTTP_SERVER_VARS
- _SERVER
- HTTP_ENV_VARS - Array
- _ENV - Array
- HTTP_POST_FILES - Array
- _FILES - Array
- _REQUEST - Array
- TYPO3_MISC - Array
- TT - Object
- GLOBALS - Array
- TYPO3_CONF_VARS - Array
- T3_VAR - Array
- TYPO_VERSION - 4.1
- T3_SERVICES - Array
- displayErrors - -1
- TYPO3_LOADED_EXT - Array
- _EXTKEY - Der Extensionkey der Extension, die die Variable abfragt
- _EXTCONF - Enthält einen serialisierten String der aus den Einstellungen beim Installieren der Extension erzeugt wird.
- EM_CONF - Array
- EXEC_TIME - 1180958569
- SIM_EXEC_TIME - 1180958569
- TYPO3_DB - Object
- CLIENT - Array
- temp_extId -
- temp_TSFEclassName - tslib_fe
- TSFE - Object
- temp_previewConfig -
- BE_USER - Object
- LANG - Object
- TCA - Array
- temp_incFiles - Array
- temp_file -
- INTiS_config - Array
- INTiS_cPart - Array
- INTiS_resourceList - Array
- INTiS_theLib - ?
- INTiS_incFile - ?
- LANG_GENERAL_LABELS -
Hooks
Die ID ist auch nach dem speichern noch in der Form NEWabcde123 und kann mit dem Array: if (!is_numeric($id)) $id = $this->substNEWwithIDs[$id]; in eine Zahlzurückverwandelt werden
Caching
Das Plugin wird in einer der conf-Dateien via:
t3lib_extMgm::addPlugin
geladen. der Dritte Parameter definiert, ob als USER oder als USER_INT.
0 bedeutet USER_INT 1 bedeutet USER
Das Plugin wird in der ext_localconf mit der methode
addPItoST43($key,$classFile=,$prefix=,$type='list_type',$cached=0)
eingeführt: addPlugin ist nur für das BE relevant und kennt den cache Parameter nicht. Der Parameter ist der der 5 in einer anderen Methode
Wichtig ist dabei, dass innerhalb der Main-Methode des Plugins eine der folgenden Zeilen hinzugefügt wird:
$this->pi_USER_INT_obj=1; // USER_INT Objekt $this->pi_USER_INT_obj=0; // USER Obj
tt_news / Caching
TCEMAIN.clearCacheCmd = 647,637
Typoscript ein kleiner Rundblick
die entsprechenden Bereiche habe ich auf die folgende Seite ausgelager: User:Maholtz/45MinutesTypoScript
Typoscript macht das Leben (mit TYPO3) leichter
Dateien listen
Geht auch mit Typoscript ganz einfach:
page.100 = HTML # Verzeichnis, Dateityp usw. auswählen page.100.value.filelist = fileadmin/dateien/|jpg,jpeg|name| |1 # Wir bekommen eine komma-getrennte Liste mit den Dateinamen # wir benötigen die Split-Funktion um diese Elemente einzeln zu bearbeiten. page.100.value.split { token = , cObjNum = 1 1 { 10 = IMAGE # wir importieren den aktuellen Dateinamen (current) 10.file.import.current=1 # Anzeige nur mit 250px Breite 10.file.width = 250px # Zusätzlich wird ein Link erstellt, der auf die richtige Datei verlinkt. 10.stdWrap.typolink.parameter.current = 1 10.wrap = <div style="padding:10px;">|</div> } }
HTML in Feldern erlauben
# in der Überschrift soll ein <u>-Tag zugelassen werden,
# ansonsten aber alle Elemente wie gewohnt geparst werden.
lib.stdheader.10.setCurrent.htmlSpecialChars = 0
lib.stdheader.10.setCurrent.parseFunc {
allowTags = u
denyTags = *
constants=1
nonTypoTagStdWrap.HTMLparser = 1
nonTypoTagStdWrap.HTMLparser {
keepNonMatchedTags=1
htmlSpecialChars = 2
allowTags = u
removeTags = *
}
}
Title-Tag anpassen
Ziel: im Title Tag soll nicht nur ein fester Wert mit der aktuellen Seite stehen, sondern die Rootline.
Lösung: Wir bauen ein Rootline-Menü und fügen das in den Title-Tag ein.
# wichtiger Hinweis: # config.noPageTitle = 1 besagt aus, dass der aktuelle Seitenname nicht mehr angezeigt werden soll. # Der Inhalt des Titel-Feldes aus dem Template wird trotzdem angezeigt. # Man erhält also zwei <title>-Tags, außer man schaltet mit config.noPageTitle = 2 # die Generierung des Title-Tags vollkommen aus.
# Ein rootline Menü erstellen titletagrootline = HMENU titletagrootline { special = rootline special.range = 0|-1 includeNotInMenu = 1 1 = TMENU 1.wrap = | 1.noBlur = 1 1.NO { stdWrap.noTrimWrap = | | » | doNotLinkIt=1 } 1.CUR = 1 1.CUR { stdWrap.noTrimWrap = | | | doNotLinkIt=1 } }
titletag = COA titletag.20 < titletagrootline titletag.wrap = <title>TG Münster von 1862 e.V. | </title>
# Und jetzt auf der Seite noch anzeigen lassen. page.headerData.20 < titletag
Hat geholfen? Dann freue ich mich über einen kurzen Kommentar:)
Bytes berechnet mit 1024
Wenn wir z.B. Entfernungswerte nach m | km analog zu Bytes aufteilen wollen, dann können wir bytes nicht verwenden.
Eine alternative Lösung sieht so aus (kennt jemand einen schöneren Weg, dann schreibs doch hier rein)
Man könnte einen stdWrap für "meter" anlegen, dann ist es genauso schön wie "bytes" verwendbar. Ich weiß aber nicht, was man dafür erweitern muss. Ist aber bestimmt möglich. --Daniel Brüßler 12:25, 28 February 2007 (CET)
hm... da müsste die class.tslib_content.php erweitert werden (die Funktion stdWrap und eine neue Funktion dimensions?). Wenn müsste es möglich sein einen bliebigen Faktor zu nehmen. Also die Möglichkeit 1024,1000 aber auch 10 oder 12 als Faktor zu verwenden sollte schon sein. In der TSlib ist die Grenze übrigens nicht auf 1023 gesetzt sonder auf 900. Dadurch wird verhindert das dort steht 999 Bytes anstatt von 0.9 Bytes. Sollte vielleicht auch Variabel sein. Ob es jemand braucht?
entfernung = COA entfernung { # Der Fall größer als 999, also soll km ausgegeben werden 100 = HTML 100.value.wrap = | km # bytes rechnet mit dem Faktor 1024 # 100.value.bytes = 1 # 100.value.bytes.labels = m | km 100.value.if.isLessThan = 999 # Annahme: in subtitle steht die Entfernung, selbstverständlich # kann jedes andere Feld dafür verwendet werden 100.value.if.value.field = subtitle 100.value.prioriCalc = 1 100.value.cObject = TEXT 100.value.cObject.dataWrap = {field:subtitle} / 1000 100.value.insertData=1 100.value.if.isTrue.field = subtitle # Der Fall kleiner als 1000, also soll m ausgegeben werden 150 = HTML 150.value.wrap = | m # Bildet die Basis für den Vergleich von isGreaterThan 150.value.if.value.field = subtitle # gibt true zurück, wenn der Wert in "isGreaterThan" größer ist als der "Basis-Wert" # d.h. wenn die Entfernung kleiner als 1000 ist, dann wird "true" zurückgegeben 150.value.if.isGreaterThan = 1000 # Sicherstellen, dass irgendein Wert gesetzt ist 150.value.if.isTrue.field = subtitle den Wert holen 150.value.field = subtitle 150.value.insertData=1 # Das Feld ist leer 200 = HTML 200.value = k.A. 200.value.if.isFalse.field = subtitle }
tt_news Relateded News pro Kategorie
Leider funktioniert das so noch nicht!
plugin.tt_news {
showRelatedNewsByCategory = 1
# Sortiert nicht nach der Category, sondern der Anzahl der Verknüpften Kateogrien
listOrderBy = category
displayList.categoryTitles_stdWrap.dataWrap = <h1>|</h1>
displayList.categoryTitles_stdWrap.if.equals.dataWrap = {register:newsCategoryUid}
displayList.categoryTitles_stdWrap.if.value.dataWrap = {register:relatedcategory}
# Die Kategorie soll nur ausgegeben werden, wenn eine neue Kategorie beginnt.
# d.h. die beiden Register müssen unterschiedlich sein.
# das trifft zu, wenn die erste Related-News gerendert wird, da dann der Register
# relatedcategory noch leer ist und es trifft bei jedem Kategorie wechsel zu,
# da dann newsCategoryUid einen anderen Wert hat und relatedcategory noch den
# alten
displayList.categoryTitles_stdWrap.if.negate=1
displayList.categoryTitles_stdWrap.append = COA
displayList.categoryTitles_stdWrap.append {
# Dieser Register wrid nach dem if ausgeführt.
10 = LOAD_REGISTER
10.relatedcategory.cObject = TEXT
10.relatedcategory.cObject.dataWrap = {register:newsCategoryUid}
}
}
Der Ansatz ist eher simple, die Umsetzung hat etwas gedauert (nachher bin ich bekanntlich immer schlauer). Zuerst wird via listOrderBy sichergestellt, dass die Related-News nach der Kategorie sortiert werden.
Im Register newsCategoryUid steht die ID der ersten Kategorie der News. Das wird mit dem Register-Wert von relatedcategory verglichen. Dieser Wert wird via append gefüllt. Bei der ersten Related-News ist der Register relatedcategory noch leer, also wird der Header ausgegeben. Bei allen folgenden News ist relatedcategory gefüllt und erst wenn die Kategorie in newsCategoryUid wechselt, gibt die if-Bedingung ein true (man beachte das .negate=1) zurück. Die Überschrift (Kategorie) wird ausgegeben.
tt_news via XML ausliefern - pro Kategorie
tt_news muss ganz normal konfiguriert werden. Damit dann in Abhängigkeit von dem Kategorie Parameter &tx_ttnews[cat]=1 nur die bestimmte Kategorie im RSS-Feed auftaucht, muss der Code wie folgt angepasst werden. Jetzt braucht der RSS-Feed nur um den jeweiligen Parameter erweitert werden, und wir bekommen einen RSS-Feed einer bestimmten Kategorie.
[globalVar = HTTP_GET_VARS|tx_ttnews|cat>0]
xmlnews.10.categoryMode = 1
xmlnews.10.categorySelection = {GPvar:tx_ttnews|cat}
xmlnews.10.categorySelection.intval = 1
[end]
RTE ... in bearbeitung
Einen Default-Wert für das Target Feld im Link-Editor setzen. Dieser Wert wird dann im Textfeld vorbelegt und kann von dem Benutzer geändert werden.
RTE.default.defaultLinkTarget = _self
Br innerhalb von p-Tags zulassen
RTE.default.proc.dontConvBRtoParagraph = 1
Extensions
ich versuche hier mal ein paar Extensions mir anzuschauen und diese zu vergleichen
Chat Extensions
Derzeit im Repository gefunden:
AJAX Chat 0.2.5
[TYPO3-Extension "vjchat" not found]
Mit Manual
"Before you install the extension you should consider a page or sysfolder where the data records for the chat will be placed (chat entries, rooms and sessions)." das ist im derzeitigen Handbuch nicht ganz korrekt. Die Datensätze können nur in einem __sysfolder__ angelegt werden.
auch fehlt der Hinweis, dass für diese Extension, zwingend prototypejs (prototypejs) (contact: vtietz) erforderlich ist...
und Prototype liegt unter der __MIT-style license__ wie die sich im zusammenspiel mit der gpl verhält ist mir unklar, vermutlich sollte es aber keine Probleme geben? Das sollte noch geprüft werden.
Chatbox 0.0.4
Chatbox (so_chat) (contact: onnoschuit)
Mit Manual
Laut Manual ist diese Extension ein Test der JPSpan (so_jpspan) (contact: onnoschuit)
habe ich mir nicht näher angeschaut
Ajax Chat 0.0.3
ajaxchat (ajaxchat) (contact: andi_puehringer)
Mit Manual
nach Angaben des Manual hat diese Extension noch Probleme mit der Mozilla Familie und hat einen deutlich geringeren Umfang als vjchat
[netzrezepte.de] Ajax Chat 0.0.2
ajaxchat (ajaxchat) (contact: andi_puehringer)
Mit Manual
Dieses ist die Vorgänger Version von Ajax Chat 0.0.3, der Extension-Key wurde geändert und somit liegt die alte Extension noch im Repository.
Wer ist online
kh_usersonline
Users Online (kh_usersonline) (contact: karsten)
Version: 0.2.2
erstellt zwei eigene Tabellen
Zitat: You can show the number of guests (not logged in users), members (logged in users) and all users together. Further it can display the login name of the current user.
Out of the Box:
Zur Zeit sind 0 Gäste und 1 Mitglied online. max: 1 Besucher Du bist eingeloggt als maholtz.
sehr schön.
Leider bezieht sich diese Abfrage nur auf die IP. So dass zwei Personen aus einem Firmennetz oder über ein Proxy nur als eine Person gezählt werden (auch wenn beide angemeldet sind!)
gsi_whoisonline
Who-Is-Online (gsi_whoisonline) (contact: masi)
ändert die TAbelle tt_content
ALTER TABLE tt_content ADD tx_gsiwhoisonline_order int(11) unsigned NOT NULL default '0'; ALTER TABLE tt_content ADD tx_gsiwhoisonline_limit int(11) NOT NULL default '0';
Diese Extensions ist auf "shy" gestellt.
Ein paar Einstellungen müssen im Konstanten-Editor gesetzt werden, dann arbeitet die Extension aber sauber mit der Benutzerliste der newloginbox und mit cwt_community zusammen.
Anzeige der angemeldeten Benutzer funktioniert out of the box.
Die Anzeige wird durch ein HTML-Template gestaltet.
Allerdings nicht Sprach-Abhängig.
Neben TypoScript existiert die Möglichkeit auch ein Frontend-Plugin als Content-Element hinzuzufügen. Das scheint allerdings die Konstanten zu ignorieren:(
Diese Extension bezieht sich nur auf Frontend-Benutzer, nicht auch auf "Gäste".
fgc_whoson
fgc_whoson (fgc_whoson) (contact: fehlgeleitet)
legt eine eigene Tabelle an
benötigt die Extension xajax, allerdings ist das nicht in den dependencies eingetragen:/
TYPO3 Fatal Error: Extension key "xajax" was NOT loaded! (t3lib_extMgm::extPath)
Diese Extension geht davon aus, dass jemand "beobachten" möchte wer online ist. Es
da die Seite, die das Plugin enthält auf no_cache stehen soll (obwohl die Abfrage via Ajax passiert) ist sie nicht dafür geeignet, dass sie auf jede Seite gesetzt wird. Sei berechnet die Personen die online sind, ebenfalls anhand der IP-Adressen.
Die Extensions schmeißt den gesamten XML-Output in eine Alert-Box wenn es Fehler gibt - für die Produktivumgebung imho nicht geeignet.
sd_useronline
sd_useronline (sd_useronline) (contact: mschouten)
legt eine eigene Tabelle an
aber derzeit nicht mehr im Repository zu finden?
baut auf kh_usersonline auf und erweitert diese um den User, damit nicht alleine die IP für die Zuordnung verwendet wird.
Allerdings fängt das nur Benutzer ab, die mit der gleichen IP-Adresse surfen und eingeloggt sind.
ich habe die Erweiterung so angepasst, dass sie sich bei nicht eingeloggten Besuchern aufs Cookie bezieht, so können wir auch die Zahlen der "anonymen Benutzer" die über die gleiche IP kommen besser messen.
mp_users_online
MP Users Online (mp_users_online) (contact: pixelschlampe) 0.3.1
Ohne Anleitung
hm... mir ist auch nicht klar, warum ich die Extension (weder Plugin noch Typoscript) zum laufen bekomme.
