Seminars Erweiterung
Beschreibung
Diese Erweiterung ergänzt die seminars Extension um eine ausführliche Suche. Gleichzeitig wurden viele Optionen deaktiviert oder neue hinzugefügt für das durchgeführte Projekt, so z.B.:
- Keine Registrierung nötig zur Anmeldung
- Anmeldung nur per mailformplus Formular
- Weitere Felder in Backend und Frontend
- Anpassung der Flexform bei der Seminareingabe
- Möglichkeit Beschriftungen zu ändern ohne zu überschreiben
- Wrapper in Template konfigurieren
- Markerersetzung für neue Felder in Templates
- Importroutinen (sehr spezifisch für dieses Projekt)
- Volltextsuche beschleunigt durch Felder ausschliessen
Ich habe die Erweiterung nicht ins TER gespielt weil sie sehr an Kundenvorgaben orientiert ist.
Typo3 Seminars Erweiterung
10/2007
Typo3 Seminars Erweiterung
Die Extension seminars bietet eine umfangreiche Verwaltung für Seminare, jedoch nur eine einfache Volltextsuche und begrenzte Anpassbarkeit.
Für www.storytellers-company.de wurde eine Extension erstellt (rsys_seminars_ext) welche diese Extension um eine Suchfunktion ergänzt mit der gezielt nach mehreren Kriterien gesucht werden kann.
Weiterhin passt diese Extension die Funktionalität der seminars Extension an spezielle Kundenanforderungen an:
- Zusätzliche Felder, gezielt durchsuchbar, im Backend pflegbar
- Ausblenden von Optionen
- Ändern der Texte und Umstrukturierung der Eingabemasken im Backend
- Anmelden ohne Benutzerregistrierung
- Datenimport über Administrations Plugin
- Gravierend schnellere Volltextsuche
Vorschau
Die Vorschau der Seminare funktionierte nicht. Also: Hook
// Hook to make it possible to preview seminars (Register hooks in TCEmain:)
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']
['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'EXT:rsys_seminars_ext/class.tx_rsysseminarsext_tcemain.php:tx_rsysseminarsext_tcemain';
class tx_rsysseminarsext_tcemain
function processDatamap_preProcessFieldArray(&$fieldArray, $table, $id, &$pObj) {
if ($table == 'tx_seminars_seminars' && is_int($id)) {
// direct preview
if (isset($GLOBALS['_POST']['_savedokview_x'])
&& !$fieldArray['type']
&& !$GLOBALS['BE_USER']->workspace) {
$pagesTSC = t3lib_BEfunc::getPagesTSconfig($GLOBALS['_POST']['popViewId']);
$singlePID = $pagesTSC['detailPID'];
if ($singlePID) {
$GLOBALS['_POST']['popViewId'] = $singlePID;
$GLOBALS['_POST']['popViewId_addParams'] = ($fieldArray['sys_language_uid']>0?'&L='.$fieldArray['sys_language_uid']:'')
.'&tx_seminars_pi1[showAll]=1&no_cache=1&tx_seminars_pi1[showUid]='.$id;
}
}
}
}
Vorschau Ein/Ausschalten
In der localconf.php kann konfiguriert werden ob der Button saveDocNew gezeigt wird (siehe im folgenden) aber ich wollte das auch für die Vorschau zum abschalten falls man keine Lust hat (wie oben) sie zu konfigurieren oder es keinene Sinn macht (Vorschau von keywords...).
Buttons konfigurieren
Global in der localconf.php
t3lib_extMgm::addUserTSConfig('
options.saveDocNew.tx_seminars_keywords = 1
options.saveDocShow.tx_seminars_keywords = 0 // custom
');
Pro User,Group (TS)
# options.RTESmallWidth = 445
options.RTESmallHeight = 600
options.saveDocNew.tx_seminars_keywords = 1
Erweiterung 'saveDocShow'
Das Flag saveDocShow wurde von mir eingeführt.
// XCLASS Extending of alt_doc
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/alt_doc.php'] = t3lib_extMgm::extPath('rsys_seminars_ext').'class.ux_alt_doc.php';
class ux_SC_alt_doc extends SC_alt_doc:
function makeButtonPanel() {
...
// SAVE VIEW button: rsys modified - set $viewButton for show/hide
global $BE_USER;
$key = 'saveDocShow';
$TSconfig = $BE_USER->getTSConfig('options.'.$key);
if( isset($TSconfig['properties'][$this->firstEl['table']]) ) {
$viewButton =
$this->getNewIconMode($this->firstEl['table'],$key);
} else {
$viewButton = 1;
}
...
// SAVE / VIEW button:
if ($this->viewId && !$this->noView && $viewButton && t3lib_extMgm::isLoaded('cms')) {
...
Sprachfiles ändern/erweitern
Um Sprachfiles existierender Extensions zu ändern ohne diese zu editieren habe ich folgendes gemacht:
Funktion zum Mergen zweier Arrays für PHP4.x
class.tx_rsysseminarsext_tools.php:
function array_merge_replace( $array, $newValues ) {
foreach ( $newValues as $key => $value ) {
if ( is_array( $value ) ) {
if ( !isset( $array[ $key ] ) ) {
$array[ $key ] = array();
}
$array[ $key ] = tx_rsysseminarsext_tools::
array_merge_replace( $array[ $key ], $value );
} else {
if (isset($array[ $key ] ) && is_array( $array[ $key ])) {
$array[ $key ][ 0 ] = $value;
} else {
if ( isset( $array ) && !is_array( $array ) ) {
$temp = $array;
$array = array();
$array[0] = $temp;
}
$array[ $key ] = $value;
}
}
}
return $array;
}
XCLASS
// XCLASS Extending of tx_seminars_pi1
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/seminars/pi1/class.tx_seminars_pi1.php'] = t3lib_extMgm::extPath('rsys_seminars_ext').'pi1/class.ux_tx_seminars_pi1.php';
class.ux_tx_seminars_pi1.php
class ux_tx_seminars_pi1 extends tx_seminars_pi1 extends tslib_pibase:
function pi_loadLL() {
parent::pi_loadLL();
if (!$this->additional_locallang_include) {
$basePath =
t3lib_extMgm::extPath('rsys_seminars_ext').'pi1/locallang.xml';
$tempLOCAL_LANG = t3lib_div::readLLfile($basePath,$this->LLkey);
// array_merge with new array first, so a value in locallang
// (or typoscript) can overwrite values from ../locallang
$this->LOCAL_LANG = tx_rsysseminarsext_tools::array_merge_replace(
is_array($this->LOCAL_LANG) ?
$this->LOCAL_LANG : array(),
$tempLOCAL_LANG
);
if ($this->altLLkey) {
$tempLOCAL_LANG = t3lib_div::readLLfile($basePath,$this->altLLkey);
$this->LOCAL_LANG=array_merge_replace(is_array($this->LOCAL_LANG) ?
$this->LOCAL_LANG : array(), $tempLOCAL_LANG);
}
$this->additional_locallang_include=true;
}
}
Backend Labels im Listview
Zum Ändern der Labels in der Listview im Backend benötigt man zunächst eine Klasse: class.user_Label.php
require_once(PATH_t3lib.'class.t3lib_befunc.php');
class user_Label {
function getUserLabel(&$params, &$pObj) {
$id = $params['row']['uid'];
$label = $params['row']['title'];
if ($id) { //zur Sicherheit...
$item = t3lib_BEfunc::getRecord('tx_seminars_seminars', $id);
$mylabel = ' [' . $params['row']['accreditation_number'] .']';
} else {
$mylabel = '[Fehler!]';
}
$params['title'] = $mylabel.', '.$label;
}
}
In ext_tables.php geschieht die Deklaration:
// CustomLabels in BE
require_once(t3lib_extMgm::extPath($_EXTKEY).'class.user_label.php');
// enable label_userFunc only for TYPO3 v 4.1 and higher
// Changes labels in list and detail view
if (t3lib_div::int_from_ver(TYPO3_version) >= 4001000) {
$TCA['tx_seminars_seminars']['ctrl']['label_userFunc'] = "user_Label->getUserLabel";
}
Backend Labels im EditMode
Zum Ändern der Labels im EditMode im Backend muss man t3lib_TCEforms vererben und überschreiben. Hier wird's nun kritisch, weil rsys_savereminder bereits dasselbe tut. Also überschreibe ich ux_t3lib_TCEforms von rsys_savereminder statt t3lib_TCEforms.
// XCLASS Extending of t3lib_tceforms
$TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.ux_t3lib_tceforms.php'] = t3lib_extMgm::extPath('rsys_seminars_ext').'class.ux_ux_t3lib_tceforms.php';
Die Klasse selbst ändert nun den Label (für existierende Datensätze):
class ux_ux_t3lib_TCEforms extends ux_t3lib_TCEforms {
function replaceTableWrap($arr,$rec,$table) {
// Make "new"-label
if (strstr($rec['uid'],'NEW')) {
...
} else {
// rsys: Label for seminars with seminars nr.
if ($table == 'tx_seminars_seminars') {
$newLabel = ' <span class="typo3-TCEforms-recUid">
Kurs ['.$rec['accreditation_number'].']</span>';
} else {
...
}
...
}
Anzahl der Datensätze und Sortierung in Listview
Um die Anzahl der Datensätze in der Listview zu ändern in die tca.php folgendes einfügen:
$rsys_globalConfiguration = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['rsys_seminars_ext']);
$maxRecordsInListView = $rsys_globalConfiguration['maxRecordsInListView'];
$TCA['tx_seminars_seminars']['ctrl']['default_sortby'] =
'ORDER BY ' . $default_sortby . ' ASC';
$TCA['tx_seminars_seminars'] = array(
'ctrl' => $TCA['tx_seminars_seminars']['ctrl'],
'interface' => array(
'showRecordFieldList' => 'hidden,starttime,endtime,title,...',
// Maximum number of items shown in the 'List' module
'maxDBListItems' => $maxRecordsInListView,
'maxSingleDBListItems' => $maxRecordsInListView
),...
Wobei maxRecordsInListView in der ext_localconf.php gespeichert ist. Die Einstellung kommt dorthin durch anlegen einer Datei ext_conf_template.txt welche die Werte enthält. Diese können in den Eigenschaften der Extension im EM konfiguriert werden.
# cat=basic/enable; type=integer; label=Number of records in list view. This setting applies to all record types of the seminars extension
maxRecordsInListView = 10
# cat=basic/enable; type=string; label=Default Sortfield in list view. This setting applies only to seminars records
default_sortby = title







