[TYPO3-german] Extbase 6 Ext mit FE user als select list

Robert Wildling rowild at gmx.net
Fri Jul 12 15:21:39 CEST 2013


Lieber Renzo - du treue Seele!! Danke für deine immer wiederkehrende Hilfe!

Ich, in meiner Unwissenheit, hab einen fundamentalen Denkfehler gemacht: 
Ich habe eine eigene Tabelle "Zielgruppe" angelegt, diese mit fe-users 
gemappt und dann eine Relation hergestellt. Und das ist ganz und gar 
nicht das, was ich brauche und wahrscheinlich auch nicht, wie es 
funktionieren soll.

Stattdessen habe ich nun in der Haupttabelle "Termine" ein Relationsfeld 
"Zielgruppe" als m:n angelegt, das im Feld "Relation to external class" 
den Verweise "TYPO3\CMS\Extbase\Domain\Model\FrontendUser" bekommt.

Und siehe da: Es funktioniert! Heureka!

Aber nachdem wir schon dabei sind: vielleicht kann mir jemand erklären, 
worin eigentlich der Unterschied zwischen m:n und m:m Relationen besteht?

Im Extension Builder wird ja eine m:n Relation angeboten, die angelegten 
Tabellen werden aber mit dem "_mm"-Kürzel versehen. In welchem Szenario 
müsste man denn nun welche Relation verwenden?

Herzlichen Dank!
LG, Robert



> Hallo Robert
>
> ist es ein Fehler des mappings in der setup.txt?
> Lass da mal den Record-Type einfach weg. Dann nimmt er normale fe_user
> vom Standardtyp.
>
> Gruss Renzo
>
>
> ________________________________________________________________________
>
>
> Renzo Bauen
> conPassione gmbh
> T +41 33 345 00 92
> M +41 79 330 10 11
> http://www.conpassione.ch
> TYPO3 Bronce Associate
>
> Am Freitag, den 12.07.2013, 12:18 +0200 schrieb Robert Wildling:
>
>> 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 at lists.typo3.org
>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german



More information about the TYPO3-german mailing list