FriendsOfREDAXO/tricks

YForm: Spalteninhalt vor Anzeige in Übersicht ändern

Closed this issue · 10 comments

Beim Einsatz einer YForm-Tabelle im eigenen AddOn kann für beliebige Spalten vor der Anzeige in der Übersicht der Wert manipuliert und ggf. mit Werten aus derselben Tabellenzeile kombiniert werden. Dabei müssen die benötigten anderen Werte der Zeile als Parameter übergeben werden (im Beispiel die Spalte "name"). Konkret wird hier in der Anzeige der Spalte "title" der Wert der Spalte "name" angehängt.

if (rex::isBackend())
{
    rex_extension::register('YFORM_DATA_LIST', function( $ep ) {  

        if ($ep->getParam('table')->getTableName()==gewuenschte_tabelle'){
            $list = $ep->getSubject();

            $list->setColumnFormat(
            'title',
            'custom',
            function($a){
                $neuer_wert=$a['value']." ".$a['params']['name'];

                return $neuer_wert;
            },
            array('name' => $list->getValue('name'))
            );
        }
    });
}

Das Snippet kommt am besten in die boot.php des project-AddOns.

@netzproductions weißt du auch, wie man den Wert aus einem anderen Feld (z.B. id) ausliest? Beispielsweise möchte ich in Feld count zeigen, wie viele Datensätze anhand der id mit dem Datensatz in einer anderen Tabelle verknüpft sind.

@alexplusde Du kannst den Array, der setColumnFormat als letzten Parameter übergeben wird, beliebig erweitern und dort alle Spalten reinpacken, die Du in der Funktion brauchst, also z.B.

$list->setColumnFormat(
	'title',
	'custom',
	function($a){
	    $neuer_wert=$a['value']." ".$a['params']['name']." ".$a['params']['count'];

	    return $neuer_wert;
	},
	array(
		'name' => $list->getValue('name'),
		'name' => $list->getValue('count')
	)
);

Kannst du das ein wenig kommentieren? ich steige da nicht durch. Was ist $a? Was ist "title", was ist "custom", usw.?

Ich würde dann auch versuchen, eine eigene Value bei YForm daraus zu bauen, sodass man solche Listenübersichtsfelder auch über den Table Manager anlegen kann. Um Hilfe wäre ich dankbar!

$list->setColumnFormat(
	'title', // Spalte, für die eine custom function aktiviert wird
	'custom', // festes Keyword
	function($a){ 

		// Generierung des auszugebenden Werts unter Einbeziehung beliebiger anderer Spalten
		// $a['value'] enthält den tatsächlichen Wert der Spalte
		// $a['params']['xyz'] enthält den Wert einer anderen Spalte, die zuvor als weiterer Parameter definiert wurde, s.u.

	    $neuer_wert=$a['value']." ".$a['params']['xyz'];

	    return $neuer_wert;
	},
	array(
		'abc' => $list->getValue('abc'), // übergibt zusätzlich den Wert der Spalte "abc" and die custom function
		'xyz' => $list->getValue('xyz') // übergibt zusätzlich den Wert der Spalte "xyz" and die custom function
	)
);

Ich versuche, die Funktion gerade produktiv einzusetzen und bemerke, daß sie gar nicht so arbeitet wie geplant - daher zunächst bitte nicht nutzen!

So: Vergesst, was oben steht, das ist falsch ;-)

Hier nun das korrekte Snippet, um auf die anderen Werte zuzugreifen:

$list->setColumnFormat(
	'title', // Spalte, für die eine custom function aktiviert wird
	'custom', // festes Keyword
	function($a){ 

		// Generierung des auszugebenden Werts unter Einbeziehung beliebiger anderer Spalten
		// $a['value'] enthält den tatsächlichen Wert der Spalte
		// $a['list']->getValue('xyz') gibt den Wert einer anderen Spalte ("xyz) zurück.

	    $neuer_wert=$a['value']." ".$a['list']->getValue('xyz');

	    return $neuer_wert;
	}
);

Gerne den snippets hinzufügen oder vorhandenes snippet aktualisieren