<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://de.contaowiki.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://de.contaowiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Izanagi</id>
		<title>Contao Community Documentation - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://de.contaowiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Izanagi"/>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Spezial:Beitr%C3%A4ge/Izanagi"/>
		<updated>2026-05-02T09:16:56Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>https://de.contaowiki.org/Catalog_%26_Formular_vergibt_Mitglieder-Gruppenzuweisung</id>
		<title>Catalog &amp; Formular vergibt Mitglieder-Gruppenzuweisung</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Catalog_%26_Formular_vergibt_Mitglieder-Gruppenzuweisung"/>
				<updated>2012-07-20T08:55:23Z</updated>
		
		<summary type="html">&lt;p&gt;Izanagi: /* Funktion erstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Catalog]]&lt;br /&gt;
&lt;br /&gt;
== '''Mitgliedergruppen  Vergabe per Formular und Katalog''' ==&lt;br /&gt;
&lt;br /&gt;
{{Anmerkung|Die Mitgliedergruppen Funktion in Contao ist wirklich ein feine Sache. Wenn man sie noch flexibler gestalten könnte,&lt;br /&gt;
würden man noch mehr nette Features umsetzen können.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
''Ein neuer User bekommt die Gruppe &amp;quot;Neuling&amp;quot; und &amp;quot;Mitglied&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
Alle Neulinge sehen speziell für sie eingerichtete Werbeinfos/Funktion/Anmelde-infos.&amp;lt;br&amp;gt;&lt;br /&gt;
Zudem haben Neulinge nicht gleich vollen Zugang.&lt;br /&gt;
&lt;br /&gt;
Meldet er sich für einen Newsletter oder bewirbt sich über ein Formular, oder erstellen sein eigenes Karteprofil über den Katalog, so kann er die Gruppe &amp;quot;vip&amp;quot; erlangen und verliert den Status &amp;quot;neuling&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Dadurch verändert sich für ihn die Website und die Zugangsberechtigung.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein anderer User registriert sich als &amp;quot;Partner&amp;quot; und bekommt erweiterte Berechtigungen,&amp;lt;br&amp;gt;&lt;br /&gt;
soll aber auch seinen Account umwandeln können zu ein Normales Mitglied.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Käufer soll nach Teilnahme an einem Gewinnspiel besondere Produkte sehen können......''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um diese Vielfalt nutzen zu können gibt es hier ein kleines Script das über einen Hook gestartet wird.}}&lt;br /&gt;
&lt;br /&gt;
{{msgInfo|Bitte keine Experimente auf produktiven Plattformen. Immer brav im Sandkasten testen. Niemand übernimmt die Garantie für etwaige Schäden}}&lt;br /&gt;
{{msgInfo|Dieses Script wurde getestet mit Contao 2.11.2 ## efg 1.16.0 stable und catalog 2.0.0 beta2 61}}&lt;br /&gt;
&lt;br /&gt;
== Funktion erstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FORMULAR(GENERATOR) GRUPPENZUWEISUNG'''&lt;br /&gt;
&lt;br /&gt;
Für die Werteübermittlung wird ein verstecktes Feld angelegt mit Namen &amp;quot;'''dex'''&amp;quot; zum hinzufügen einer Gruppe&amp;lt;br&amp;gt;&lt;br /&gt;
und(oder) ein Feld  mit namen &amp;quot;'''kil'''&amp;quot; zum entfernen einer Gruppe.&amp;lt;br&amp;gt;&lt;br /&gt;
Dem versteckten Feld gibt ihr einen echten Wert und einen eigenen Sicherheitscode(Kontrollwert) ein.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Script überprüft anhand einer Formel ob der Sicherheitscode gleich dem echten Wert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Ausdruck sieht so aus &amp;quot;'''id*cz#####'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
In das Sternchen kommt die echte ID der Mitgliedergruppe und die Raute bekommt den Sicherheitscode.&amp;lt;br&amp;gt;&lt;br /&gt;
Den Code errechnet ihr euch selbst indem ihr die Formel benutzt:&amp;lt;br&amp;gt;&lt;br /&gt;
FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispiel für Gruppe ID 8:'''   8*15=120 +344=464 *23=10672&amp;lt;br&amp;gt;&lt;br /&gt;
Unser Wert für HIDDEN Feld ist also &amp;quot;'''id8cz10672'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei manipulationsversuche wird das Script also nicht ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
{{msgWarning|Die Formel MÜSST ihr natürlich noch ändern, sonst ist die Sicherheit für die Katz.}}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Würde ich ein Anmeldeformular nun um das HIDDEN Feld &amp;quot;'''dex'''&amp;quot; mit Wert &amp;quot;id8cz10672&amp;quot; erweitern,&amp;lt;br&amp;gt;&lt;br /&gt;
so wird der User nach abschicken des Formulars die Gruppenzuweisung mit id 8 bekommen.&amp;lt;br&amp;gt;&lt;br /&gt;
Gebe ich dem HIDDEN Feld &amp;quot;'''kil'''&amp;quot; den Wert &amp;quot;id8cz10672&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
so wird dem User nach abschicken die Gruppenzuweisung ID 8 entzogen&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CATALOG GRUPPENZUWEISUNG'''&lt;br /&gt;
&lt;br /&gt;
Hier ebenfalls ein HIDDEN Feld anlegen. Bis dato ist im Catalog keine vorhanden, daher folgendes:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter '''modules/catalog/templates/'''&amp;lt;br&amp;gt;&lt;br /&gt;
befindet sich das catalog_edit.xyz  Template das ihr modifiziert oder euch ''erstmal eine Kopie davon anlegt.''&amp;lt;br&amp;gt;&lt;br /&gt;
Im Template setzt ihr unter dem hidden REQUEST_TOKEN ein neues Hidden Feld&amp;lt;br&amp;gt;&lt;br /&gt;
'''&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; value=&amp;quot;id8cz10672&amp;quot; name=&amp;quot;dex&amp;quot;/&amp;gt;'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das neue Template dann auch im CatalogEdit Modul auswählen. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Jetzt zum Eigentlichen...'''&amp;lt;br&amp;gt;&lt;br /&gt;
unter '''modules/''' legt ihr einen neuen Ordner an zb. &amp;quot;'''eigenefunktionen'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Jetzt erstellt darin eine &amp;quot;'''Extrafunktionen.php'''&amp;quot; mit folgedem Inhalt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if (!defined('TL_ROOT')) die('You can not access this file directly!');&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TYPOlight webCMS&lt;br /&gt;
 *&lt;br /&gt;
 * The TYPOlight webCMS is an accessible web content management system that&lt;br /&gt;
 * specializes in accessibility and generates W3C-compliant HTML code. It&lt;br /&gt;
 * provides a wide range of functionality to develop professional websites&lt;br /&gt;
 * including a built-in search engine, form generator, file and user manager,&lt;br /&gt;
 * CSS engine, multi-language support and many more. For more information and&lt;br /&gt;
 * additional TYPOlight applications like the TYPOlight MVC Framework please&lt;br /&gt;
 * visit the project website http://www.typolight.org.&lt;br /&gt;
 *&lt;br /&gt;
 * This is not a complete extension. Its only a little Script for group assignment over form submitted and catalog edited&lt;br /&gt;
 * Script powered by www.mediadistrict.de &lt;br /&gt;
 * PHP version 5&lt;br /&gt;
 * @copyright  MediaDistrict e.K.&lt;br /&gt;
 * @author     Marco Groß&lt;br /&gt;
 * @package    &lt;br /&gt;
 * @license    free for all :) &lt;br /&gt;
 * @filesource this file only&lt;br /&gt;
 */ &lt;br /&gt;
class Extrafunktionen extends Frontend&lt;br /&gt;
{&lt;br /&gt;
	public function gruppenzuweisung($arrPost, $arrForm, $arrFiles){&lt;br /&gt;
&lt;br /&gt;
		/////////////////////////////////////////// Automatische Gruppenzuweisung BEGINN	&lt;br /&gt;
		$this-&amp;gt;import('FrontendUser','user');&lt;br /&gt;
		$user_id = $this-&amp;gt;user-&amp;gt;id;  &lt;br /&gt;
		$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
		$ok = 0;$okkill = 0;&lt;br /&gt;
		$addgroup_id = array();$killgroup_id = array();&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd8602   = ID 2 ok&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd7489   = ID 2 fail&lt;br /&gt;
		// FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&lt;br /&gt;
		// FORMEL zum auto decodieren ((x / 23) - 344) / 15;&lt;br /&gt;
		&lt;br /&gt;
		if ($arrPost[&amp;quot;dex&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $arrPost[&amp;quot;dex&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						} &lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$ok = 1;&lt;br /&gt;
						$addgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					} &lt;br /&gt;
				}&lt;br /&gt;
				//print_r($codenumber[$next]);&lt;br /&gt;
				&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($arrPost[&amp;quot;kil&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $arrPost[&amp;quot;kil&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$okkill = 1;&lt;br /&gt;
						$killgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		$memberGroups = $this-&amp;gt;Member-&amp;gt;groups;&lt;br /&gt;
		for ($addit = 0; $addit &amp;lt;= count($addgroup_id)-1; $addit++){//neuen Index&lt;br /&gt;
				// ---------------- neuer Gruppe zuweisen ---------------------------------&lt;br /&gt;
				 if ($ok == 1 &amp;amp;&amp;amp; !in_array($addgroup_id[$addit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn nicht schon vorhanden&lt;br /&gt;
				  $memberGroups[] = $addgroup_id[$addit];//array push&lt;br /&gt;
&lt;br /&gt;
				 }&lt;br /&gt;
		}&lt;br /&gt;
		for ($killit = 0; $killit &amp;lt;= count($killgroup_id)-1; $killit++){//neuen Index&lt;br /&gt;
				// ---------------- Gruppe entfernen ---------------------------------&lt;br /&gt;
				$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
				if ($okkill == 1 &amp;amp;&amp;amp; in_array($killgroup_id[$killit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn vorhanden&lt;br /&gt;
					$key = array_search($killgroup_id[$killit], $memberGroups);// gesuchte Element killen&lt;br /&gt;
					unset($memberGroups[$key]);// Entfernt das gekillte Arrayelement um Index neu aufzubauen&lt;br /&gt;
					$memberGroups = array_values($memberGroups);// Array mit fortlaufendem Index erzeugen um Lücken zu entfernen&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($ok == 1 || $okkill == 1){// Tabelle beschreiben&lt;br /&gt;
		    $group_ids = serialize($memberGroups); &lt;br /&gt;
		    $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_member SET groups = ? WHERE id = ?&amp;quot;)-&amp;gt;execute($group_ids, $user_id); &lt;br /&gt;
		}&lt;br /&gt;
		///////////////////////////////////////// Automatische Gruppenzuweisung ENDE&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
	public function gruppenzuweisungcat(){&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
				/////////////////////////////////////////// Automatische Gruppenzuweisung BEGINN	&lt;br /&gt;
		$this-&amp;gt;import('FrontendUser','user');&lt;br /&gt;
		$user_id = $this-&amp;gt;user-&amp;gt;id;  &lt;br /&gt;
		$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
		$ok = 0;$okkill = 0;&lt;br /&gt;
		$addgroup_id = array();$killgroup_id = array();&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd8602   = ID 2 ok&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd7489   = ID 2 fail&lt;br /&gt;
		// FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&lt;br /&gt;
		// FORMEL zum auto decodieren ((x / 23) - 344) / 15;&lt;br /&gt;
		&lt;br /&gt;
		if ($_REQUEST[&amp;quot;dex&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $_REQUEST[&amp;quot;dex&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						} &lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$ok = 1;&lt;br /&gt;
						$addgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					} &lt;br /&gt;
				}&lt;br /&gt;
				//print_r($codenumber[$next]);&lt;br /&gt;
				&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($_REQUEST[&amp;quot;kil&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $_REQUEST[&amp;quot;kil&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$okkill = 1;&lt;br /&gt;
						$killgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		$memberGroups = $this-&amp;gt;Member-&amp;gt;groups;&lt;br /&gt;
		for ($addit = 0; $addit &amp;lt;= count($addgroup_id)-1; $addit++){//neuen Index&lt;br /&gt;
				// ---------------- neuer Gruppe zuweisen ---------------------------------&lt;br /&gt;
				 if ($ok == 1 &amp;amp;&amp;amp; !in_array($addgroup_id[$addit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn nicht schon vorhanden&lt;br /&gt;
				  $memberGroups[] = $addgroup_id[$addit];//array push&lt;br /&gt;
&lt;br /&gt;
				 }&lt;br /&gt;
		}&lt;br /&gt;
		for ($killit = 0; $killit &amp;lt;= count($killgroup_id)-1; $killit++){//neuen Index&lt;br /&gt;
				// ---------------- Gruppe entfernen ---------------------------------&lt;br /&gt;
				$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
				if ($okkill == 1 &amp;amp;&amp;amp; in_array($killgroup_id[$killit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn vorhanden&lt;br /&gt;
					$key = array_search($killgroup_id[$killit], $memberGroups);// gesuchte Element killen&lt;br /&gt;
					unset($memberGroups[$key]);// Entfernt das gekillte Arrayelement um Index neu aufzubauen&lt;br /&gt;
					$memberGroups = array_values($memberGroups);// Array mit fortlaufendem Index erzeugen um Lücken zu entfernen&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($ok == 1 || $okkill == 1){// Tabelle beschreiben&lt;br /&gt;
		    $group_ids = serialize($memberGroups); &lt;br /&gt;
		    $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_member SET groups = ? WHERE id = ?&amp;quot;)-&amp;gt;execute($group_ids, $user_id); &lt;br /&gt;
		}&lt;br /&gt;
		///////////////////////////////////////// Automatische Gruppenzuweisung ENDE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Bei der eigenen Funktion darf es in der PHP kein Close Tag geben. Das &amp;quot;?&amp;gt;&amp;quot; darf hier am Ende nicht stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Kurz zur Erläuterung'''&amp;lt;br&amp;gt;&lt;br /&gt;
Die &amp;quot;gruppenzuweisung&amp;quot; Funktion ist für das abschicken von Formulardaten&amp;lt;br&amp;gt;&lt;br /&gt;
Die &amp;quot;gruppenzuweisungcat&amp;quot; Funktion ist eine seperate für das abschicken von Katalog(item)daten, da es von der &amp;lt;br&amp;gt;ContaoCore Routine nicht erfasst wird.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funktion starten ==&lt;br /&gt;
&lt;br /&gt;
Zum Schluß müssen wir nur noch festlegen wann und wo wir diese Funktion abfrufen möchten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ordner '''system/config/'''&amp;lt;br&amp;gt;&lt;br /&gt;
die Datei '''dcaconfig.php''' bearbeiten und folgendes einsetzen:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['processFormData'][] = array('Extrafunktionen', 'gruppenzuweisung');&lt;br /&gt;
//$GLOBALS['TL_HOOKS']['catalogFrontendUpdate'][] = array('Extrafunktionen', 'gruppenzuweisungcat');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['catalogFrontendInsert'][] = array('Extrafunktionen', 'gruppenzuweisungcat');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird unsere Funktion nach dem Abschicken eines Formulars ausgeführt und nachdem der User (im FE) &amp;lt;br&amp;gt;einen neuen KatalogItem erstellt hat. Je nach dem was man erreichen möchte setzt man es hier fest.&lt;/div&gt;</summary>
		<author><name>Izanagi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Catalog_%26_Formular_vergibt_Mitglieder-Gruppenzuweisung</id>
		<title>Catalog &amp; Formular vergibt Mitglieder-Gruppenzuweisung</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Catalog_%26_Formular_vergibt_Mitglieder-Gruppenzuweisung"/>
				<updated>2012-07-20T08:49:26Z</updated>
		
		<summary type="html">&lt;p&gt;Izanagi: /* Mitgliedergruppen  Vergabe per Formular und Katalog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Catalog]]&lt;br /&gt;
&lt;br /&gt;
== '''Mitgliedergruppen  Vergabe per Formular und Katalog''' ==&lt;br /&gt;
&lt;br /&gt;
{{Anmerkung|Die Mitgliedergruppen Funktion in Contao ist wirklich ein feine Sache. Wenn man sie noch flexibler gestalten könnte,&lt;br /&gt;
würden man noch mehr nette Features umsetzen können.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
''Ein neuer User bekommt die Gruppe &amp;quot;Neuling&amp;quot; und &amp;quot;Mitglied&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
Alle Neulinge sehen speziell für sie eingerichtete Werbeinfos/Funktion/Anmelde-infos.&amp;lt;br&amp;gt;&lt;br /&gt;
Zudem haben Neulinge nicht gleich vollen Zugang.&lt;br /&gt;
&lt;br /&gt;
Meldet er sich für einen Newsletter oder bewirbt sich über ein Formular, oder erstellen sein eigenes Karteprofil über den Katalog, so kann er die Gruppe &amp;quot;vip&amp;quot; erlangen und verliert den Status &amp;quot;neuling&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Dadurch verändert sich für ihn die Website und die Zugangsberechtigung.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein anderer User registriert sich als &amp;quot;Partner&amp;quot; und bekommt erweiterte Berechtigungen,&amp;lt;br&amp;gt;&lt;br /&gt;
soll aber auch seinen Account umwandeln können zu ein Normales Mitglied.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Käufer soll nach Teilnahme an einem Gewinnspiel besondere Produkte sehen können......''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um diese Vielfalt nutzen zu können gibt es hier ein kleines Script das über einen Hook gestartet wird.}}&lt;br /&gt;
&lt;br /&gt;
{{msgInfo|Bitte keine Experimente auf produktiven Plattformen. Immer brav im Sandkasten testen. Niemand übernimmt die Garantie für etwaige Schäden}}&lt;br /&gt;
{{msgInfo|Dieses Script wurde getestet mit Contao 2.11.2 ## efg 1.16.0 stable und catalog 2.0.0 beta2 61}}&lt;br /&gt;
&lt;br /&gt;
== Funktion erstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FORMULAR(GENERATOR) GRUPPENZUWEISUNG'''&lt;br /&gt;
&lt;br /&gt;
Für die Werteübermittlung wird ein verstecktes Feld angelegt mit Namen &amp;quot;'''dex'''&amp;quot; zum hinzufügen einer Gruppe&amp;lt;br&amp;gt;&lt;br /&gt;
und(oder) ein Feld  mit namen &amp;quot;'''kil'''&amp;quot; zum entfernen einer Gruppe.&amp;lt;br&amp;gt;&lt;br /&gt;
Dem versteckten Feld gibt ihr einen echten Wert und einen eigenen Sicherheitscode(Kontrollwert) ein.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Script überprüft anhand einer Formel ob der Sicherheitscode gleich dem echten Wert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Ausdruck sieht so aus &amp;quot;'''id*cz#####'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
In das Sternchen kommt die echte ID der Mitgliedergruppe und die Raute bekommt den Sicherheitscode.&amp;lt;br&amp;gt;&lt;br /&gt;
Den Code errechnet ihr euch selbst indem ihr die Formel benutzt:&amp;lt;br&amp;gt;&lt;br /&gt;
FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispiel für Gruppe ID 8:'''   8*15=120 +344=464 *23=10672&amp;lt;br&amp;gt;&lt;br /&gt;
Unser Wert für HIDDEN Feld ist also &amp;quot;'''id8cz10672'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei manipulationsversuche wird das Script also nicht ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
{{msgWarning|Die Formel MÜSST ihr natürlich noch ändern, sonst ist die Sicherheit für die Katz.}}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Würde ich ein Anmeldeformular nun um das HIDDEN Feld &amp;quot;'''dex'''&amp;quot; mit Wert &amp;quot;id8cz10672&amp;quot; erweitern,&amp;lt;br&amp;gt;&lt;br /&gt;
so wird der User nach abschicken die Gruppenzuweisung mit id 8 bekommen.&amp;lt;br&amp;gt;&lt;br /&gt;
Gebe ich dem HIDDEN Feld &amp;quot;'''kil'''&amp;quot; den Wert &amp;quot;id8cz10672&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
so wird dem User nach abschicken die Gruppenzuweisung ID 8 entzogen&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CATALOG GRUPPENZUWEISUNG'''&lt;br /&gt;
&lt;br /&gt;
Hier ebenfalls ein HIDDEN Feld anlegen. Bis dato ist im Catalog keine vorhanden, daher folgendes:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter '''modules/catalog/templates/'''&amp;lt;br&amp;gt;&lt;br /&gt;
befindet sich das catalog_edit.xyz  Template das ihr modifiziert oder euch ''erstmal eine Kopie davon anlegt.''&amp;lt;br&amp;gt;&lt;br /&gt;
Im Template setzt ihr unter dem hidden REQUEST_TOKEN ein neues Hidden Feld&amp;lt;br&amp;gt;&lt;br /&gt;
'''&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; value=&amp;quot;52791&amp;quot; name=&amp;quot;dex&amp;quot;/&amp;gt;'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das neue Template dann auch im CatalogEdit Modul auswählen. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Jetzt zum Eigentlichen...'''&amp;lt;br&amp;gt;&lt;br /&gt;
unter '''modules/''' legt ihr einen neuen Ordner an zb. &amp;quot;'''eigenefunktionen'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Jetzt erstellt darin eine &amp;quot;'''Extrafunktionen.php'''&amp;quot; mit folgedem Inhalt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if (!defined('TL_ROOT')) die('You can not access this file directly!');&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TYPOlight webCMS&lt;br /&gt;
 *&lt;br /&gt;
 * The TYPOlight webCMS is an accessible web content management system that&lt;br /&gt;
 * specializes in accessibility and generates W3C-compliant HTML code. It&lt;br /&gt;
 * provides a wide range of functionality to develop professional websites&lt;br /&gt;
 * including a built-in search engine, form generator, file and user manager,&lt;br /&gt;
 * CSS engine, multi-language support and many more. For more information and&lt;br /&gt;
 * additional TYPOlight applications like the TYPOlight MVC Framework please&lt;br /&gt;
 * visit the project website http://www.typolight.org.&lt;br /&gt;
 *&lt;br /&gt;
 * This is not a complete extension. Its only a little Script for group assignment over form submitted and catalog edited&lt;br /&gt;
 * Script powered by www.mediadistrict.de &lt;br /&gt;
 * PHP version 5&lt;br /&gt;
 * @copyright  MediaDistrict e.K.&lt;br /&gt;
 * @author     Marco Groß&lt;br /&gt;
 * @package    &lt;br /&gt;
 * @license    free for all :) &lt;br /&gt;
 * @filesource this file only&lt;br /&gt;
 */ &lt;br /&gt;
class Extrafunktionen extends Frontend&lt;br /&gt;
{&lt;br /&gt;
	public function gruppenzuweisung($arrPost, $arrForm, $arrFiles){&lt;br /&gt;
&lt;br /&gt;
		/////////////////////////////////////////// Automatische Gruppenzuweisung BEGINN	&lt;br /&gt;
		$this-&amp;gt;import('FrontendUser','user');&lt;br /&gt;
		$user_id = $this-&amp;gt;user-&amp;gt;id;  &lt;br /&gt;
		$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
		$ok = 0;$okkill = 0;&lt;br /&gt;
		$addgroup_id = array();$killgroup_id = array();&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd8602   = ID 2 ok&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd7489   = ID 2 fail&lt;br /&gt;
		// FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&lt;br /&gt;
		// FORMEL zum auto decodieren ((x / 23) - 344) / 15;&lt;br /&gt;
		&lt;br /&gt;
		if ($arrPost[&amp;quot;dex&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $arrPost[&amp;quot;dex&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						} &lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$ok = 1;&lt;br /&gt;
						$addgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					} &lt;br /&gt;
				}&lt;br /&gt;
				//print_r($codenumber[$next]);&lt;br /&gt;
				&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($arrPost[&amp;quot;kil&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $arrPost[&amp;quot;kil&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$okkill = 1;&lt;br /&gt;
						$killgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		$memberGroups = $this-&amp;gt;Member-&amp;gt;groups;&lt;br /&gt;
		for ($addit = 0; $addit &amp;lt;= count($addgroup_id)-1; $addit++){//neuen Index&lt;br /&gt;
				// ---------------- neuer Gruppe zuweisen ---------------------------------&lt;br /&gt;
				 if ($ok == 1 &amp;amp;&amp;amp; !in_array($addgroup_id[$addit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn nicht schon vorhanden&lt;br /&gt;
				  $memberGroups[] = $addgroup_id[$addit];//array push&lt;br /&gt;
&lt;br /&gt;
				 }&lt;br /&gt;
		}&lt;br /&gt;
		for ($killit = 0; $killit &amp;lt;= count($killgroup_id)-1; $killit++){//neuen Index&lt;br /&gt;
				// ---------------- Gruppe entfernen ---------------------------------&lt;br /&gt;
				$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
				if ($okkill == 1 &amp;amp;&amp;amp; in_array($killgroup_id[$killit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn vorhanden&lt;br /&gt;
					$key = array_search($killgroup_id[$killit], $memberGroups);// gesuchte Element killen&lt;br /&gt;
					unset($memberGroups[$key]);// Entfernt das gekillte Arrayelement um Index neu aufzubauen&lt;br /&gt;
					$memberGroups = array_values($memberGroups);// Array mit fortlaufendem Index erzeugen um Lücken zu entfernen&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($ok == 1 || $okkill == 1){// Tabelle beschreiben&lt;br /&gt;
		    $group_ids = serialize($memberGroups); &lt;br /&gt;
		    $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_member SET groups = ? WHERE id = ?&amp;quot;)-&amp;gt;execute($group_ids, $user_id); &lt;br /&gt;
		}&lt;br /&gt;
		///////////////////////////////////////// Automatische Gruppenzuweisung ENDE&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
	public function gruppenzuweisungcat(){&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
				/////////////////////////////////////////// Automatische Gruppenzuweisung BEGINN	&lt;br /&gt;
		$this-&amp;gt;import('FrontendUser','user');&lt;br /&gt;
		$user_id = $this-&amp;gt;user-&amp;gt;id;  &lt;br /&gt;
		$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
		$ok = 0;$okkill = 0;&lt;br /&gt;
		$addgroup_id = array();$killgroup_id = array();&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd8602   = ID 2 ok&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd7489   = ID 2 fail&lt;br /&gt;
		// FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&lt;br /&gt;
		// FORMEL zum auto decodieren ((x / 23) - 344) / 15;&lt;br /&gt;
		&lt;br /&gt;
		if ($_REQUEST[&amp;quot;dex&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $_REQUEST[&amp;quot;dex&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						} &lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$ok = 1;&lt;br /&gt;
						$addgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					} &lt;br /&gt;
				}&lt;br /&gt;
				//print_r($codenumber[$next]);&lt;br /&gt;
				&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($_REQUEST[&amp;quot;kil&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $_REQUEST[&amp;quot;kil&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$okkill = 1;&lt;br /&gt;
						$killgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		$memberGroups = $this-&amp;gt;Member-&amp;gt;groups;&lt;br /&gt;
		for ($addit = 0; $addit &amp;lt;= count($addgroup_id)-1; $addit++){//neuen Index&lt;br /&gt;
				// ---------------- neuer Gruppe zuweisen ---------------------------------&lt;br /&gt;
				 if ($ok == 1 &amp;amp;&amp;amp; !in_array($addgroup_id[$addit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn nicht schon vorhanden&lt;br /&gt;
				  $memberGroups[] = $addgroup_id[$addit];//array push&lt;br /&gt;
&lt;br /&gt;
				 }&lt;br /&gt;
		}&lt;br /&gt;
		for ($killit = 0; $killit &amp;lt;= count($killgroup_id)-1; $killit++){//neuen Index&lt;br /&gt;
				// ---------------- Gruppe entfernen ---------------------------------&lt;br /&gt;
				$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
				if ($okkill == 1 &amp;amp;&amp;amp; in_array($killgroup_id[$killit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn vorhanden&lt;br /&gt;
					$key = array_search($killgroup_id[$killit], $memberGroups);// gesuchte Element killen&lt;br /&gt;
					unset($memberGroups[$key]);// Entfernt das gekillte Arrayelement um Index neu aufzubauen&lt;br /&gt;
					$memberGroups = array_values($memberGroups);// Array mit fortlaufendem Index erzeugen um Lücken zu entfernen&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($ok == 1 || $okkill == 1){// Tabelle beschreiben&lt;br /&gt;
		    $group_ids = serialize($memberGroups); &lt;br /&gt;
		    $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_member SET groups = ? WHERE id = ?&amp;quot;)-&amp;gt;execute($group_ids, $user_id); &lt;br /&gt;
		}&lt;br /&gt;
		///////////////////////////////////////// Automatische Gruppenzuweisung ENDE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Bei der eigenen Funktion darf es in der PHP kein Close Tag geben. Das &amp;quot;?&amp;gt;&amp;quot; darf hier am Ende nicht stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Kurz zur Erläuterung'''&amp;lt;br&amp;gt;&lt;br /&gt;
Die &amp;quot;gruppenzuweisung&amp;quot; Funktion ist für das abschicken von Formulardaten&amp;lt;br&amp;gt;&lt;br /&gt;
Die &amp;quot;gruppenzuweisungcat&amp;quot; Funktion ist eine seperate für das abschicken von Katalog(item)daten, da es von der &amp;lt;br&amp;gt;ContaoCore Routine nicht erfasst wird.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funktion starten ==&lt;br /&gt;
&lt;br /&gt;
Zum Schluß müssen wir nur noch festlegen wann und wo wir diese Funktion abfrufen möchten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ordner '''system/config/'''&amp;lt;br&amp;gt;&lt;br /&gt;
die Datei '''dcaconfig.php''' bearbeiten und folgendes einsetzen:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['processFormData'][] = array('Extrafunktionen', 'gruppenzuweisung');&lt;br /&gt;
//$GLOBALS['TL_HOOKS']['catalogFrontendUpdate'][] = array('Extrafunktionen', 'gruppenzuweisungcat');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['catalogFrontendInsert'][] = array('Extrafunktionen', 'gruppenzuweisungcat');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird unsere Funktion nach dem Abschicken eines Formulars ausgeführt und nachdem der User (im FE) &amp;lt;br&amp;gt;einen neuen KatalogItem erstellt hat. Je nach dem was man erreichen möchte setzt man es hier fest.&lt;/div&gt;</summary>
		<author><name>Izanagi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Catalog_%26_Formular_vergibt_Mitglieder-Gruppenzuweisung</id>
		<title>Catalog &amp; Formular vergibt Mitglieder-Gruppenzuweisung</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Catalog_%26_Formular_vergibt_Mitglieder-Gruppenzuweisung"/>
				<updated>2012-07-19T11:25:15Z</updated>
		
		<summary type="html">&lt;p&gt;Izanagi: /* Mitgliedergruppen  Vergabe per Formular und Katalog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Catalog]]&lt;br /&gt;
&lt;br /&gt;
== '''Mitgliedergruppen  Vergabe per Formular und Katalog''' ==&lt;br /&gt;
&lt;br /&gt;
{{Anmerkung|Die Mitgliedergruppen Funktion in Contao ist wirklich ein feine Sache. Wenn man sie noch flexibler gestalten könnte,&lt;br /&gt;
würden man noch mehr nette Features umsetzen können.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
''Ein neuer User bekommt die Gruppe &amp;quot;Neuling&amp;quot; und &amp;quot;Mitglied&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
Alle Neulinge sehen speziell für sie eingerichtete Werbeinfos/Funktion/Anmelde-infos.&amp;lt;br&amp;gt;&lt;br /&gt;
Zudem haben Neulinge nicht gleich vollen Zugang.&lt;br /&gt;
&lt;br /&gt;
Meldet er sich für einen Newsletter oder bewirbt sich über ein Formular, oder erstellen sein eigenes Karteprofil über den Katalog, so kann er die Gruppe &amp;quot;vip&amp;quot; erlangen und verliert den Status &amp;quot;neuling&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Dadurch verändert sich für ihn die Website und die Zugangsberechtigung.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein anderer User registriert sich als &amp;quot;Partner&amp;quot; und bekommt erweiterte Berechtigungen,&amp;lt;br&amp;gt;&lt;br /&gt;
soll aber auch seinen Account umwandeln können zu ein Normales Mitglied.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Käufer soll nach Teilnahme an einem Gewinnspiel besondere Produkte sehen können......''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um diese Vielfalt nutzen zu können gibt es hier ein kleines Script das über einen Hook gestartet wird.}}&lt;br /&gt;
&lt;br /&gt;
{{msgInfo|Bitte keine Experimente auf produktiven Plattformen. Immer brav im Sandkasten testen. Niemand übernimmt die Garantie für etwaige Schäden}}&lt;br /&gt;
&lt;br /&gt;
== Funktion erstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FORMULAR(GENERATOR) GRUPPENZUWEISUNG'''&lt;br /&gt;
&lt;br /&gt;
Für die Werteübermittlung wird ein verstecktes Feld angelegt mit Namen &amp;quot;'''dex'''&amp;quot; zum hinzufügen einer Gruppe&amp;lt;br&amp;gt;&lt;br /&gt;
und(oder) ein Feld  mit namen &amp;quot;'''kil'''&amp;quot; zum entfernen einer Gruppe.&amp;lt;br&amp;gt;&lt;br /&gt;
Dem versteckten Feld gibt ihr einen echten Wert und einen eigenen Sicherheitscode(Kontrollwert) ein.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Script überprüft anhand einer Formel ob der Sicherheitscode gleich dem echten Wert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Ausdruck sieht so aus &amp;quot;'''id*cz#####'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
In das Sternchen kommt die echte ID der Mitgliedergruppe und die Raute bekommt den Sicherheitscode.&amp;lt;br&amp;gt;&lt;br /&gt;
Den Code errechnet ihr euch selbst indem ihr die Formel benutzt:&amp;lt;br&amp;gt;&lt;br /&gt;
FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispiel für Gruppe ID 8:'''   8*15=120 +344=464 *23=10672&amp;lt;br&amp;gt;&lt;br /&gt;
Unser Wert für HIDDEN Feld ist also &amp;quot;'''id8cz10672'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei manipulationsversuche wird das Script also nicht ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
{{msgWarning|Die Formel MÜSST ihr natürlich noch ändern, sonst ist die Sicherheit für die Katz.}}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Würde ich ein Anmeldeformular nun um das HIDDEN Feld &amp;quot;'''dex'''&amp;quot; mit Wert &amp;quot;id8cz10672&amp;quot; erweitern,&amp;lt;br&amp;gt;&lt;br /&gt;
so wird der User nach abschicken die Gruppenzuweisung mit id 8 bekommen.&amp;lt;br&amp;gt;&lt;br /&gt;
Gebe ich dem HIDDEN Feld &amp;quot;'''kil'''&amp;quot; den Wert &amp;quot;id8cz10672&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
so wird dem User nach abschicken die Gruppenzuweisung ID 8 entzogen&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CATALOG GRUPPENZUWEISUNG'''&lt;br /&gt;
&lt;br /&gt;
Hier ebenfalls ein HIDDEN Feld anlegen. Bis dato ist im Catalog keine vorhanden, daher folgendes:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter '''modules/catalog/templates/'''&amp;lt;br&amp;gt;&lt;br /&gt;
befindet sich das catalog_edit.xyz  Template das ihr modifiziert oder euch ''erstmal eine Kopie davon anlegt.''&amp;lt;br&amp;gt;&lt;br /&gt;
Im Template setzt ihr unter dem hidden REQUEST_TOKEN ein neues Hidden Feld&amp;lt;br&amp;gt;&lt;br /&gt;
'''&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; value=&amp;quot;52791&amp;quot; name=&amp;quot;dex&amp;quot;/&amp;gt;'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das neue Template dann auch im CatalogEdit Modul auswählen. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Jetzt zum Eigentlichen...'''&amp;lt;br&amp;gt;&lt;br /&gt;
unter '''modules/''' legt ihr einen neuen Ordner an zb. &amp;quot;'''eigenefunktionen'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Jetzt erstellt darin eine &amp;quot;'''Extrafunktionen.php'''&amp;quot; mit folgedem Inhalt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if (!defined('TL_ROOT')) die('You can not access this file directly!');&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TYPOlight webCMS&lt;br /&gt;
 *&lt;br /&gt;
 * The TYPOlight webCMS is an accessible web content management system that&lt;br /&gt;
 * specializes in accessibility and generates W3C-compliant HTML code. It&lt;br /&gt;
 * provides a wide range of functionality to develop professional websites&lt;br /&gt;
 * including a built-in search engine, form generator, file and user manager,&lt;br /&gt;
 * CSS engine, multi-language support and many more. For more information and&lt;br /&gt;
 * additional TYPOlight applications like the TYPOlight MVC Framework please&lt;br /&gt;
 * visit the project website http://www.typolight.org.&lt;br /&gt;
 *&lt;br /&gt;
 * This is not a complete extension. Its only a little Script for group assignment over form submitted and catalog edited&lt;br /&gt;
 * Script powered by www.mediadistrict.de &lt;br /&gt;
 * PHP version 5&lt;br /&gt;
 * @copyright  MediaDistrict e.K.&lt;br /&gt;
 * @author     Marco Groß&lt;br /&gt;
 * @package    &lt;br /&gt;
 * @license    free for all :) &lt;br /&gt;
 * @filesource this file only&lt;br /&gt;
 */ &lt;br /&gt;
class Extrafunktionen extends Frontend&lt;br /&gt;
{&lt;br /&gt;
	public function gruppenzuweisung($arrPost, $arrForm, $arrFiles){&lt;br /&gt;
&lt;br /&gt;
		/////////////////////////////////////////// Automatische Gruppenzuweisung BEGINN	&lt;br /&gt;
		$this-&amp;gt;import('FrontendUser','user');&lt;br /&gt;
		$user_id = $this-&amp;gt;user-&amp;gt;id;  &lt;br /&gt;
		$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
		$ok = 0;$okkill = 0;&lt;br /&gt;
		$addgroup_id = array();$killgroup_id = array();&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd8602   = ID 2 ok&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd7489   = ID 2 fail&lt;br /&gt;
		// FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&lt;br /&gt;
		// FORMEL zum auto decodieren ((x / 23) - 344) / 15;&lt;br /&gt;
		&lt;br /&gt;
		if ($arrPost[&amp;quot;dex&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $arrPost[&amp;quot;dex&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						} &lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$ok = 1;&lt;br /&gt;
						$addgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					} &lt;br /&gt;
				}&lt;br /&gt;
				//print_r($codenumber[$next]);&lt;br /&gt;
				&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($arrPost[&amp;quot;kil&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $arrPost[&amp;quot;kil&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$okkill = 1;&lt;br /&gt;
						$killgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		$memberGroups = $this-&amp;gt;Member-&amp;gt;groups;&lt;br /&gt;
		for ($addit = 0; $addit &amp;lt;= count($addgroup_id)-1; $addit++){//neuen Index&lt;br /&gt;
				// ---------------- neuer Gruppe zuweisen ---------------------------------&lt;br /&gt;
				 if ($ok == 1 &amp;amp;&amp;amp; !in_array($addgroup_id[$addit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn nicht schon vorhanden&lt;br /&gt;
				  $memberGroups[] = $addgroup_id[$addit];//array push&lt;br /&gt;
&lt;br /&gt;
				 }&lt;br /&gt;
		}&lt;br /&gt;
		for ($killit = 0; $killit &amp;lt;= count($killgroup_id)-1; $killit++){//neuen Index&lt;br /&gt;
				// ---------------- Gruppe entfernen ---------------------------------&lt;br /&gt;
				$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
				if ($okkill == 1 &amp;amp;&amp;amp; in_array($killgroup_id[$killit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn vorhanden&lt;br /&gt;
					$key = array_search($killgroup_id[$killit], $memberGroups);// gesuchte Element killen&lt;br /&gt;
					unset($memberGroups[$key]);// Entfernt das gekillte Arrayelement um Index neu aufzubauen&lt;br /&gt;
					$memberGroups = array_values($memberGroups);// Array mit fortlaufendem Index erzeugen um Lücken zu entfernen&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($ok == 1 || $okkill == 1){// Tabelle beschreiben&lt;br /&gt;
		    $group_ids = serialize($memberGroups); &lt;br /&gt;
		    $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_member SET groups = ? WHERE id = ?&amp;quot;)-&amp;gt;execute($group_ids, $user_id); &lt;br /&gt;
		}&lt;br /&gt;
		///////////////////////////////////////// Automatische Gruppenzuweisung ENDE&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
	public function gruppenzuweisungcat(){&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
				/////////////////////////////////////////// Automatische Gruppenzuweisung BEGINN	&lt;br /&gt;
		$this-&amp;gt;import('FrontendUser','user');&lt;br /&gt;
		$user_id = $this-&amp;gt;user-&amp;gt;id;  &lt;br /&gt;
		$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
		$ok = 0;$okkill = 0;&lt;br /&gt;
		$addgroup_id = array();$killgroup_id = array();&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd8602   = ID 2 ok&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd7489   = ID 2 fail&lt;br /&gt;
		// FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&lt;br /&gt;
		// FORMEL zum auto decodieren ((x / 23) - 344) / 15;&lt;br /&gt;
		&lt;br /&gt;
		if ($_REQUEST[&amp;quot;dex&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $_REQUEST[&amp;quot;dex&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						} &lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$ok = 1;&lt;br /&gt;
						$addgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					} &lt;br /&gt;
				}&lt;br /&gt;
				//print_r($codenumber[$next]);&lt;br /&gt;
				&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($_REQUEST[&amp;quot;kil&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $_REQUEST[&amp;quot;kil&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$okkill = 1;&lt;br /&gt;
						$killgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		$memberGroups = $this-&amp;gt;Member-&amp;gt;groups;&lt;br /&gt;
		for ($addit = 0; $addit &amp;lt;= count($addgroup_id)-1; $addit++){//neuen Index&lt;br /&gt;
				// ---------------- neuer Gruppe zuweisen ---------------------------------&lt;br /&gt;
				 if ($ok == 1 &amp;amp;&amp;amp; !in_array($addgroup_id[$addit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn nicht schon vorhanden&lt;br /&gt;
				  $memberGroups[] = $addgroup_id[$addit];//array push&lt;br /&gt;
&lt;br /&gt;
				 }&lt;br /&gt;
		}&lt;br /&gt;
		for ($killit = 0; $killit &amp;lt;= count($killgroup_id)-1; $killit++){//neuen Index&lt;br /&gt;
				// ---------------- Gruppe entfernen ---------------------------------&lt;br /&gt;
				$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
				if ($okkill == 1 &amp;amp;&amp;amp; in_array($killgroup_id[$killit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn vorhanden&lt;br /&gt;
					$key = array_search($killgroup_id[$killit], $memberGroups);// gesuchte Element killen&lt;br /&gt;
					unset($memberGroups[$key]);// Entfernt das gekillte Arrayelement um Index neu aufzubauen&lt;br /&gt;
					$memberGroups = array_values($memberGroups);// Array mit fortlaufendem Index erzeugen um Lücken zu entfernen&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($ok == 1 || $okkill == 1){// Tabelle beschreiben&lt;br /&gt;
		    $group_ids = serialize($memberGroups); &lt;br /&gt;
		    $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_member SET groups = ? WHERE id = ?&amp;quot;)-&amp;gt;execute($group_ids, $user_id); &lt;br /&gt;
		}&lt;br /&gt;
		///////////////////////////////////////// Automatische Gruppenzuweisung ENDE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Bei der eigenen Funktion darf es in der PHP kein Close Tag geben. Das &amp;quot;?&amp;gt;&amp;quot; darf hier am Ende nicht stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Kurz zur Erläuterung'''&amp;lt;br&amp;gt;&lt;br /&gt;
Die &amp;quot;gruppenzuweisung&amp;quot; Funktion ist für das abschicken von Formulardaten&amp;lt;br&amp;gt;&lt;br /&gt;
Die &amp;quot;gruppenzuweisungcat&amp;quot; Funktion ist eine seperate für das abschicken von Katalog(item)daten, da es von der &amp;lt;br&amp;gt;ContaoCore Routine nicht erfasst wird.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funktion starten ==&lt;br /&gt;
&lt;br /&gt;
Zum Schluß müssen wir nur noch festlegen wann und wo wir diese Funktion abfrufen möchten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ordner '''system/config/'''&amp;lt;br&amp;gt;&lt;br /&gt;
die Datei '''dcaconfig.php''' bearbeiten und folgendes einsetzen:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['processFormData'][] = array('Extrafunktionen', 'gruppenzuweisung');&lt;br /&gt;
//$GLOBALS['TL_HOOKS']['catalogFrontendUpdate'][] = array('Extrafunktionen', 'gruppenzuweisungcat');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['catalogFrontendInsert'][] = array('Extrafunktionen', 'gruppenzuweisungcat');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird unsere Funktion nach dem Abschicken eines Formulars ausgeführt und nachdem der User (im FE) &amp;lt;br&amp;gt;einen neuen KatalogItem erstellt hat. Je nach dem was man erreichen möchte setzt man es hier fest.&lt;/div&gt;</summary>
		<author><name>Izanagi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Catalog_%26_Formular_vergibt_Mitglieder-Gruppenzuweisung</id>
		<title>Catalog &amp; Formular vergibt Mitglieder-Gruppenzuweisung</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Catalog_%26_Formular_vergibt_Mitglieder-Gruppenzuweisung"/>
				<updated>2012-07-18T15:16:27Z</updated>
		
		<summary type="html">&lt;p&gt;Izanagi: Die Seite wurde neu angelegt: „== '''Mitgliedergruppen  Vergabe per Formular und Katalog''' ==  {{Anmerkung|Die Mitgliedergruppen Funktion in Contao ist wirklich ein feine Sache. Wenn man sie n…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Mitgliedergruppen  Vergabe per Formular und Katalog''' ==&lt;br /&gt;
&lt;br /&gt;
{{Anmerkung|Die Mitgliedergruppen Funktion in Contao ist wirklich ein feine Sache. Wenn man sie noch flexibler gestalten könnte,&lt;br /&gt;
würden man noch mehr nette Features umsetzen können.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
''Ein neuer User bekommt die Gruppe &amp;quot;Neuling&amp;quot; und &amp;quot;Mitglied&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
Alle Neulinge sehen speziell für sie eingerichtete Werbeinfos/Funktion/Anmelde-infos.&amp;lt;br&amp;gt;&lt;br /&gt;
Zudem haben Neulinge nicht gleich vollen Zugang.&lt;br /&gt;
&lt;br /&gt;
Meldet er sich für einen Newsletter oder bewirbt sich über ein Formular, oder erstellen sein eigenes Karteprofil über den Katalog, so kann er die Gruppe &amp;quot;vip&amp;quot; erlangen und verliert den Status &amp;quot;neuling&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
Dadurch verändert sich für ihn die Website und die Zugangsberechtigung.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein anderer User registriert sich als &amp;quot;Partner&amp;quot; und bekommt erweiterte Berechtigungen,&amp;lt;br&amp;gt;&lt;br /&gt;
soll aber auch seinen Account umwandeln können zu ein Normales Mitglied.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Käufer soll nach Teilnahme an einem Gewinnspiel besondere Produkte sehen können......''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Um diese Vielfalt nutzen zu können gibt es hier ein kleines Script das über einen Hook gestartet wird.}}&lt;br /&gt;
&lt;br /&gt;
{{msgInfo|Bitte keine Experimente auf produktiven Plattformen. Immer brav im Sandkasten testen. Niemand übernimmt die Garantie für etwaige Schäden}}&lt;br /&gt;
&lt;br /&gt;
== Funktion erstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''FORMULAR(GENERATOR) GRUPPENZUWEISUNG'''&lt;br /&gt;
&lt;br /&gt;
Für die Werteübermittlung wird ein verstecktes Feld angelegt mit Namen &amp;quot;'''dex'''&amp;quot; zum hinzufügen einer Gruppe&amp;lt;br&amp;gt;&lt;br /&gt;
und(oder) ein Feld  mit namen &amp;quot;'''kil'''&amp;quot; zum entfernen einer Gruppe.&amp;lt;br&amp;gt;&lt;br /&gt;
Dem versteckten Feld gibt ihr einen echten Wert und einen eigenen Sicherheitscode(Kontrollwert) ein.&amp;lt;br&amp;gt;&lt;br /&gt;
Das Script überprüft anhand einer Formel ob der Sicherheitscode gleich dem echten Wert ist.&amp;lt;br&amp;gt;&lt;br /&gt;
Der Ausdruck sieht so aus &amp;quot;'''id*cz#####'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
In das Sternchen kommt die echte ID der Mitgliedergruppe und die Raute bekommt den Sicherheitscode.&amp;lt;br&amp;gt;&lt;br /&gt;
Den Code errechnet ihr euch selbst indem ihr die Formel benutzt:&amp;lt;br&amp;gt;&lt;br /&gt;
FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Beispiel für Gruppe ID 8:'''   8*15=120 +344=464 *23=10672&amp;lt;br&amp;gt;&lt;br /&gt;
Unser Wert für HIDDEN Feld ist also &amp;quot;'''id8cz10672'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Bei manipulationsversuche wird das Script also nicht ausgeführt.&amp;lt;br&amp;gt;&lt;br /&gt;
{{msgWarning|Die Formel MÜSST ihr natürlich noch ändern, sonst ist die Sicherheit für die Katz.}}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Würde ich ein Anmeldeformular nun um das HIDDEN Feld &amp;quot;'''dex'''&amp;quot; mit Wert &amp;quot;id8cz10672&amp;quot; erweitern,&amp;lt;br&amp;gt;&lt;br /&gt;
so wird der User nach abschicken die Gruppenzuweisung mit id 8 bekommen.&amp;lt;br&amp;gt;&lt;br /&gt;
Gebe ich dem HIDDEN Feld &amp;quot;'''kil'''&amp;quot; den Wert &amp;quot;id8cz10672&amp;quot; &amp;lt;br&amp;gt;&lt;br /&gt;
so wird dem User nach abschicken die Gruppenzuweisung ID 8 entzogen&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''CATALOG GRUPPENZUWEISUNG'''&lt;br /&gt;
&lt;br /&gt;
Hier ebenfalls ein HIDDEN Feld anlegen. Bis dato ist im Catalog keine vorhanden, daher folgendes:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unter '''modules/catalog/templates/'''&amp;lt;br&amp;gt;&lt;br /&gt;
befindet sich das catalog_edit.xyz  Template das ihr modifiziert oder euch ''erstmal eine Kopie davon anlegt.''&amp;lt;br&amp;gt;&lt;br /&gt;
Im Template setzt ihr unter dem hidden REQUEST_TOKEN ein neues Hidden Feld&amp;lt;br&amp;gt;&lt;br /&gt;
'''&lt;br /&gt;
&amp;lt;input type=&amp;quot;hidden&amp;quot; value=&amp;quot;52791&amp;quot; name=&amp;quot;dex&amp;quot;/&amp;gt;'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das neue Template dann auch im CatalogEdit Modul auswählen. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Jetzt zum Eigentlichen...'''&amp;lt;br&amp;gt;&lt;br /&gt;
unter '''modules/''' legt ihr einen neuen Ordner an zb. &amp;quot;'''eigenefunktionen'''&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
Jetzt erstellt darin eine &amp;quot;'''Extrafunktionen.php'''&amp;quot; mit folgedem Inhalt&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php if (!defined('TL_ROOT')) die('You can not access this file directly!');&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TYPOlight webCMS&lt;br /&gt;
 *&lt;br /&gt;
 * The TYPOlight webCMS is an accessible web content management system that&lt;br /&gt;
 * specializes in accessibility and generates W3C-compliant HTML code. It&lt;br /&gt;
 * provides a wide range of functionality to develop professional websites&lt;br /&gt;
 * including a built-in search engine, form generator, file and user manager,&lt;br /&gt;
 * CSS engine, multi-language support and many more. For more information and&lt;br /&gt;
 * additional TYPOlight applications like the TYPOlight MVC Framework please&lt;br /&gt;
 * visit the project website http://www.typolight.org.&lt;br /&gt;
 *&lt;br /&gt;
 * This is not a complete extension. Its only a little Script for group assignment over form submitted and catalog edited&lt;br /&gt;
 * Script powered by www.mediadistrict.de &lt;br /&gt;
 * PHP version 5&lt;br /&gt;
 * @copyright  MediaDistrict e.K.&lt;br /&gt;
 * @author     Marco Groß&lt;br /&gt;
 * @package    &lt;br /&gt;
 * @license    free for all :) &lt;br /&gt;
 * @filesource this file only&lt;br /&gt;
 */ &lt;br /&gt;
class Extrafunktionen extends Frontend&lt;br /&gt;
{&lt;br /&gt;
	public function gruppenzuweisung($arrPost, $arrForm, $arrFiles){&lt;br /&gt;
&lt;br /&gt;
		/////////////////////////////////////////// Automatische Gruppenzuweisung BEGINN	&lt;br /&gt;
		$this-&amp;gt;import('FrontendUser','user');&lt;br /&gt;
		$user_id = $this-&amp;gt;user-&amp;gt;id;  &lt;br /&gt;
		$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
		$ok = 0;$okkill = 0;&lt;br /&gt;
		$addgroup_id = array();$killgroup_id = array();&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd8602   = ID 2 ok&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd7489   = ID 2 fail&lt;br /&gt;
		// FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&lt;br /&gt;
		// FORMEL zum auto decodieren ((x / 23) - 344) / 15;&lt;br /&gt;
		&lt;br /&gt;
		if ($arrPost[&amp;quot;dex&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $arrPost[&amp;quot;dex&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						} &lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$ok = 1;&lt;br /&gt;
						$addgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					} &lt;br /&gt;
				}&lt;br /&gt;
				//print_r($codenumber[$next]);&lt;br /&gt;
				&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($arrPost[&amp;quot;kil&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $arrPost[&amp;quot;kil&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$okkill = 1;&lt;br /&gt;
						$killgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		$memberGroups = $this-&amp;gt;Member-&amp;gt;groups;&lt;br /&gt;
		for ($addit = 0; $addit &amp;lt;= count($addgroup_id)-1; $addit++){//neuen Index&lt;br /&gt;
				// ---------------- neuer Gruppe zuweisen ---------------------------------&lt;br /&gt;
				 if ($ok == 1 &amp;amp;&amp;amp; !in_array($addgroup_id[$addit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn nicht schon vorhanden&lt;br /&gt;
				  $memberGroups[] = $addgroup_id[$addit];//array push&lt;br /&gt;
&lt;br /&gt;
				 }&lt;br /&gt;
		}&lt;br /&gt;
		for ($killit = 0; $killit &amp;lt;= count($killgroup_id)-1; $killit++){//neuen Index&lt;br /&gt;
				// ---------------- Gruppe entfernen ---------------------------------&lt;br /&gt;
				$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
				if ($okkill == 1 &amp;amp;&amp;amp; in_array($killgroup_id[$killit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn vorhanden&lt;br /&gt;
					$key = array_search($killgroup_id[$killit], $memberGroups);// gesuchte Element killen&lt;br /&gt;
					unset($memberGroups[$key]);// Entfernt das gekillte Arrayelement um Index neu aufzubauen&lt;br /&gt;
					$memberGroups = array_values($memberGroups);// Array mit fortlaufendem Index erzeugen um Lücken zu entfernen&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($ok == 1 || $okkill == 1){// Tabelle beschreiben&lt;br /&gt;
		    $group_ids = serialize($memberGroups); &lt;br /&gt;
		    $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_member SET groups = ? WHERE id = ?&amp;quot;)-&amp;gt;execute($group_ids, $user_id); &lt;br /&gt;
		}&lt;br /&gt;
		///////////////////////////////////////// Automatische Gruppenzuweisung ENDE&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
	&lt;br /&gt;
	public function gruppenzuweisungcat(){&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
				/////////////////////////////////////////// Automatische Gruppenzuweisung BEGINN	&lt;br /&gt;
		$this-&amp;gt;import('FrontendUser','user');&lt;br /&gt;
		$user_id = $this-&amp;gt;user-&amp;gt;id;  &lt;br /&gt;
		$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
		$ok = 0;$okkill = 0;&lt;br /&gt;
		$addgroup_id = array();$killgroup_id = array();&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd8602   = ID 2 ok&lt;br /&gt;
		// Beispiel Code id2&amp;amp;cd7489   = ID 2 fail&lt;br /&gt;
		// FORMEL zum manuellen codieren ((x * 15) + 344) * 23;&lt;br /&gt;
		// FORMEL zum auto decodieren ((x / 23) - 344) / 15;&lt;br /&gt;
		&lt;br /&gt;
		if ($_REQUEST[&amp;quot;dex&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $_REQUEST[&amp;quot;dex&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						} &lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$ok = 1;&lt;br /&gt;
						$addgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					} &lt;br /&gt;
				}&lt;br /&gt;
				//print_r($codenumber[$next]);&lt;br /&gt;
				&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($_REQUEST[&amp;quot;kil&amp;quot;]){// muss Hiddenfeld haben&lt;br /&gt;
				$inhalt = $_REQUEST[&amp;quot;kil&amp;quot;];&lt;br /&gt;
				$alle = explode(&amp;quot;&amp;amp;&amp;quot;, $inhalt);&lt;br /&gt;
				$idnumber = array();&lt;br /&gt;
				$codenumber = array();&lt;br /&gt;
				for ($next = 0; $next &amp;lt;= count($alle)-1; $next++){&lt;br /&gt;
					$zeichen = preg_split('/[id.cz]/', $alle[$next], -1);&lt;br /&gt;
					$newarray = array();&lt;br /&gt;
					for ($x = 0; $x &amp;lt;= count($zeichen)-1; $x++){//neuen Index&lt;br /&gt;
						if($zeichen[$x]!=''){&lt;br /&gt;
						array_push($newarray, $zeichen[$x]);&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					$idnumber[$next] = $newarray[0];&lt;br /&gt;
					$codenumber[$next] = $newarray[1];&lt;br /&gt;
					$codenumber[$next] = (($codenumber[$next] / 23) - 344) / 15;// Sicherheitscode dekodieren&lt;br /&gt;
					if ($codenumber[$next] == floor($codenumber[$next]) &amp;amp;&amp;amp; $codenumber[$next] == $idnumber[$next]){// muss ganze Zahl sein und mit ID übereinstimmen&lt;br /&gt;
						$okkill = 1;&lt;br /&gt;
						$killgroup_id[$next] = $idnumber[$next];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		$memberGroups = $this-&amp;gt;Member-&amp;gt;groups;&lt;br /&gt;
		for ($addit = 0; $addit &amp;lt;= count($addgroup_id)-1; $addit++){//neuen Index&lt;br /&gt;
				// ---------------- neuer Gruppe zuweisen ---------------------------------&lt;br /&gt;
				 if ($ok == 1 &amp;amp;&amp;amp; !in_array($addgroup_id[$addit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn nicht schon vorhanden&lt;br /&gt;
				  $memberGroups[] = $addgroup_id[$addit];//array push&lt;br /&gt;
&lt;br /&gt;
				 }&lt;br /&gt;
		}&lt;br /&gt;
		for ($killit = 0; $killit &amp;lt;= count($killgroup_id)-1; $killit++){//neuen Index&lt;br /&gt;
				// ---------------- Gruppe entfernen ---------------------------------&lt;br /&gt;
				$this-&amp;gt;import('FrontendUser', 'Member');&lt;br /&gt;
				if ($okkill == 1 &amp;amp;&amp;amp; in_array($killgroup_id[$killit], $this-&amp;gt;Member-&amp;gt;groups)){//wenn vorhanden&lt;br /&gt;
					$key = array_search($killgroup_id[$killit], $memberGroups);// gesuchte Element killen&lt;br /&gt;
					unset($memberGroups[$key]);// Entfernt das gekillte Arrayelement um Index neu aufzubauen&lt;br /&gt;
					$memberGroups = array_values($memberGroups);// Array mit fortlaufendem Index erzeugen um Lücken zu entfernen&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ($ok == 1 || $okkill == 1){// Tabelle beschreiben&lt;br /&gt;
		    $group_ids = serialize($memberGroups); &lt;br /&gt;
		    $this-&amp;gt;Database-&amp;gt;prepare(&amp;quot;UPDATE tl_member SET groups = ? WHERE id = ?&amp;quot;)-&amp;gt;execute($group_ids, $user_id); &lt;br /&gt;
		}&lt;br /&gt;
		///////////////////////////////////////// Automatische Gruppenzuweisung ENDE&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
HINWEIS: Bei der eigenen Funktion darf es in der PHP kein Close Tag geben. Das &amp;quot;?&amp;gt;&amp;quot; darf hier am Ende nicht stehen.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Kurz zur Erläuterung'''&amp;lt;br&amp;gt;&lt;br /&gt;
Die &amp;quot;gruppenzuweisung&amp;quot; Funktion ist für das abschicken von Formulardaten&amp;lt;br&amp;gt;&lt;br /&gt;
Die &amp;quot;gruppenzuweisungcat&amp;quot; Funktion ist eine seperate für das abschicken von Katalog(item)daten, da es von der &amp;lt;br&amp;gt;ContaoCore Routine nicht erfasst wird.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funktion starten ==&lt;br /&gt;
&lt;br /&gt;
Zum Schluß müssen wir nur noch festlegen wann und wo wir diese Funktion abfrufen möchten.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Ordner '''system/config/'''&amp;lt;br&amp;gt;&lt;br /&gt;
die Datei '''dcaconfig.php''' bearbeiten und folgendes einsetzen:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['processFormData'][] = array('Extrafunktionen', 'gruppenzuweisung');&lt;br /&gt;
//$GLOBALS['TL_HOOKS']['catalogFrontendUpdate'][] = array('Extrafunktionen', 'gruppenzuweisungcat');&lt;br /&gt;
$GLOBALS['TL_HOOKS']['catalogFrontendInsert'][] = array('Extrafunktionen', 'gruppenzuweisungcat');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird unsere Funktion nach dem Abschicken eines Formulars ausgeführt und nachdem der User (im FE) &amp;lt;br&amp;gt;einen neuen KatalogItem erstellt hat. Je nach dem was man erreichen möchte setzt man es hier fest.&lt;/div&gt;</summary>
		<author><name>Izanagi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Catalog_Hovereffekt_f%C3%BCr_Items</id>
		<title>Catalog Hovereffekt für Items</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Catalog_Hovereffekt_f%C3%BCr_Items"/>
				<updated>2011-04-23T21:43:32Z</updated>
		
		<summary type="html">&lt;p&gt;Izanagi: Die Seite wurde neu angelegt: „Category:Catalog   == '''STEP 1 - Hovereffekt beim überfahren eines Catalog-Items''' == ''In diesem Beispiel bezogen auf das Teaserbild''  &amp;lt;pre&amp;gt;Gehen wir dav…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Catalog]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''STEP 1 - Hovereffekt beim überfahren eines Catalog-Items''' ==&lt;br /&gt;
''In diesem Beispiel bezogen auf das Teaserbild''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Gehen wir davon aus euer Listener stellt für jedes Item ein Teaserbild dar, auf diesem man zur Detailansicht kommt.&lt;br /&gt;
Wir möchten einen Hovereffekt bei überfahren mit der Maus. Unser Beispiel ein png Bild mit Leuchteffekt.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== STEP 2 - Template des Listeners modifizieren ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Die Templates findet ihr in ''/system/modules/catalog/templates''&amp;lt;/pre&amp;gt;&lt;br /&gt;
 {{Hinweis|Editieren könnt ihr die tpls gut mit dem kostenlosen notepad++}}&lt;br /&gt;
&amp;lt;pre&amp;gt;Im Listener Template (zb. catalog_liste.tpl) wird bei der Zeile&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;alle (von euch aktivierten)Felder, im FrontEnd ausgegeben und dargestellt pro item.&lt;br /&gt;
Wenn wir einen Hovereffekt haben wollen, nehmen wir ein DIV das übergeblendet werden soll. &lt;br /&gt;
Innerhalb dieses DIVs können wir Farbflächen, Text oder Bilddaten setzen, völlig egal. &lt;br /&gt;
Das DIV erstellen wir, indem wir nach der oben genannten Zeile&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;deinhovereffekt&amp;quot; &amp;gt;&amp;lt;/div&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;einsetzen. Das DIV überlappt das Teaserbild, dadurch haben wir keinen Link mehr zur Detailansicht.&lt;br /&gt;
Also geben wir noch den Link des Items hinzu den wir mit $entry['url'] bekommen.&lt;br /&gt;
''Kurz erklärt $entry ist das Array das alle Felder enthält und ausgibt. ['url'] ist eines der Kinder des Arrays,&lt;br /&gt;
also ein Feld und zwar die URL zur Detailseite.''&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;deinhovereffekt&amp;quot; &amp;gt;&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['url']; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;Weil wir hier ein '''Bild''' als Hovereffekt nehmen wollen, geben wir noch ein ''span'' samt url zum Bild gleich mit.&lt;br /&gt;
Im Endeffekt der gleiche den auch Catalog fürs Teaserbild generiert.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;deinhovereffekt&amp;quot; &amp;gt;&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['url']; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;image first even&amp;quot;&amp;gt;&amp;lt;img width=&amp;quot;140&amp;quot; height=&amp;quot;100&amp;quot; alt=&amp;quot;klick mich&amp;quot; src=&amp;quot;tl_files/bilddaten/leuchteffekt.png&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Wenn euer Item im Listener nicht nur ein Teaserbild sondern auch weitere Felder erhält wie Name,Preis oder ähnliches&lt;br /&gt;
hätten wir jetzt das Problem das über '''jedem''' Feld unser neues DIV angezeigt wird. Also beschränken wir es&lt;br /&gt;
mit einer IF Abfrage. In diesem Fall wollen wir den Effekt nur auf das Teaserbild. Ihr braucht den Spaltenname eures Teaserbilds.&lt;br /&gt;
In meinem Beispiel $field=='teaserbild'&lt;br /&gt;
Mit der IF Abfrage sieht der komplette Code nun so aus:&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;value&amp;quot;&amp;gt;&amp;lt;?php echo $data['value']; ?&amp;gt;&lt;br /&gt;
&amp;lt;!-- Ab hier euer Code für den Hovereffekt --&amp;gt;&lt;br /&gt;
    &amp;lt;?php if (strlen($data['raw'])&amp;amp;&amp;amp; $field=='seiten_teaserbild'): ?&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;deinhovereffekt&amp;quot; &amp;gt;&amp;lt;a href=&amp;quot;&amp;lt;?php echo $entry['url']; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;image first even&amp;quot;&amp;gt;&amp;lt;img width=&amp;quot;140&amp;quot; height=&amp;quot;100&amp;quot; alt=&amp;quot;klick mich&amp;quot; src=&amp;quot;tl_files/bilddaten/blende.png&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;!-- Hier endet der Code --&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== STEP 3 - CSS erweitern ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Da das DIV jetzt aber sofort zu sehen ist. Verstecken wir es per CSS mit display: none;&lt;br /&gt;
Und beim Hover lassen wir es anzeigen mit display: block;&lt;br /&gt;
Ihr legt euch einen neuen Stylesheet an (als beispiel):&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.layout_liste .item .deinhovereffekt {&lt;br /&gt;
display: none;&lt;br /&gt;
position: absolute;&lt;br /&gt;
height: 100px;&lt;br /&gt;
top: 0;&lt;br /&gt;
width: 140px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.layout_liste .item:hover .deinhovereffekt {&lt;br /&gt;
display: block;&lt;br /&gt;
position: absolute;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Izanagi</name></author>	</entry>

	</feed>