Ergebnis 1 bis 14 von 14

Thema: Checkbox ausblenden über DCA-Steuerung?

  1. #1
    Contao-Nutzer Avatar von itsBerni
    Registriert seit
    03.11.2010.
    Ort
    Oberfranken
    Beiträge
    103

    Standard Checkbox ausblenden über DCA-Steuerung?

    Hallo,

    steh hier gerade ein wenig auf dem Schlauch.
    Ich bin gerade dabei mein erstes Modul zu programmieren. Eingabefelder im BE extistieren, speichern funktioniert, FE ok - soweit so gut.
    Es geht darum, das verschiedene Kraftstoffe (Öl,Gas,Pellets) mit deren Parametern (Heizwert, Wirkungsgrad Preis etc.) eingegeben werden können.
    Nun soll es für Berechnungen im FE möglich sein, einen dieser Kraftstoffe als "Referenz" zu definieren. Dafür soll eine Checkbox "herhalten".

    Wie schaffe ich es jetzt, dass das Referenz-Checkboxfeld nur dann eingeblendet wird, wenn kein anderer Datensatz diese Checkbox aktiviert hat.
    Bzw. dass die Checkbox bei allen anderen Datensätzen ausgeblendet ist, sobald ein Datensatz als Referenz deklariert wurde.

    Für ein paar Denkanstöße wäre ich Euch super dankbar!

  2. #2
    Contao-Nutzer Avatar von david enke
    Registriert seit
    26.06.2009.
    Beiträge
    96

    Standard

    Ich bin mir zwar nicht ganz sicher was du meinst, aber sicherlich hilft dir der load_callback (http://www.contao.org/referenz.html#fields).

    Benutzt wird er zum Beispiel von den Content-Elementen (http://dev.contao.org/projects/typol...tl_content.php) beim Feld 'highlight' (Z. 382)

  3. #3
    Contao-Nutzer Avatar von itsBerni
    Registriert seit
    03.11.2010.
    Ort
    Oberfranken
    Beiträge
    103

    Standard

    Ich möchte, dass Heizkostenberechnungen z.B. auf Basis von Pellets im Vergleich zu Heizöl und Gas erstellt werden.
    Ich definiere z.B. den Datensatz "Pellets" als Referenzkraftstoff, indem ich bei einer Checkbox "Referenzkraftstoff" ein Häckchen setze.
    Jetzt soll natürlich mein Kunde nicht mehr in der Lage sein, bei Heizöl und Gas dieses Häckchen setzen zu können, da ja bereits der Kraftstoff "Pellets" als Referenz dient.

    An einen load_callback habe ich schon gedacht. Allerdings weis ich nicht, wie man ein Feld in Abhängigkeit eines Datenbankwertes ein - bzw. ausblenden kann. Da fehlt mir auch noch ein bisschen die Erfahrung mit Calllbacks.

    Ich danke Euch!

  4. #4
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.621
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Sprichst du jetzt von Frontend oder Backend? Im Backend ginge das wohl am einfachsten über ein onload_callback, und dann einfach die Felddefinition löschen.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  5. #5
    Contao-Nutzer Avatar von itsBerni
    Registriert seit
    03.11.2010.
    Ort
    Oberfranken
    Beiträge
    103

    Standard

    Hallo Andreas,
    ich spreche vom Backend. Das mit dem Callback hatte ich mir schon gedacht, nur weis ich nicht, wie ich es anstellen soll, dass ich das Feld ausgeblendet bekomme. Hast du da evtl. nen Tipp, wie ich das angehen könnte?
    Vielen Dank!

  6. #6
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.621
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    PHP-Code:
    unset($GLOBALS['TL_DCA']['tl_meinetabelle']['fields']['referenzkraftstoff']); 
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  7. #7
    Contao-Nutzer Avatar von itsBerni
    Registriert seit
    03.11.2010.
    Ort
    Oberfranken
    Beiträge
    103

    Standard

    Hallo Andreas,

    vielen Dank für Deine Hilfe.
    Ich hab´s hinbekommen. Allerdings muss ich´s trotzdem noch ein bisschen modifizieren, da nun beim Ändern (Deaktivieren) des Referenzkraftstoffes das Field "Referenz" in allen Datensätzen nicht mehr sichtbar ist.

  8. #8
    Contao-Urgestein
    Registriert seit
    07.07.2009.
    Beiträge
    4.107

    Standard

    Könntest du deinen Code vielleicht veröffentlichen?
    Ich stehe grade vor der selben Problematik und such auch schon wie wild..

  9. #9
    Contao-Nutzer Avatar von itsBerni
    Registriert seit
    03.11.2010.
    Ort
    Oberfranken
    Beiträge
    103

    Standard

    jep!

    PHP-Code:
    class tl_hs_kraftstoffe extends Backend
    {

        
    /**
         * Import the back end user object
         */
        
    public function __construct()
        {
            
    parent::__construct();
            
    $this->import('BackendUser''User');
        }  
        
        public function 
    getReference()
        {
            
    $id $this->Input->get('id');
            
    // Get Referenz Kraftstoff
            
    $objReferenz $this->Database->prepare("SELECT * FROM tl_hs_kraftstoffe WHERE id=?")
                                ->
    execute($id);
            while(
    $objReferenz->next())
            {
                if(
    $objReferenz->referenz != '1')
                {
                    unset(
    $GLOBALS['TL_DCA']['tl_hs_kraftstoffe']['fields']['referenz']);
                }
            }
                     
                    
        }

            

    Allerdings ist der Code wie gesagt noch nicht ganz korrekt. Man kann zwar nun keinen anderen Kraftstoff mehr als Referenz setzen, aber im Moment habe ich noch das Problem, dass das Feld bei jedem Datensatz weg ist, sobald ich das Häckchen der Referenz weggnehme.

  10. #10
    Contao-Nutzer Avatar von itsBerni
    Registriert seit
    03.11.2010.
    Ort
    Oberfranken
    Beiträge
    103

    Standard

    Hallo nochmal,

    jetzt habe ich die Lösung. Ich bin vom onload_callback abgekommen und habe das Problem über den save_callback gelöst.

    Die Funktion lautet nun so
    PHP-Code:
    public function deleteReference($var$dc)
        {
            
    // aktuelle Referenz aus Datenbank holen
            
    $objReferenz $this->Database->prepare("SELECT id FROM tl_hs_kraftstoffe WHERE referenz='1'")
                                ->
    execute();
            
    $referenzid $objReferenz->id;
            
    $aktuelleid $dc->id;
            
    // Sorgt dafür, dass mindestens immer eine Referenz gewählt ist
            
    if($referenzid == $aktuelleid)
            {
                return (
    1);
            }
            
    // Löscht beim Setzen der Checkbox die letzte Referenz und setzt sie neu
            
    if($var == 1)
            {
                if(
    $referenzid)
                {
                    
    $deleteReferenz $this->Database->prepare("UPDATE tl_hs_kraftstoffe SET referenz='0' WHERE id=$referenzid")
                                        ->
    execute();
                }
            }
            return 
    $var;
        } 
    Verbesserungsvorschläge nehme ich dankend an!
    Grüße

  11. #11
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.621
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hihi...

    Lass mal dein save_callback weg und mach ein Feld -> eval -> fallback = true;
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  12. #12
    Contao-Nutzer Avatar von itsBerni
    Registriert seit
    03.11.2010.
    Ort
    Oberfranken
    Beiträge
    103

    Standard

    Na super
    Frei nach dem Motto "Warum einfach, wenns auch umständlich geht".

    Vielen Dank, Andreas

  13. #13
    Contao-Urgestein Avatar von folkfreund
    Registriert seit
    09.04.2010.
    Beiträge
    1.928

    Standard

    Ich hab irgendwie das Problem noch nicht verstanden.

    Ist ja schön, dass es jetzt für euch klappt. Aber warum ausblenden? Die checkboxes sind doch wohl eher ein über das Formular verteileter Radiobutton? Es kann immer nur eine checkbox aktiv sein, die anderen werden automatisch inaktiv.
    Oder bin ich auf dem total falschen Dampfer?

  14. #14
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.621
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das ist das normale Fallback-Verhalten. Wenn eine Checkbox aktiviert wird, werden alle anderen deaktiviert.

    Erst war aber die Frage, die anderen Checkbox auszublenden. Ich dachte die "Fallback" dürfte nie mehr geändert werden.

    Edit: Generell kann ich dazu noch sagen: Wenn eine entsprechende Funktion im Core bereits enthalten ist (eben z.B. Fallback), dann immer forschen wie das dort gemacht ist - das ist meist die beste Lösung
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 10.01.2012, 13:39
  2. Antworten: 1
    Letzter Beitrag: 24.02.2011, 16:28
  3. Feld ausblenden über DCA
    Von rabele im Forum Sonstiges zu Contao
    Antworten: 2
    Letzter Beitrag: 13.11.2010, 11:07
  4. Steuerung Modul-Einblendung
    Von goisko im Forum Layout / Templates / Holy Grail
    Antworten: 7
    Letzter Beitrag: 08.10.2010, 11:53

Lesezeichen

Lesezeichen

Berechtigungen

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