Zum Inhalt springen

femanager erweitern mit eigenem Selectfeld

Erstellt am 28. Januar 2015 · 6 Antworten · letzte Antwort am 2. Februar 2015

Tags: Extbase, femanager, TYPO3 6.x, Frage

HH ·

Hallo,
ich könnte etwas Starthilfe gebrauchen.
Ich habe die fe_users durch einige Felder erweitert. Das ganze habe ich mit dem Extensionbuilder bewerkstelligt. Einige der erweiterten Felder sind Relations auf andere Tabellen.
Z.B. Fach (Mathe, Phyisk, Deutsch usw..)
Im Backend funktioniert das ganze soweit auch, d.h. ich kann den fe_users ein entprechendes Fach per Dropdown zuordnen.

Jetzt möchte ich gerne das ganze im Frontend mithilfe des femanagers benutzen.
Das heißt ich möchte fe_user im frontend anlegen und dabei meine erweiterten Felder mit verwenden (ich hoffe ich habe mich verständlich ausgedrückt)

- Im Page TS habe ich die entsprechenden Einträge, so dass mir im Backend der femanager meine Felder für das FE Formular anbietet.
- ich hab ein entsprechendes Template erstellt, das Frontend zeigt mir eine Dropdownliste an.

Die Dropdownliste ist allerdings leer,
Mir ist klar, dass ich die entsprechenden Controler noch nicht geschrieben habe und da steh ich auch noch etwas auf dem Schlauch....

Der Extensionbuider erstellt mir ja Controller (wenn ich dort ein fe plugin erstelle) um im FE diese Daten zu bearbeiten.
Kann ich jetzt diese Controler einfach abändern?
also statt : class FachController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
einfach den extends femanager?
Kann ich dem Controler einen beliebigen Namen geben?
Muss ich den sonst noch irgendwie einbinden?
Kommt der mit den fe_users im Backend in die quere?!?

Da fehlt mir etwas der Einstieg und ich habe leider keine Anleitung im Internet gefunden.
Die femanagerextend hilft mir nicht so richtig weiter, da beide wahrscheinlich den selben vendor (In2) haben, verwirrt mich das etwas.

Bin für jeden Hinweis dankbar!
Harald

HH ·

Danke für die Antwort,
ja das hab ich gesehen, hab da trotzdem so meine Schwierigkeiten das ganze nachzuvollziehen.

Ich habe in einer anderen Extension ein Selectfeld im FE hinbekommen, das ganze hat sich allerdings nur innerhalb meiner Extension abgespielt, daher war das irgendwie einfacher.
der ViewHelper sollte ja derselbe sein, z.B.:

<f:form.select property="fach" options="{alleFaecher}" optionValueField="uid" optionLabelField="name" />

Muss ich jetzt in meiner z.B. meineExtensionController.php den Aufruf machen:

$this->view->assign('alleFaecher', $this->fachRepository->findAll());

Wie bekommt der femanger dann den Inhalt von alleFaecher mitgeteilt.

Was mir nicht ganz klar ist: Mit meiner Extension habe ich die fe_users erweiter, ich muss aber auch die femanager Extension erweitern damit er auf die erweiterten Felder der fe_users zugreifen kann?
Danke!!!!

einpraegsam.​net ·

Ich kenne deine Extension zwar nicht, aber ich gehe davon aus, dass dein Controller den Originalen ersetzt und von diesem erbt.
Geht es um die Registrierung - dann also

namespace Vendor\Extname\Controller;

class EditController extends \In2\Femanager\Controller\EditController {
        
	/**
	 * describtion
	 *
	 * @param \Vendor\Extname\Domain\Model\User $user
	 * @return void
	 */
	public function newAction(Vendor\Extname\Domain\Model\User $user = NULL) {
                parent::updateAction($user);
                $this->view->assign('alleFaecher', array('...'));
        }
}
HH ·

Danke nochmals,
jetzt denke ich habe ich wieder ein bisschen mehr verstanden.

Wenn ich die alleFaecher bereits beim Anlegen eines Nutzer bzw. Einladen (invitation) zur Auswahl haben will, muss ich dann nicht den NewController bzw InvitationController erweitern?
Und dann Wahrscheinlich in beiden Fällen die parent::newAction($user) einbinden?

Danke!

HH · · Beste Antwort

Nochmals....Vielen Vielen Dank!
Ich hab's inzwischen hinbekommen und wieder viel gelernt.
Falls jemand mal vor dem selben Problem steht hier meine Lösung.

Ich habe die femanagerextended um ein select feld hobby erweitert.
Allerdings habe ich nur den invitationController erweitert.

/**
	 * action new
	 *
	 * @return void
	 */
	public function newAction(\In2\Femanagerextended\Domain\Model\User $user = NULL) {
		parent::newAction();
		$this->view->assign('hobby', array(
						'1' => 'Musik',
						'2' => 'Sport',
						'3' => 'Lesen', 
						)
					);
		
	}

Die ext_typoscript_setup.txt natürlich auch, da sonst ja weder twitterID, skypeId noch meine hobby in der Invitation funktionieren.

config.tx_extbase{
	persistence{
		classes{
			In2\Femanager\Domain\Model\User {
				subclasses {
					0 = In2\Femanagerextended\Domain\Model\User
				}
			}
			In2\Femanagerextended\Domain\Model\User {
				mapping {
					tableName = fe_users
					recordType = 0
				}
			}
		}
	}
	objects {
		In2\Femanager\Controller\NewController.className = In2\Femanagerextended\Controller\NewController
		In2\Femanager\Controller\EditController.className = In2\Femanagerextended\Controller\EditController
                In2\Femanager\Controller\InvitationController.className = In2\Femanagerextended\Controller\InvitationController

		In2\Femanager\Domain\Validator\ServersideValidator.className = In2\Femanagerextended\Domain\Validator\CustomServersideValidator
		In2\Femanager\Domain\Validator\ClientsideValidator.className = In2\Femanagerextended\Domain\Validator\CustomClientsideValidator
	}
}

ext_tables.php und ext_tables.sql sowieso, damit die fe_users um das Feld hobby erweitert werden.

Momentan ist es so, dass ich den Array im Controller "von Hand" definiere. Das sollte aber auch Problemlos mithilfe DI und damit dem Zugriff auf eine andere Klasse/Model gehn.

Wer sich das genauer ansehen will hir mal meine modifizierte Extension:

http://schickhardt.org/hh/femanagerextended_0.1.2_201502022205.zip

Grüße!