Guten Abend,
Ich stehe bei der Entwicklung einer Extension gerade vor folgendem Problem:
Ich würde gerne je nach Auswahl in einem "select"-Feld die spätere Ausgabe variieren, allerdings weiß ich z.Zt nicht wie ich das realisieren könnte, da ich keinen Rückgabewert bekomme.
Hier mal der betroffene Auszug aus meiner ext_tables.php:
'auswahl' => array(
'label' => 'Choose:',
'config' => array(
'type' => 'select',
'items' => array(
array('Choice 1', '1'),
array('Choice 2', '2'),
),
'default' => '1',
)
),
Ich habe dann einen ViewHelper, dem ich den Wert von "auswahl" übergeben möchte, um dort zu entscheiden welche Ausgabe gewählt wird.
Allerdings ist "auswahl" immer leer bzw. hat keinen Rückgabewert und ich kann somit nichts übergeben, um zu entscheiden.
Ich weiß nicht, ob ich in der ext_tables.php oder sonstwo etwas vergessen habe bzw. haben könnte, oder ob es schlichtweg auf diese Weise nicht möglich ist.
Wenn mir jemand weiterhelfen oder einen alternativen Lösungsweg sagen könnte, wäre ich sehr dankbar.
Mit freundlichen Grüßen
BjoernBoba
Also vielleicht nochmal zur Vereinfachung:
Ich muss nur irgendwie an den Value der einzelnen Items kommen.
Wie versuchst du denn derzeit da ran zu kommen?
Ich hab in meiner Klasse in Domain/Model/MyClass.php die Variable "auswahl" (die wie im 1. Post zu sehen ist, das Select-Feld repräsentiert), bisher als string und int ausprobiert, da ich anfangs intuitiv dachte, dass der Value dann darin abgespeichert wird.
Und die hab ich dann ganz normal im Controller übergeben, um sie im View auszugeben, allerdings ist diese Variable dann immer leer.
Viele andere Versuche habe ich bisher nicht gestartet, da ich nicht weiß wie es funktionieren könnte. Und auch nach stundenlangem googlen hab ich nicht wirklich etwas bracuhbares gefunden 🙁
Ich glaube nicht, dass Dir hier jemand weiterhelfen kann, wenn Du keinen Code postest ;-)
Okay dann mal hier die betroffenen Codestellen:
Classes/Domain/Model/MyClass.php:
/*
* @var string
*/
protected $question_type = '';
[...]
public function __construct($question_type = '', $name, $frage = '', $subtext = '', $antworten = '') {
$this->setQuestion_type($question_type);
$this->setName($name);
$this->setFrage($frage);
$this->setSubtext($subtext);
$this->setAntworten($antworten);
}
public function setQuestion_type($question_type) {
$this->question_type = (string)$question_type;
}
public function getQuestion_type() {
return $this->question_type;
}
[...]
ext_tables.php:
[...]
'columns' => array(
'question_type' => array(
'label' => 'Art der Frage',
'config' => array(
'type' => 'select',
'items' => array(
array('Choice: Eine Antwort', '1'),
array('Choice: Mehrere Antworten', '2'),
),
'default' => '1',
)
),
[...]
'types' => array(
'1' => array('showitem' => 'question_type, name, subtext, frage, antworten'),
'2' => array('showitem' => 'question_type, name, subtext, frage, antworten'),
)
[...]
ext_tables.sql:
[...]
question_type varchar(255) DEFAULT '' NOT NULL,
[...]
Wenn ich dann alles an den View übergebe und will mir im Browser den Inhalt von question_type ausgeben lassen, ist dieser immer leer.
Brauche ich da irgendwie noch eine weitere Variable, um den "Value" abzuspeichern?
Da hammas ja schon :-)
Wenn dein Datenbankfeld 'question_type' heisst, muss der Getter bzw. Setter getQuestionType() bzw. setQuestionType() heissen (es sei denn Du hast im TS ein anderes Mapping definiert).
EDIT: und das Property selbst muss natürlich ebenfalls as $questionType definiert werden
Hey,
Schonmal vielen Dank für deine Antworten 🙂
Meintest du, dass ich überall außer in der ext_tables.sql "question_type" in "questionType" und beim Getter und Setter in "getQuestionType" und "setQuestionType" abändern soll?
Dann kommt ja aber beim Erstellen einer neuen Frage im Backend ein SQL-Error, das questionType nicht bekannt ist.
Nur im Model umbenennen! Am ext_tables.sql und dem entsprechenden TCA-Eintrag ändert sich nichts. (Ich schätze du hast den das TCA-Feld auch umbenannt, darum der Fehler)
Jetzt läuft es: Vielen, vielen Dank 🙂
Kannst du mir aber vielleicht noch ganz kurz erklären, wieso in dem Fall das Property und der Datenbankeintrag unterschiedliche Namen haben (müssen)?
Weil das einfach in Extbase standardmässig so definiert ist.
feldname_mit_underscore wird immer zu $feldnameMitUnderscore bzw. getFeldnameMitUnderscore() im Model
Wenn dein Property anders heissen soll, kannst Du diesen Default so ändern:
plugin.tx_deineext {
persistence {
classes {
Tx_DeineExt_Domain_Model_Dingenskirchen {
mapping {
columns {
feldname_mit_underscore.mapOnProperty = (hier kommt dann hin wie dein Property im Model heissen soll)
}
}
}
}
}
}
Alles klar,
vielen Dank für deine Hilfe!