Hallo,
wenn ich einen eigenen ViewHelper schreibe dann definiere ich doch die
Variablen im ViewHelper selbst und brauch sie nicht
nochmal explizit registrieren oder ?
/**
* Formats a given Price like '10.10' to '10,10'
*
* @param string $string Price like 10.10
* @return string Price
*/
public function render($string) {
return str_replace('.', ',', $string);
}
Das obere Beispiel funktioniert das untere nicht.
Aber warum ?
/**
* Formats a given Price like '10.10' to '10,10'
*
* @param string $xyz Price like 10.10
* @return string Price
*/
public function render($xyz) {
return str_replace('.', ',', $string);
}
und wenn ich mehrere Werte werte übergeben möchte müßte es doch so gehen oder ?
/**
* Formats a given Price like '10.10' to '10,10'
*
* @param string $abc Price like 10.10
* @param string $xyz Price2 like 10.10
* @return string Price
*/
public function render($abc,$xyz) {
return str_replace('.', ',', $string);
}
oder ist es wieder so ein Baum Wald ding? auf jeden Fall bekomme ich immer
diese Fehler Argument "" was not registered. Meldung.
typo3 4.5 //
danke
Interessant wär ja wie Du deinen ViewHelper dann jeweils benutzt. Du musst deine Arguments natürlich mit dem Namen auch übergeben.
Hallo
naja ich definiere den Namespace
und übergeben die Werte
<abc:format.price string='{row.price}' />
dies funktioniert ja auch prima
analog dazu sollte es bei den anderen Varianten so sein .. ,oder ?
<abc:format.price xyz='{row.price}' />
und
<abc:format.price xyz='{row.price}' abc='{row.price2}' />
danke
Und du hast jeweils nach den Änderungen die Caches geleert? Das ist auch noch wichtig.
:-) ja das habe ich getan ..mehrfach ..
Dann gehe ich davon aus, dass du auch der Meinung bist, die anderen Varianten sollte eigentlich so laufen ?
oder ?
:-) danke
Ja absolut. Klingt nach einem Problem mit den Reflection-Daten daher meine Idee mit dem Cache. Irgendwas muss schieflaufen, ich weiß nur noch nicht was. Erbst du von einem anderen ViewHelper?
Eigentlich nicht .. es ist eigentlich ein klizekleiner autarker viewhelper
bzw was meinst du damit genau.. ;-) wie kann man von anderen viewhelpern erben
danke
hi,
interessante Frage, hätte bisher eigentlich angenommen das da nichts ohne initializeArguments geht
public function initializeArguments() {
---
$this->registerArgument('column', 'integer', 'Name of the column to render', FALSE, 0);
---
}
Bsp von hier
Das habe ich zu dem Thema gefunden
Argumente mit initializeArguments() registrieren
Die Möglichkeit, Argumente des ViewHelpers direkt an der render()-Methode zu initialisieren, ist vor allem bei nicht zu vielen Argumenten extrem praktisch und intuitiv. Manchmal jedoch baut man mit ViewHelpern komplexere Vererbungshierarchien auf, wo verschiedene Ebenen der Vererbungsstruktur zusätzliche Argumente registrieren sollen. Fluid selbst macht dies z.B. bei den form-ViewHelpern.
Da Methodenparameter und Annotations nicht vererbbar sind, muss es noch einen zusätzlichen Weg zur Registrierung der Argumente eines ViewHelpers geben. Fluid stellt hierfür die Methode initializeArguments() zur Verfügung. In dieser Methode können weitere Argumente durch den Aufruf von $this->registerArgument($name, $type, $description, $required, $defaultValue) registriert werden. Auf diese Argumente können Sie dann über das Array $this->arguments zugreifen.
http://my.safaribooksonline.com/book/-/9783868993073/einen-eigenen-viewhelper-entwickeln/id2692786
:-) erklärt aber nicht warum es bei mir nicht geht #angry# .. aber gut zu wissen, dass es eigentlich funktionieren sollte. wie auch kitsunet schon erwähnt hat (danke dafür :-) )daher muss ich den Fehler wo anders suchen..
und ich hab jetzt auch nen Tipp wo ich mir ein Beispiel für ne Vererbungsstruktur ansehen kann.
Gruß
juhu es wird heller im kopp :-)
Jap, registerArgument und die Method-Arguments stehen nebeneinander, entweder eins oder das andere. Eigetnlich sollte es daher klappen. Schau mal von was deine VH class erbt.
Hallo,
ich will hier noch mal auf den Initial-Post eingehen...
brainage schrieb
/**
* @param string $string Price like 10.10
* @return string Price
*/
public function render($string) {
return str_replace('.', ',', $string);
}
Das obere Beispiel funktioniert das untere nicht.
Aber warum ?
/**
* @param string $xyz Price like 10.10
* @return string Price
*/
public function render($xyz) {
return str_replace('.', ',', $string);
}
und wenn ich mehrere Werte werte übergeben möchte müßte es doch so gehen oder ?
/**
* @param string $abc Price like 10.10
* @param string $xyz Price2 like 10.10
* @return string Price
*/
public function render($abc,$xyz) {
return str_replace('.', ',', $string);
}
Die erste render-Methode erhält ein Argument namens $string, damit machst du dann das str_replace
Es existiert kein Unterschied zwischen der zweiten und der dritten. Ob die Argumente $abc oder $xyz heißen spielt insofern keine Rolle - auch nicht wie viele Argumente du hier übergibst.
Allerdings übergibst du der str_replace jedesmal eine Variable namens $string.
So wie ich das verstehe, existiert diese aber noch nicht mal innerhalb der render-Methode.
Deine render-Methode erhält zwar $abc, $xyz, tut aber nichts damit.
harald1972 schrieb
Allerdings übergibst du der str_replace jedesmal eine Variable namens $string.
So wie ich das verstehe, existiert diese aber noch nicht mal innerhalb der render-Methode.
Deine render-Methode erhält zwar $abc, $xyz, tut aber nichts damit.
Ich denke, das war nur als Beispiel gedacht und im richtigen Code sieht das dann schon valid aus...
Ich hatte heute dasselbe Problem. Ich möchte 2 Parameter an den ViewHelper senden. Er akzeptiert aber nur einen und gibt als Fehler an, dass der andere nicht registriert sei. Wenn ich den jetzt mit der oben genannten Registrier-funktion anmelden will, kommt der Fehler, dass der Parameter nicht 2 mal registriert werden soll. Hab auch keine Lösung gefunden bisher.
Wenn bei uns Fehler mit den ViewHelper-Parameter auftreten, kontrolliere ich immer:
-
Ist der Kommentar über render() korrekt gesetzt? (keine Tabs, sondern Leerzeichen, etc...)
-
Hilft auch Cache leeren nichts, kümmere ich mich um den Reflection Cache: http://blog.recent.ch/extbase-reflection-cache-wahrend-entwicklung-deaktivieren/
-
In einem Fall hatten wir nach einer ViewHelper Änderung überhaupt erst erfolg, als wir einen neuen, etwas anders lautenden ViewHelper mit gleichen Methoden erstellt hatten
Hatte das Problem auch gerade. Bei mir hat es funktioniert, nachdem ich in der Funktionsbeschreibung den Parameter hinzugefügt habe. Da muss man bei Extbase immer ein bisschen aufpassen, das alles schön sauber in den comments steht.
/**
* Makes a List of selected Days
*
* @param string $daylist
* @param boolean $crop
* @return string
* @author *** *** <***@****.**>
*/
public function render($daylist, $crop) {
...
}