yakamara / redaxo_yform_docs

Dokumentation für YForm
31 stars 30 forks source link

Table Manager: customfunction: Howto und Beispiele #9

Closed alxndr-w closed 7 years ago

alxndr-w commented 8 years ago

Wie funktionieren sie? Was gibt es da für gebräuchliche Szenarien?

alxndr-w commented 8 years ago

Wo werden diese Funktionen üblicherweise abgelegt?

alxndr-w commented 8 years ago

Vermutlich im Project-Addon.

Ich brauche trotzdem noch Hilfe bei der Syntax - ein einfaches Beispiel würde mir genügen.

@dergel @polarpixel @Goldfischpeter

dergel commented 8 years ago

genau.. wenn du irgendeine eigene überprüfung haben willst ..du erstellst z.b. diese function in dem project addon und benutzt sie in dieser validierung. Spezielle Beispiel sind z.B. api calls ob irgendeine ID passt oder was ähnlöiches.

alxndr-w commented 8 years ago

Danke @dergel

Was mir wirklich fehlt, so blöd es klingt, ist ein idiotensicheres Beispiel, was ich da jetzt als Wert eintragen soll. Also nur den Namen der Funktion, mit oder ohne Klammern und in welcher Form Parameter angegeben werden sollen: In einem Array, als PHP-Variablen mit $-Zeichen, Feldnamen...

meine_funktion() vs meine_funktion und $parameter, $parameter2 vs feld1,feld2,feld3 vs array($p1, $p2)

und wie die Funktion dann aufgebaut sein muss, weil die ja soweit ich weiß eh schon Parameter übergeben bekommt.

function($welche, $werte, $sind, $das) { return: true; }

Gregor hatte mir da ein Beispiel geschickt aus yrewrite, das customfunction benutzt, allerdings fällt es mir schwer, mich in den Code einzulesen: https://github.com/yakamara/redaxo_yrewrite/blob/1b5c151163b84c4132a15ed8c00a40974ab2edef/pages/content.yrewrite_url.php#L55-L57

skerbis commented 8 years ago

Hilft das weiter? http://www.redaxo.org/de/forum/addons-f30/wie-funktioniert-xform-validation-customfunction-t19213.html

alxndr-w commented 8 years ago

@skerbis lustig, scheinbar habe ich mich schon mal selbst damit beschäftigt :D

Allerdings weiß ich dabei immer noch nicht, wie die Parameter verwendet werden. Es gibt dafür im Table Manager ein Feld, trotzdem weiß ich nicht, wie ich es befüllen soll.

https://github.com/yakamara/redaxo_yrewrite/blob/1b5c151163b84c4132a15ed8c00a40974ab2edef/pages/content.yrewrite_url.php#L78

['article_id' => $article_id, "domain" => $domain, "clang" => $clang]

Hier werden zwar Parameter verwendet, allerdings sind ja bspw. $clang etc. im Backend gar nicht verfügbar, deswegen verstehe ich auch hier nicht die Verwendung für "Parameter" im Backend.

Umdas nochmal klar zu machen: Ich brauche ein Beispiel, wie... image ... das hier ausgefüllt ist und eine Funktion, die mir zeigt, wie ich auf die Werte (und zusätzliche Parameter) reagiere.

Falls Parameter aber nur für das YForm-Modul gedacht sind, und nicht für den Table Manager (unter "Datensatz hinzufügen"), dann muss das auch klar aus der Doku hervorgehen.

skerbis commented 8 years ago

function foo($_label, $_value, $_additional_param) sagt doch alles aus .... In Name kommt foo Weitere Parameter ($_additional_param) gibt es oder gibt es eben nicht in deiner Funktion. Wie diese übergeben und ausgelesen werden musst du in der Funktion selbst entscheiden.

Wo die Funktion abgelegt wird interessiert mich allerdings mehr

alxndr-w commented 8 years ago

d.h. wenn ich in "weitere Parameter" ein Array eintrage, steht mir das auch als Array zur Verfügung, wenn ich was kommagetrenntes eintrage, eben ein String? Dann ist jetzt der Groschen gefallen. (Hätte ja auch sein können, dass mir immer nur ein String zur Verfügung steht, egal, was ich eingebe)

Ich denke, ich war zu fixiert darauf, dass YForm an anderer Stelle (bspw. be_manager_relation > Filter oder bei Feldnamen) manchmal einen ganz eigenen und festgelegten Syntax verlangt.

Wo legst du denn deine eigenen Funktionen i.d.R. ab? project-Addon? Man müsste mal testen, ob er die Funktion von überall aus erreicht...

skerbis commented 8 years ago

Ich würde es jetzt in dem Project-Addon ablegen wollen, denke ich.

Wenn Du eine Funktion zum Spielen brauchst, hier ohne zusätzliche Parameter. Aber da kannste sicher was fummeln.

Hier ein Beispiel.

    function getValidIban($_label,$iban, $_additional_param)
    {
        // normalize
        $iban    = str_replace(array(
            ' ',
            '-',
            '.',
            ','
        ), '', strtoupper($iban));

        $pattern = '#(?P<value>((?=[0-9A-Z]{28}$)AL\d{10}[0-9A-Z]{16}$|^(?=[0-9A-Z]{24}$)AD\d{10}[0-9A-Z]{12}$|^(?=[0-9A-Z]{20}$)AT\d{18}$|^(?=[0-9A-Z]{22}$)BH\d{2}[A-Z]{4}[0-9A-Z]{14}$|^(?=[0-9A-Z]{16}$)BE\d{14}$|^(?=[0-9A-Z]{20}$)BA\d{18}$|^(?=[0-9A-Z]{22}$)BG\d{2}[A-Z]{4}\d{6}[0-9A-Z]{8}$|^(?=[0-9A-Z]{21}$)HR\d{19}$|^(?=[0-9A-Z]{28}$)CY\d{10}[0-9A-Z]{16}$|^(?=[0-9A-Z]{24}$)CZ\d{22}$|^(?=[0-9A-Z]{18}$)DK\d{16}$|^FO\d{16}$|^GL\d{16}$|^(?=[0-9A-Z]{28}$)DO\d{2}[0-9A-Z]{4}\d{20}$|^(?=[0-9A-Z]{20}$)EE\d{18}$|^(?=[0-9A-Z]{18}$)FI\d{16}$|^(?=[0-9A-Z]{27}$)FR\d{12}[0-9A-Z]{11}\d{2}$|^(?=[0-9A-Z]{22}$)GE\d{2}[A-Z]{2}\d{16}$|^(?=[0-9A-Z]{22}$)DE\d{20}$|^(?=[0-9A-Z]{23}$)GI\d{2}[A-Z]{4}[0-9A-Z]{15}$|^(?=[0-9A-Z]{27}$)GR\d{9}[0-9A-Z]{16}$|^(?=[0-9A-Z]{28}$)HU\d{26}$|^(?=[0-9A-Z]{26}$)IS\d{24}$|^(?=[0-9A-Z]{22}$)IE\d{2}[A-Z]{4}\d{14}$|^(?=[0-9A-Z]{23}$)IL\d{21}$|^(?=[0-9A-Z]{27}$)IT\d{2}[A-Z]\d{10}[0-9A-Z]{12}$|^(?=[0-9A-Z]{20}$)[A-Z]{2}\d{5}[0-9A-Z]{13}$|^(?=[0-9A-Z]{30}$)KW\d{2}[A-Z]{4}22!$|^(?=[0-9A-Z]{21}$)LV\d{2}[A-Z]{4}[0-9A-Z]{13}$|^(?=[0-9A-Z]{,28}$)LB\d{6}[0-9A-Z]{20}$|^(?=[0-9A-Z]{21}$)LI\d{7}[0-9A-Z]{12}$|^(?=[0-9A-Z]{20}$)LT\d{18}$|^(?=[0-9A-Z]{20}$)LU\d{5}[0-9A-Z]{13}$|^(?=[0-9A-Z]{19}$)MK\d{5}[0-9A-Z]{10}\d{2}$|^(?=[0-9A-Z]{31}$)MT\d{2}[A-Z]{4}\d{5}[0-9A-Z]{18}$|^(?=[0-9A-Z]{27}$)MR13\d{23}$|^(?=[0-9A-Z]{30}$)MU\d{2}[A-Z]{4}\d{19}[A-Z]{3}$|^(?=[0-9A-Z]{27}$)MC\d{12}[0-9A-Z]{11}\d{2}$|^(?=[0-9A-Z]{22}$)ME\d{20}$|^(?=[0-9A-Z]{18}$)NL\d{2}[A-Z]{4}\d{10}$|^(?=[0-9A-Z]{15}$)NO\d{13}$|^(?=[0-9A-Z]{28}$)PL\d{10}[0-9A-Z]{,16}n$|^(?=[0-9A-Z]{25}$)PT\d{23}$|^(?=[0-9A-Z]{24}$)RO\d{2}[A-Z]{4}[0-9A-Z]{16}$|^(?=[0-9A-Z]{27}$)SM\d{2}[A-Z]\d{10}[0-9A-Z]{12}$|^(?=[0-9A-Z]{,24}$)SA\d{4}[0-9A-Z]{18}$|^(?=[0-9A-Z]{22}$)RS\d{20}$|^(?=[0-9A-Z]{24}$)SK\d{22}$|^(?=[0-9A-Z]{19}$)SI\d{17}$|^(?=[0-9A-Z]{24}$)ES\d{22}$|^(?=[0-9A-Z]{24}$)SE\d{22}$|^(?=[0-9A-Z]{21}$)CH\d{7}[0-9A-Z]{12}$|^(?=[0-9A-Z]{24}$)TN59\d{20}$|^(?=[0-9A-Z]{26}$)TR\d{7}[0-9A-Z]{17}$|^(?=[0-9A-Z]{,23}$)AE\d{21}$|^(?=[0-9A-Z]{22}$)GB\d{2}[A-Z]{4}\d{14}))#';
        // check
        if (preg_match($pattern, $iban, $matches)) {
            return false;
        } else {
            return true;
        }
    }
skerbis commented 8 years ago

$_additional_param könnte z.B. ein anderes Pattern sein?

alxndr-w commented 8 years ago

Das ist auf jeden Fall ein anschauliches und nützliches Beispiel. Das werde ich so übernehmen und noch vorher ein wenig testen. Danke!

alxndr-w commented 8 years ago

Hinzugefügt, aber noch nicht verlinkt.

alxndr-w commented 7 years ago

@skerbis, das kannst du mir evtl. ganz easy beantworten:

Sehe ich das richtig: Wenn die customfunction false zurückliefert, dann gilt die Validierung als bestanden? Und wenn true, dann ist die Validierung fehlgeschlagen / die Eingabe ungültig?

skerbis commented 7 years ago

Ja, bei true sollte die Fehlermeldung kommen.

alxndr-w commented 7 years ago

Das ist ja mal sowas von unintuitiv :D (Ich hau es in die Doku)