Hi,
Ich stehe vor einem mir unverständlichen Problem:
Eine kleine Extensions soll Termine sammeln, die in zwei von 6 Feldern
auf die Usergruppenmitglieder (einmal "Vortragende", einmal
"Zielgruppe") zugreifen soll, und zwar mit Mehrfachauswahl:
1. Feld: Termin (Datumsfeld)
2. Startzeit (HH:MM)
3. Endzeit (HH:MM)
4. Themenbereich (Selectliste aus der Tabelle "Themenbereiche")
5. Feld: Vortragende(r) (Selectlist aus FE-User der Gruppe 3)
6. Feld: Zielgruppe(n) (Selectlist aus FE-User der Gruppe 1)
Dass im TCA die Mitglieder der Gruppe 3 bzw 1 angezeigt werden, ist
derzeit hardgecoded mittels:
[...]
'vortragsperson' => array(
'exclude' => 0,
'label' =>
'LLL:EXT:lsbtermine/Resources/Private/Language/locallang_db.xlf:tx_lsbtermine_domain_model_termin.vortragsperson',
'config' => array(
'type' => 'select',
'foreign_table' => 'fe_users',
'foreign_table_where' => 'AND fe_users.usergroup=3',
'size' => 3,
'autoMaxSize' => 10,
'maxitems' => 9999,
'multiple' => 0,
),
),
)
[...]
)
Im TypoScript ist auch folgendes ergänzt:
plugin.tx_lsbtermine {
[...]
persistence {
storagePid = ...
classes {
Tx_Lsbtermine_Domain_Model_Vortragsperson {
mapping {
tableName = fe_users
recordType = Tx_Extbase_Domain_Model_FrontendUser
}
}
}
}
[...]
}
Die Verknüpfung zur FE-User-Tabelle wurde im ExtBuilder als m:n-Relation
angelegt mit \TYPO3\CMS\Extbase\Domain\Model\FrontendUser unter "Extend
existing Model Class".
Nachdem ich im FE die Daten als Terminliste abfrage, steht diese hierim
TerminController, wobei der SourceFolder in einer FlexForm den SysFolder
speichert, wo alle Termine angelegt wurden:
/**
* @package lsbtermine
* @license http://www.gnu.org/licenses/gpl.html GNU General Public
License, version 3 or later
*/
class TerminController extends
\TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* terminRepository
*
* @var \rowild\Lsbtermine\Domain\Repository\TerminRepository
* @inject
*/
protected $terminRepository;
/**
* action list
*
* @return void
*/
public function listAction() {
// check flexform (just a test)
if (!isset($this->settings['sourceFolderPid'])) {
$this->view->assign('sourceFolderPid', "The sourceFolderPid must be
set in TypoScript or Flexform");
return;
} else {
$sourceFolderPid =
intval($this->settings['sourceFolderPid']);
$this->view->assign('sourceFolderPid', $sourceFolderPid
);
}
// output the data
$termine = $this->terminRepository->findAll();
$this->view->assign('termine', $termine);
}
}
Wenn ich nun im Fluid Template ein <f:debug>{termine}</f:debug>
eintrage, werden auch alle (derzeit 4) Einträge erkannt. Stellvertretend
für einen Termin wird folgendes ausgegeben:
TYPO3\CMS\Extbase\Persistence\Generic\QueryResultprototypeobject (4 items)
0 => rowild\Lsbtermine\Domain\Model\Terminprototypepersistent entity
(uid=1, pid=52)
date => DateTimeprototypeobject (2013-09-10T00:00:00+02:00,
1378764000)
anmerkung => '' (0 chars)
zielgruppe =>
TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject (empty)
vortragsperson =>
TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject (empty)
themenbereiche =>
TYPO3\CMS\Extbase\Persistence\ObjectStorageprototypeobject (2 items)
000000000c8d22020000000038fe4cfd =>
rowild\Lsbtermine\Domain\Model\Themenbereichprototypepersistent entity
(uid=4, pid=52)
000000000c8d221d0000000038fe4cfd =>
rowild\Lsbtermine\Domain\Model\Themenbereichprototypepersistent entity
(uid=3, pid=52)
uid => 1 (integer)
_localizedUid => 1 (integer)modified
_languageUid => 0 (integer)modified
pid => 52 (integer)
"zielgruppe" und "vortragsperson" ist EMPTY, während Themenbereich die
jeweils zugeordneten Einträge findet.
WICHTIGSTE FRAGE:
Was muss ich bei den FE-Usern in welchen Files machen, damit auch da
eine Ergebnisanzahl gefunden wird? (Und eventuell auch, wie ich diese
dann im fluid template anzeigen kann...)
Muss ich im TerminController noch ein weiteres Repository anlegen? Oder
muss im VortragspersonenRepository eine andere Abfrage als findAll()
definiert werden? Falls letzteres, wie kann ich diese dann com
TerminController aus abrufen?
WEITERES:
Was ich wirklich gar nicht verstehe ist, dass der Ext-Builder im
ext_tables.php file so etwas anlegt:
t3lib_extMgm::addTCAcolumns('fe_users',$tmp_lsbtermine_columns);
$TCA['fe_users']['columns'][$TCA['fe_users']['ctrl']['type']]['config']['items'][]
=
array('LLL:EXT:lsbtermine/Resources/Private/Language/locallang_db.xlf:fe_users.tx_extbase_type.Tx_Lsbtermine_Vortragsperson','Tx_Lsbtermine_Vortragsperson');
$TCA['fe_users']['types']['Tx_Lsbtermine_Vortragsperson']['showitem'] =
$TCA['fe_users']['types']['1']['showitem'];
$TCA['fe_users']['types']['Tx_Lsbtermine_Vortragsperson']['showitem'] .=
',--div--;LLL:EXT:lsbtermine/Resources/Private/Language/locallang_db.xlf:tx_lsbtermine_domain_model_vortragsperson,';
$TCA['fe_users']['types']['Tx_Lsbtermine_Vortragsperson']['showitem'] .= '';
...und dabei einen neuen Objekttyp für FE-User definiert, der im BE beim
Anlegen neues FE-User auch auswählbar ist, nur mit dem Effekt, dass das
Eingabeformular verschwindet, wenn nicht der reguläre Typ
"Tx_Extbase_Domain_Model_FrontendUser" gesetzt wird.
Wozu dieser neue Typ? Wie setzt man ihn ein?
FAZIT:
Mir fehlt ganz offensichtlich ein grundlegendes Verständnis zum Thema
"Objekttyp", und das, obwohl ich S. Kurfürsts Buch und vieles anderes
gelesen habe. Allerdings muss man wohl auch sagen, dass die
Dokumentation zu Extbase 6 mehr als dürftig ist und vieles von früher
einfach veraltert ist (debugging zB). Also leicht wird es einem ja auch
nicht gerade gemacht... deswegen hoffe ich, dass ihr mir helfen könnt!
Hab mir Mühe gegeben, so ausführlich wie möglich zu sein!
Danke!
Beste Grüße, Robert
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german