FriendsOfREDAXO / mform

Spielend einfach umfangreiche Modul-Input-Formulare erzeugen.
MIT License
77 stars 19 forks source link

Übergabe des Linktyps beim customLinkField #148

Closed tema-web closed 4 years ago

tema-web commented 5 years ago

Das customLinkField ist klasse, um viele Input-Felder zu vermeiden. Allerdings speichert es nur den Wert des Feldes in der Datenbank (Bei intern die ID des Artikels, bei Medienpool den Dateinamen etc.) Wäre es möglich, direkt ein Json-Array zu speichern, bei dem zusätzlich gespeichert wird, was ausgewählt wurde (Intern, Media ...)? Die Erstellung des Links ohne diese Info bekomme ich leider nicht sicher hin.

skerbis commented 5 years ago

Schau mal:


// CustomLink-Funktion REX5 / mform / mblock

    if (!function_exists('whaturl')) {
      function whaturl($url) {

      // Wurde ein Wert für $url übergeben?
      if ($url) {

        // Prüfe ob es sich um eine URL handelt, dann weiter
        if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
        }
        // Ist es eine Mediendatei?
        if (file_exists(rex_path::media($url)) === true) {
           $url = rex_url::media($url);
        } 

        else {
            // Ist es keine Mediendatei oder URL, dann als Redaxo-Artikel-ID behandeln
                if (filter_var($url, FILTER_VALIDATE_URL) === FALSE and is_numeric($url)) {
                $url = rex_getUrl($url);
            }
        }
        $link = $url;
        return $link; 
    }

      }
    }

Im Video-AddOn ist es noch ausführlicher mit Erkennung von Youtube und Vimeo-Links ;-)

joachimdoerr commented 5 years ago

Es wäre schon sinnvoll eine solche Methode in MForm bereit zu stellen.

tema-web commented 5 years ago

Ja, denke ich auch. Thomas Lösung funktioniert auch nicht ganz sicher. is_numeric würde bei Artikel-Id und Tel-Nummern true liefern. Und wenn FILTER_VALIDATE_URL false liefert kann trotzdem eine externe URL übergeben worden sein, bei der kein http(s):// dabei ist.

skerbis commented 5 years ago

@tema-web das ist nur ein kurzes Beispiel. Ist entstanden bevor tel. und mail dazu gekommen sind. Telefonnummern sind übrigens korrekt geschrieben nicht numerisch

tema-web commented 5 years ago

@skerbis ja, aber ich traue den Redakteuren nicht ;-)

skerbis commented 5 years ago

Gut, dann brauchst du ne Validierung direkt im Widget. Wie oben beschrieben, wird das Widget unterschiedlich verwendet. Ich nutze es ja z.B. um URLs der Videodienste zu erkennen, andere für wiederum andere Zwecke z.b. individuelle Aufrufe zu erzeugen. Eine Hilfsmethode wie diese ist halt eine Möglichkeit es severseitig zu erkennen und zu verarbeiten. Der Typ müsste aber per JS validiert werden, denke ich.

tema-web commented 5 years ago

Eine Validierung direkt im Widget geht in meinen Augen zu weit. Ich denke, es würde ausreichen, wenn das Widget den Typ des Links mit übergibt (das "weiß" das Widget ja durch den Klick auf den entsprechenden Button). Was dann wie validiert wird kann/sollte jeder bei der Ausgabe selber einstellen können. Aber so weiß man zumindest, was da ankommen sollte, um es dann entsprechend validieren zu können.

joachimdoerr commented 5 years ago

Das problem dabei ist das dann unter umständen 2 REX_VALUES belegt werden. Ggf. kann man das aber dann mit einem JSON-String lösen.

tema-web commented 5 years ago

Jo, das war meine Idee. Zwei REX_VALUES finde ich auch zu problematisch. Wenn ein JSON-String gespeichert wird geht allerdings die Abwärtskompatibilität flöten. Auch nicht unbedingt schön :-(

skerbis commented 5 years ago

Bitte optional als mode

joachimdoerr commented 4 years ago

Ich würde das eher nicht machen wollen. Gerne als PM sonst close.

joachimdoerr commented 4 years ago

Kein Feedback, keiner will es machen -> close.