Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We're retiring the forums!

The SilverStripe forums have passed their heyday. They'll stick around, but will be read only. We'd encourage you to get involved in the community via the following channels instead:

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

SS3 Gridfield add


Go to End


6 Posts   752 Views

Avatar
T3nD4n

Community Member, 16 Posts

28 May 2013 at 9:53am

Edited: 28/05/2013 9:59am

Hi all.
i have a problem and don't know why.

here is the gridfield:

class Partido extends Page {

	static $db = array(
		'Resultado' => 'Varchar',
		'Fecha' => 'date',
	);

	static $has_many = array(
		//'Jugadores' => 'Jugador'
		'Puntuaciones' => 'Puntuacion'
	);

	public function getCMSFields() {
		$fields = parent::getCMSFields();

		$dateField = new DateField('Fecha');
		$dateField->setConfig('showcalendar', true);
		
		$fields->addFieldToTab('Root.Main', $dateField, 'Content');
		$fields->addFieldToTab("Root.Main", new TextField("Resultado"), 'Content');
			
		$config = GridFieldConfig_RecordEditor::create();
		
		$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(
				'Jugador.Nombre' => 'Nombre',
				'Jugador.Apellido'=> 'Apellido',
				'Puntos'=> 'Puntuacion'
		));
		
		$studentsField = new GridField(
				'Puntuaciones',
				'Puntuacion',
				$this->Puntuaciones(),
				$config
		);
		
		$fields->addFieldToTab('Root.Jugadores', $studentsField);
		return $fields;
	}
}


class Puntuacion extends DataObject {
	static $db = array(
		'Puntos' => 'Varchar',
	);
	
	static $has_one = array(
		'Jugador' => 'Jugador',
		'Partido' => 'Partido'
	);
}

works fine, when i click "add" button the admin show me this.

if I create a record, all is working.
but is not showing me the name of the "jugador", and have to solve it.

to solve it i did this to "Puntuacion"

class Puntuacion extends DataObject {
	static $db = array(
		'Puntos' => 'Varchar',
	);
	
	static $has_one = array(
		'Jugador' => 'Jugador',
		'Partido' => 'Partido'
	);
	
	
	
	public function getCMSFields() {
	
		$fields = parent::getCMSFields();
		$fields->push(new TextField('Puntos', 'Puntaje'));
				
		$jugador = Jugador::get()->byID($this->JugadorID);
		
		if($jugador){
			$field = new TextField('JugadorID', 'Jugador', $jugador->Apellido);
			$field->setDisabled(true);
			$field->performDisabledTransformation();
			$fields->push($field);
		}else{
			$fields->push(new DropdownField('JugadorID', 'Jugador', Jugador::get()->map('Nombre', 'Apellido')));
		}		
		
		$partido = Partido::get()->byID($this->PartidoID);
		//Debug::show($this);
		
		//Debug::show();
		if($partido){
			$field = new TextField('PartidoID', 'Partido', $partido->Fecha);
			$field->setDisabled(true);
			$field->performDisabledTransformation();
			$fields->push($field);
		}else{
			$fields->push(new DropdownField('PartidoID', 'Partido', Partido::get()->map('Fecha', "Resultado")));
		}
		
				
		return $fields;
		
	}
	
	
}

now seems to be solved because now i can see de Lastname (Apellido)

But when I click the create button the player seems to not being saved

here is an image.

any help will be appreciated!!

Avatar
Bambii7

Community Member, 254 Posts

28 May 2013 at 1:17pm

You could try adding Summary Fields to Puntuacion, it looks as if there is a record in the last screen shot.

public static $summary_fields = array('Puntos','Partido.Resultado');

Avatar
T3nD4n

Community Member, 16 Posts

28 May 2013 at 2:33pm

Hi Bambii7 thanks for your post, i find the problem.

the error was in the DropdownFields.

$fields->push(new DropdownField('JugadorID', 'Jugador', Jugador::get()->map('Nombre', 'Apellido')));

Should be

$fields->push(new DropdownField('JugadorID', 'Jugador', Jugador::get()->map('ID', 'Apellido')));

therefore the record in the table Puntuacion was created but JugadorID was empty.

anyway now i have another problem, in this part of code.

$jugador = Jugador::get()->byID($this->JugadorID);
if($jugador){
			$field = new TextField('JugadorID', 'Jugador', $jugador->Apellido);
			$field->setDisabled(true);
			$field->performDisabledTransformation();
			$fields->push($field);
		}else{
			$fields->push(new DropdownField('JugadorID', 'Jugador', Jugador::get()->map('ID', 'Apellido')));
		}	

I verified if I go to edit a "Puntuacion"or to create a new one.

when I enter to edit one, i need to do something like this.

$field = new TextField('JugadorID', 'Jugador', 'JugadorID' => $jugador->Apellido);

note the third parameter of TExtfield, how can show the name of the "jugador" instead de ID in the textfield, but in the fact when i save it the value saved is the JugadorID

Thanks!

Avatar
T3nD4n

Community Member, 16 Posts

28 May 2013 at 2:56pm

Solved
i change this:

$jugador = Jugador::get()->byID($this->JugadorID);
if($jugador){
			$field = new TextField('JugadorID', 'Jugador', $jugador->Apellido);
			$field->setDisabled(true);
			$field->performDisabledTransformation();
			$fields->push($field);
		}else{
			$fields->push(new DropdownField('JugadorID', 'Jugador', Jugador::get()->map('ID', 'Apellido')));
		}	

for this:

$jugador = Jugador::get()->byID($this->JugadorID);
if($jugador){
			$field = new DropdownField('JugadorID', 'Jugador', Jugador::get()->map('ID', "Nombre"));
			$field->setDisabled(true);
			$field->performDisabledTransformation();
			$fields->push($field);
		}else{
			$fields->push(new DropdownField('JugadorID', 'Jugador', Jugador::get()->map('ID', 'Apellido')));
		}	

Avatar
T3nD4n

Community Member, 16 Posts

29 May 2013 at 6:41am

Edited: 29/05/2013 6:44am

Hi all!
I need help with another thing please.

once I click "add Puntuacion", how can I get the "ID" of the "Partido" to which I am adding this "Punctuacion" and then map it to show it in DropdownField

something like this, in the bolded part .

if($partido){
			
			$field = new DropdownField('PartidoID', 'Partido', Partido::get()->map('ID', "CustomTitle"));
			$field->setDisabled(true);
			$field->performDisabledTransformation();
			$fields->push($field);
		}else{
			$game = Partido::get()->byID("here the ID Of partido");
	
			$game = $game->map('ID',"Title")); //doesn't work map on byID() only on get() 

			$fields->push(new DropdownField('PartidoID', 'Partido', $game));
		}
	

Avatar
T3nD4n

Community Member, 16 Posts

29 May 2013 at 7:31am

Solved,

have to change this

...
$config = GridFieldConfig_RecordEditor::create();
...

for this:

...
$config = GridFieldConfig_RelationEditor::create();
...

In the config of the Gridfield, in the Partido Class.
and automatically adds the "Puntuacion to the corresponding "Partido"