[TYPO3-english] mm_forum - extending user profile with select box

Peter Klein peter at umloud.dk
Thu Aug 20 09:56:26 CEST 2009


Here's another extended MM Forum field. (Maybe someone can use it as a
reference?)

This one displays a series of checkboxes, with data from the
fe_groups, so that the FE user can select the FE group he/she wants to
be a member of.

-- cut --
label = TEXT
label {
	value = Temagrupper
}
input = COA
input {
	// Save current value in register
	10 = LOAD_REGISTER
	10.fieldvalue.field = fieldvalue

	// Create hidden input boxes for existing non-themagroups
	20 = TEXT
	// Default usergroup for new users = 58
	// We need to set this here, as save will override the default
group set in MM forum
	20.value = 58
	// But if a value already exists, use that instead. (Existing
users)
	20.override.field = fieldvalue
	20.split {
		token = ,
		cObjNum = 1
		1 {
			10 = CONTENT
			10 {
				table = fe_groups
				select {
					pidInList = 1351
					andWhere.dataWrap =
uid={current:1} AND tx_sbnregional_istheme=0
				}
				renderObj = TEXT
				renderObj.dataWrap = <input
type="hidden" name="###USERFIELD_NAME###[]" value="{field:uid}" />
			}
		}
	}

	30 = CONTENT
	30 {
		table = fe_groups
		select {
			pidInList = 1351
			where = tx_sbnregional_istheme=1
			orderBy = title
		}
		renderObj = TEXT
		renderObj {
			insertData = 1
			value = <input type="checkbox"
name="###USERFIELD_NAME###[]" value="{field:uid}" /> {field:title}<br
/>
			override = <input type="checkbox"
name="###USERFIELD_NAME###[]" value="{field:uid}" checked="checked" />
{field:title}<br />
			override.if.value.data = register:fieldvalue
			override.if.isInList.field = uid
		}
	}
}
output = COA
output {
	10 = TEXT
	10.field = fieldvalue
	10.wrap = <ul>|</ul>
	10.required = 1
	10.split {
		token = ,
		cObjNum = 1
		1 {
			10 = CONTENT
			10 {
				table = fe_groups
				select {
					pidInList = 1351
					andWhere.dataWrap =
uid={current:1} AND tx_sbnregional_istheme=1
					orderBy = title
				}
				renderObj = TEXT
				renderObj.field = title
				renderObj.wrap = <li>|</li>
			}
		}
	}
}
datasource = usergroup

-- cut --

Unfortunatly MM Forum doesn't support saving of multiple checkboxes,
so you'll have to patch the source.

In line 352 of the file "class.tx_mmforum_pi2.php", insert this:

-- cut --
		// Add support for multiselect checkboxes
		if (is_array($value)) $value = implode(',',$value);
-- cut --

--
Peter Klein


On Thu, 20 Aug 2009 09:33:20 +0200, Peter Klein <peter at umloud.dk>
wrote:

>Hi Sean.
>
>I did it like this: 
>
>-- cut --
>label = TEXT
>label {
>	value = Kommune / Organisation
>}
>input = COA
>input {
>	// Save current value in register
>	5 = LOAD_REGISTER
>	5.fieldvalue.field = fieldvalue
>
>	wrap = <select
>name="###USERFIELD_NAME###">|</optgroup></select>
>	10 = CONTENT
>	10 {
>		table = tx_sbnregional_municipal
>		select {
>			pidInList = 1351
>			where = 1=1
>			orderBy = region,title
>		}
>		renderObj = COA
>		renderObj {
>			10 = CONTENT
>			10 {
>				table = tx_sbnregional_region
>				select {
>					pidInList = 1351
>					andWhere.dataWrap =
>uid={field:region}
>				}
>				renderObj = TEXT
>				renderObj {
>					value = <optgroup
>label="{field:title}">
>					insertData = 1
>					override =
></optgroup><optgroup label="{field:title}">
>					override.if.isTrue.data =
>register:region
>				}
>				stdWrap.if {
>					value.field = region
>					equals.data = register:region
>					negate = 1
>				}
>			}
>			
>			20 = COA
>			20 {				
>				10 = TEXT
>				10.dataWrap = <option
>value="{field:uid}" label="{field:title}"
>selected="selected">{field:title}</option>
>				10.if.value.data = register:fieldvalue
>				10.if.equals.field = uid
>
>				20 < .10
>				20.dataWrap = <option
>value="{field:uid}" label="{field:title}">{field:title}</option>
>				20.if.negate = 1
>			}
>			
>			30 = LOAD_REGISTER
>			30.region.field = region
>
>		}
>	}
>}
>output = COA
>output {
>	10 = CONTENT
>	10 {
>		table = tx_sbnregional_municipal
>		select {
>			pidInList = 1351
>			andWhere.dataWrap = uid={field:fieldvalue}
>			orderBy = title
>		}
>		renderObj = TEXT
>		renderObj.field = title
>	}
>}
>datasource = tx_sbnregional_kom_org
>-- cut --
>
>It's a bit more advanced than your snippet, as it fills the selectbox
>with data from 2 DB tables (OPTGROUP data comes from table1, and
>OPTION data from table2)
>
>The current selected item is stored in the LOAD_REGISTER part, and
>then reused in various places of the script.


More information about the TYPO3-english mailing list