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

Antwort per Email an