Zum Inhalt springen

Selectbox wird durch "itemsProcFunc" nicht gefüllt

Erstellt am 24. September 2008 · 6 Antworten · letzte Antwort am 1. Oktober 2008

Tags: Frage

JMueller ·

Hallo,

es ist mir fast peinlich mit so einem sicherlich trivialen Problem zu kommen. Die Hintergründe sind folgende:

Ich habe in der sr_feuser_register eine Selectbox eingefügt. Die dazu passende Extension erstellte ich mit dem Kickstarter. In der ex_tables.php kann ich das Array von Hand füllen und bekomme die Werte auch ausgegeben. Leider reicht mir das nicht, da bei der Selectbox eine auswählbare Jahreszahl ausgegeben werden soll. Daher lade ich mittels der itemsProcFunc eine Funktion. Leider bekomme trotz intensiver Recherche das Array nicht gefüllt. Laut Netz und der "TYPO3 Core API" müsste es so "einfach" funktionieren.

Bitte helft mir!

Meine Dateien :
ext_tables.php

<?php
if (!defined ('TYPO3_MODE')) 	die ('Access denied.');

if (TYPO3_MODE=="BE")	include_once(t3lib_extMgm::extPath("fltesttest")."class.tx_fltesttest_fe_users_tx_fltesttest_test.php");

$tempColumns = Array (
	"tx_fltesttest_test" => Array (		
		"exclude" => 1,		
		"label" => "LLL:EXT:fltesttest/locallang_db.xml:fe_users.tx_fltesttest_test",		
		"config" => Array (
			"type" => "select",
			"items" => Array (
				Array("-", "0"),
			),
			"itemsProcFunc" => "tx_fltesttest_fe_users_tx_fltesttest_test->main",	
			"size" => 5,	
			"maxitems" => 10,
		)
	),
);

t3lib_div::loadTCA("fe_users");
t3lib_extMgm::addTCAcolumns("fe_users",$tempColumns,1);
t3lib_extMgm::addToAllTCAtypes("fe_users","tx_fltesttest_test;;;;1-1-1");
?>

und die Klasse:

class tx_fltesttest_fe_users_tx_fltesttest_test {
				function main(&$params,&$pObj)	{
						// Adding an item!
					$params["items"][]=Array($pObj->sL("1"), "1");
				}
			}

if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/fltesttest/class.tx_fltesttest_fe_users_tx_fltesttest_test.php'])	{
	include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/fltesttest/class.tx_fltesttest_fe_users_tx_fltesttest_test.php']);
}
JMueller ·

Die Funktion wird eingebunden. Zumindest gehe ich davon aus, da ich auch Parserfehler bekomme, wenn ich da Fehler reinschreibe. Laut TypoCoreApi:

itemsProcFunc

PHP function which is called to fill / manipulate the array with elements.

The function/method will have an array of parameters passed to it (where the item-array is passed by reference in the key 'items'). By modifying the array of items, you alter the list of items.

Also insofern sollte das in Ordnung sein.

JMueller ·

Ich verstehe den Hinweis schon und habe auch diesbezüglich ohne Erfolg probiert. Ich bekomme ja den Klassennamen usw vom Kickstarter schon vorgegeben und laut einigen Internetbeiträgen funktioniert es scheinbar bei allen, nur nicht bei mir.

Ist vielleicht schon beim erstellen der Selectbox etwas schief gegangen. Da ich sie für das FE und nicht das BE benötige? Ich bin immernoch ratlos.

JMueller ·

Vielen Dank für die guten Ratschläge. Ich habe das Problem lösen können. Auch wenn ich damit nicht ganz zufrieden bin, aber es funktioniert!

Aus irgendwelchen Gründen wurde die Klasse nicht richtig eingebunden.
Die Variable TYPO3_MODE besitzt den Wert FE wenn ich sie ausgeben lasse. Dennoch ging die untere Anweisung unerklärlicher Weise nicht. Nach dem auskommentieren wurde wenigstens die Datei inkludiert. Soweit dazu.

...
//if (TYPO3_MODE==FE)	
include_once(t3lib_extMgm::extPath("fltesttest")."class.tx_fltesttest_fe_users_tx_fltesttest_test.php");
...

Des weiteren rufe ich jetzt direkt in den Items meine Funktion auf, die die Selectbox füllen soll.

...
"config" => Array (
			"type" => "select",
			"items" => user_funktion(),
 )
...

Meine Funktion habe ich in die Klassendatei geschrieben, welche mir die Jahreszahl zurückliefert.

...
function user_function(){
	$currYear = date(Y);
	$endYear = 1950;	
	$years = array(array("----",0));
	for ($currYear; $currYear>=$endYear; $currYear--) {
        	$years[] = array($currYear,$currYear);
    	}
	return $years;
}
...

Es ist sicherlich eine unsaubere Lösung, aber zählt nicht letztendlich das Ergebnis?! Vielen Dank nochmals!!!