Hallo!
----
Verwendete Extensions:
Extbase 1.3.4
RealUrl 1.12.3
Typo3 4.5.26
----
Ich hab folgendes Problem:
Aus der URL meiner Extension möchte ich die "Action" entfernt haben.
Der Controller und cHash sind schon raus. Nur mit der Action kämpfe ich erfolglos.
Wenn ich in der localconf folgende Zeile in die postVarSets einfüge
array(
'GETvar' => 'tx_sysfireproductview_productview[action]',
'noMatch' => 'bypass',
),
dann sind die Links im Frontend, die die Action haben, quasi funktionslos.
(sonst: Listansicht -> Klick auf ein Listelement -> Detailansicht)
Kann ich im ActionController irgendwas ergänzen, damit ich bei diesen Links trotzdem vorankomme?
Entferne ich die Zeile 'noMatch' => 'bypass', ist wieder alles in Ordnung, aber die Action steht in der URL.
Ich frag mich nur, warum die Einstellungen mit noMatch bei dem Controller und cHash wunderbar funktionieren, aber nicht bei Action.
Falls noch weitere Infos zu diesem Problem fehlen (könnten), dann sagt Bescheid.
Vielen Dank im Voraus.
Gruß Jolanta
Kommt jetzt auf die spezifische Extension an bei der dieses Argument entfernt werden soll. Ich vermute, dass das selbe Plugin benutzt wird für Listen- und Detailansicht. Dann ist Extbase darauf angewiesen die Action zu bekommen sonst kann es ja nicht wissen ob Du Liste oder Details willst und benutzt einfach den Default.
Hallo, danke für die Antwort.
Ja, für beide Ansichten wird ein Plugin verwendet.
So wie du das geschrieben hast, kann man den Actionnamen nicht aus der URL entfernen?
Nein, dann müsste man zwei Plugins daraus machen.
Mit CoolURI geht das, zumindest wenn die sonstigen Parameter eine eindeutige Zuordnung zulassen.
Danke für die Antworten.
Was mich aber wundert:
da das jetzt meine erste Extension mit Extbase war, habe ich mir eine Bestehende angeschaut und anhand dieser Codes meine Extension aufgebaut.
Da wurde quasi auch eine Action verwendet umd von einer Listansicht in eine Detailansicht zu kommen. Mit einem Plugin. Action wurde dann in der localconf erfolgreich ausgeblendet.
Gibt es hier jemanden, der das gleiche Problem hatte, und dies dann auch gelöst hat?
Was macht CoolURI anders als RealURL, dass es da dann funktioniert?
Welche Extension ist das denn? Würde mich auch interessieren was CoolUri da so macht. Kann mir nicht vorstellen, dass das geht, außer man kann quasi den Action Parameter anhand eines anderen intern setzen lassen (also quasi immer wenn ich eine Detail ID übergebe soll auch die Action auf Detail gesetzt werden). Oder hat das andere Plugin vielleicht ein Flexform in dem man die Action auswählt?
Das ist eine nicht öffentliche Exstension... 🙁
Ja da wurde auch Flexform eingesetzt. Ne, das bringt mich weiter, dann muss ich das so auch aufbauen.
Danke für die Erkenntnis/Gedankenschubser :-)
Ja danke für den Link, den kenne ich schon, habe damit die anderen Parameter entfernt.
Da ich noch keine Flexform nutze, hat aber mir das Tutorial bei Action nicht geholfen.
So einfach gehts:
1) Im FLUID Template action="show" entfernen:
<f:link.action arguments="{table:table}">
2) Per TypoScript im setup-Feld prüfen ob URL Parameter mit ID übergeben wird und dann fix setzen:
[globalVar = GP:tx_extkey_table|table > 0]
config.defaultGetVars {
tx_extkey_table.action = show
}
[global]
Hallo!
Danke für den Tipp.
In welcher Extbase / Typo3 Version funktioniert das?
Habe das nachgebaut, aber leider sind die Links ohne Action nicht funktionsfähig... 🙁
Hatte das Problem gerade auch und bin über diesen Threat gestoßen, daher der Vollständigkeit halber eine Ergänzung:
Das TypoScript ist in dem Fall nicht notwendig. Wenn man das Argument action="show" im ViewHelper weglässt wird die Standard-Action im Controller aufgerufen. Welche das ist, sieht man in der ext_localconf.php.
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'FOO.' . $_EXTKEY,
'MyExt',
array(
'Bar' => 'list,show',
),
// non-cacheable actions
array(
)
);
In diesem Beispiel ist das die listAction im BarController weil sie in der Konfiguration an erster Stelle steht. Jetzt muss diese nur noch geringfügig angepasst werden.
public function listAction() {
if ($this->request->hasArgument('myModel') && $this->request->getArgument('myModel') > 0) {
$this->forward('show', NULL, NULL, array(
'myModel' => $this->request->getArgument('myModel')
));
} else {
// hier steht der Rest wie sonst
}
}
Fehlt noch Fluid:
<f:link.action arguments="{myModel:myModel}">