Ergebnis 1 bis 11 von 11

Thema: Einzelne DCA Felder via Javascript "manipulieren" - Zählen der Zeichen

  1. #1
    Contao-Fan
    Registriert seit
    21.12.2009.
    Beiträge
    445

    Standard Einzelne DCA Felder via Javascript "manipulieren" - Zählen der Zeichen

    Hallöchen zusammen,

    ich würde gerne DCA-Felder im Backend, also ein Textfeld oder eine Textarea via Javascript ansprechend um die durch den Backend-User eingegebene Anzahl der Zeichen zu erfassen und z.B bei 140 Zeichen eine Meldung auszugeben. Dafür habe ich im großen und ganzen auch schon eine Idee - aber ich scheitere im Moment schon daran ein benutzerdefiniertes JavaScript einzubinden.

    Ich versuche zunächst in der config.php folgendes:

    PHP-Code:
    $GLOBALS['TL_HOOKS']['parseBackendTemplate'][] = array('Projekt\Backend\Hooks''addScripts'); 
    In der Methode addScripts passiert dann folgendes:

    PHP-Code:
    $GLOBALS['TL_JAVASCRIPT'][] = 'system/modules/projekt/assets/js/inputCount.js'
    Jetzt habe ich das Problem, dass meine JS Datei lediglich direkt nach dem Backend-Login eingebaut wird. Sobald ich wo anders hin klicke, wird die JS-Datei nicht mehr im <head> eingebaut.

    Ist diese Vorgehensweise total Blödsinn? Oder mach ich einfach nur was falsch?
    Ich wäre euch sehr dankbar für ein paar Tips

    Aso - und wenn zufällig jemand einen Workaround zum Einsatz von JQuery im Backend unter 3.5 hat - dann wäre ich sehr an einer Info interessiert

    Danke schon mal...
    Viele Grüße aus dem Süden
    creativx
    ---- Planung ist Ersatz des Zufalls durch den Irrtum ----

  2. #2
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Wenn du die Felder in einer bestimmten Maske brauchst, befindest du dich zu dem Zeitpunkt ja auch in irgendeiner Tabelle. Schau doch einfach mal welche Parameter du in der Adresszeile hast, wenn dieses Feld sichtbar ist, welches du manipulieren möchtest.

    Dann fügst du in deine .config Datei einfach sowas in der Art ein


    PHP-Code:

    if(\Input::get('table') == 'tl_meinModulname' && \Input::get('id') >0)
    {
    $GLOBALS['TL_JAVASCRIPT'][] = 'system/modules/projekt/assets/js/inputCount.js';  

    Damit dürfte das Javascript nur innerhalb eines Datensatzes geladen werden :-)
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  3. #3
    Contao-Fan
    Registriert seit
    21.12.2009.
    Beiträge
    445

    Standard

    Hey - perfekt. Das ist sicherlich ne einfachere Lösung. Danke Dir !

    Jetzt muss ich nur noch ne Möglichkeit finden, wie ich im Backend Jquery ausführen kann. Irgendwie steht ich da jetzt auch auf dem Schlauch. noConflict ist klar - aber ich weiß nicht wie ich den wirksam einbauen soll. Hast du ne Idee?
    Viele Grüße aus dem Süden
    creativx
    ---- Planung ist Ersatz des Zufalls durch den Irrtum ----

  4. #4
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Na was hast du denn aktuell in deiner eingebundenen js Datei drin stehen?

    HTML-Code:
    (function ($) {
       $(document).ready(function () {
         // Dein jQueryCode
       });
    })(jQuery);
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  5. #5
    Contao-Fan
    Registriert seit
    21.12.2009.
    Beiträge
    445

    Standard

    Also in der JS Datei habe ich versucht eine Funktion zu implementieren:

    Code:
    /**
     * Input Count
     */
    
    $.noConflict();
    
    ( function ( $ ) {
    
        $.fn.eghInputcount = function ( options ) {
    
            // Settings
            var settings = $.extend( {
    
                numberChats     : 100,
                errorMessage    : 'Die maximale Zeichenanzahl ist erreicht.'
    
            }, options || {});
    
            countChars(this);
    
    
            /**
             * count Charts
             * @param object
             */
            function countChars( object ) {
    
                object.keyup(function() {
                    // Count
                    // var inputLength=$(this).length;
                    var input = object.val().length;
    
                    // Controll Lengt
                    if ( input >= 140 ) {
                        // Alert
                        alert('Bitte verwenden Sie nicht mehr wie 140 Zeichen!');
                    }
                });
            }
    
        }
    
    }) ( jQuery );

    Und dann wird quasi wenn die Funktion aufgerufen werden soll, folgendes ins HTML Injected:

    Code:
    <script type="text/javascript">
        jQuery( document ).ready(function() {
    
            $('#ctrl_ce_egh_plaintext').eghInputcount({
            });
    
        });
    </script>
    Das ganze ist noch nicht ganz fertig programmiert, aber ich wollte einfach mal erst schauen ob mein gedachter Weg überhaupt funktioniert.

    Ne Idee?
    Viele Grüße aus dem Süden
    creativx
    ---- Planung ist Ersatz des Zufalls durch den Irrtum ----

  6. #6
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Probier doch erstmal was einfaches aus, einfach ein Element selektieren und die Farbe ändern oder so, bevor du hier einen riesen Code einfügst, bei dem viel schief gehen kann.


    Außerdem wäre es sinnvoller das Feld einfach auf 140 Zeichen zu beschränken als eine Ausgabe zu machen. Er kann ja eh nicht mehr eingeben als die 140 Zeichen, weil bei 140 Zeichen eh ständig das Alertfenster öffnet.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  7. #7
    Contao-Fan
    Registriert seit
    21.12.2009.
    Beiträge
    445

    Standard

    Ah siehst, jetzt funzt es.

    Code:
    <script>
     
    var $j = jQuery.noConflict();
    // $j is now an alias to the jQuery function; creating the new alias is optional.
     
    $j(document).ready(function() {
        $j( "div" ).hide();
    });
    Jetzt kann ich mal am Rest mich versuchen - mal schauen Das ganze muss so "komfortabel" sein, weil der Redakteur doof ist
    Viele Grüße aus dem Süden
    creativx
    ---- Planung ist Ersatz des Zufalls durch den Irrtum ----

  8. #8
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich binde meine eigenen Sachen so ins BE ein. In der system/config/initconfig.php
    PHP-Code:
    /* Some extra BE CSS and JS */
    if(TL_MODE == 'BE')
    {
      
    $GLOBALS['TL_CSS'][]        = 'files/css/_my_be.css';
      
    $GLOBALS['TL_JAVASCRIPT'][] = 'files/js/_my_be.js';

    Ich würde an deiner Stelle kein jQuery ins BE bringen. MooTools ist sehr einfach. Schau dir die Doku an https://mootools.net/core/docs/1.6.0 (1.5.2 im Contao Core). Vor allem, wenn du nur so ein paar einfache eigene Zeilen aufsetzen möchtest. Ist sogar einfacher als jQuery.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  9. #9
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Die Einbindungsmethode und auch initconfig sind in diesem Fall aber nicht richtig.
    Wenn er sein eigene Erweiterung hat, kann er es auch sauber in seine config.php einbinden

    Und nur die Abfrage TL_MODE == 'BE' würde das Script die ganze Zeit im Backend einbinden. Daher ist eine punktgenaue Einbindung wesentlich besser.

    Und jquery im Backend ist überhaupt kein Problem, hab ich mehrfach im Einsatz.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  10. #10
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Doch, die Einbindung ist richtig.

    Habe nichts von einer Erweiterung gelesen, wenn es ne Erweiterung ist, gehört es natürlich in die Dateien dort.

    Diese paar Zeilen JS dürften im BE nichts ausmachen. Mit |static kann man sie auch noch in die kombinierte JS inkluden. Wenn man zielgenau einbindet dann kein |static verwenden.

    Die core.js https://github.com/contao/core/blob/...ncompressed.js und Theme JS https://github.com/contao/core/blob/...t/src/hover.js werden auch immer komplett über die kombinierte JS geladen und nicht zielgenau. IMHO ist so eine Spezifizierung hier nicht nötig.

    Nein, jQuery im BE ist kein Problem aber unnötiger Overhead.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  11. #11
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Er will einen Hook in einer config.php registrieren, also muss hier zwangsläufig eine eigene Erweiterung vorliegen.

    Die core.js und Theme JS sind jedoch in mehrfacher Benutzung, so dass eine globale Einbindung schon sinn macht. Da haben wir wohl unterschiedliche Ansichten. Ich würde punktgenau einbinden (vielleicht tatsächlich ohne |static) und auch jquery würde sich punktgenau einbinden lassen. Ich würde es jedenfalls vorziehen anstatt mich mit mootools zu beschäftigen.
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •