Zum Inhalt springen

femanager erweitern um multiselect checkbox

Erstellt am 1. Juli 2014 · 3 Antworten · letzte Antwort am 31. März 2015

Tags: Extbase, femanager, Frage

sini ·

Ich versuche grade, femanager um felder zu erweitern, sämtliche Felder funktionieren auch wie gewünscht, nur die Multiselect checkbox leider nicht.

Angezeigt werden erstmal alle Optionen, aber bedauerlicherweise werden nach dem Speichern alle checkboxen angehakt.

Ich habe mich an diese Anleitung gehalten http://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Form/Checkbox.html, aber die _construct-Funktion wird leider niemals aufgerufen und sämtliche checkboxen werden mit dem Namen name="tx_femanager_pi1[user][artDetails]" angezeigt, anstatt mit name="tx_femanager_pi1[user][artDetails][]. Wie könnte man dieses Problem lösen?

boOgiE ·

Hi, bin gerade nochmal über diesen Thread gestoßen, hier meine Lösung:
Ich habe die Änderungen direkt im femanager gemacht, ich weiß das ist nicht mehr updatefähig, aber das ist erstmal nebensächlich, das ganze auf eine provider extension zu übertragen sollte man hinbekommen 😉

Ich habe mir meine Anpassungen in eine Readme gepackt:

/*******************************************************************************

Adding field 'information by mail' to registration for ...

/*******************************************************************************
* file: ext_tables.sql
* add info_mail to table 'fe_users'
*/

CREATE TABLE fe_users (
	...
	info_mail varchar(255) DEFAULT '' NOT NULL,
);

/*******************************************************************************
* file: ext_tables.php
* added infoMail to TCA of fe_users
*/

$tempColumns = array (
	...
	'info_mail' => array (
		'exclude' => 1,
		'label' => 'LLL:EXT:femanager/Resources/Private/Language/locallang_db.xlf:tx_femanager_domain_model_user.infoMail',
		'config' => array (
			'type' => 'select',
			'items' => array(
				array('LLL:EXT:femanager/Resources/Private/Language/locallang.xlf:tx_femanager_domain_model_user.infoMail.0', 0),
				array('LLL:EXT:femanager/Resources/Private/Language/locallang.xlf:tx_femanager_domain_model_user.infoMail.1', 1),
			),
			'minitems' => 0,
			'maxitems' => 999, 
			'renderMode' => 'checkbox',
		)
	),
);
...
$fields .= ', info_mail';

/*******************************************************************************
* file: Classes/Domain/Model/User.php
* added infoMail to User-Model
*/

/**
 *
 * @var \string
 */
protected $infoMail;

/**
 * sets infoMail
 * 
 * @param string $infoMail
 * @return void
 */
public function setInfoMail($infoMail){
	$this->infoMail = $infoMail;
}

/**
 * returns infoMail
 * 
 * @return string $infoMail
 */
public function getInfoMail(){
	return $this->infoMail;
}

/*******************************************************************************
* file: Classes/Controller/NewController.php
* added implode and set value for infoMail to user
*/

public function createAction(User $user) {
	if ($this->request->hasArgument('infoMail')) {
		$user->setInfoMail(implode(',', $this->request->getArgument('infoMail')));
	}
	...
}

/*******************************************************************************
* file: Configuation/TypoScript/Main/setup.txt
* added config for amount of checkboxes
*/

settings {
	...
	misc {
		...
		# Number of infoMail options, if overwrite default(2) don't forget to add locallang values in TS or .xlf
		infoMailOptionAmount = 2
	}
	...
}

/*******************************************************************************
* file: Configuation/Flexforms/FlexFormPi1.xml
* added infoMail to Flexform
*/

<settings.new.fields>
	...
	<items type="array">
		...
		<numIndex index="20" type="array">
			<numIndex index="0">LLL:EXT:femanager/Resources/Private/Language/locallang_db.xlf:tx_femanager_domain_model_user.infoMail</numIndex>
			<numIndex index="1">infoMail</numIndex>
		</numIndex>
	</items>
	...
</settings.new.fields>

/*******************************************************************************
* file: Resources/Private/Language/locallang.xlf
* added default FE labels to locallang
*/

<trans-unit id="tx_femanager_domain_model_user.infoMailLabel">
	<source>I would like to receive information by email about</source>
</trans-unit>
<trans-unit id="tx_femanager_domain_model_user.infoMail.1">
	<source>Option 1</source>
</trans-unit>
<trans-unit id="tx_femanager_domain_model_user.infoMail.2">
	<source>Option 2</source>
</trans-unit>

/*******************************************************************************
* file: Resources/Private/Language/locallang_db.xlf
* added default BE labels to locallang_db
*/

<trans-unit id="tx_femanager_domain_model_user.infoMail">
	<source>Information by email</source>
</trans-unit>

/*******************************************************************************
* file: Resources/Private/Partial/Fields/InfoMail.html
* added partial for field
*/

{namespace femanager=In2\Femanager\ViewHelpers}
{namespace v=Tx_Vhs_ViewHelpers}
<div class="femanager_fieldset femanager_firstname control-group">
	<label for="femanager_field_infoMail" class="control-label">
		<f:translate key="tx_femanager_domain_model_user.infoMailLabel" />
		<f:if condition="{femanager:Misc.IsRequiredField(fieldName: 'infoMail', actionName: actionName)}">
			<span>*</span>
		</f:if>
	</label>
	<v:iterator.for from="1" to="{settings.misc.infoMailOptionAmount}" iteration="i">
		<div class="controls">
			<f:form.checkbox
				id="femanager_field_infoMail_{i.index}"
				name="infoMail[]"
				class="" 
				value="<v:math.subtract a='{i.index}' b='1' fail='1' />" />
			<f:translate key="tx_femanager_domain_model_user.infoMail.{i.index}" />
		</div>
	</v:iterator.for>
</div>