Contao-Camp 2024
Ergebnis 1 bis 3 von 3

Thema: Freigabefelder definieren / hinzufügen

  1. #1
    Gesperrt
    Registriert seit
    02.11.2012.
    Beiträge
    52

    Standard Freigabefelder definieren / hinzufügen

    Hallo Leute,

    ich versuche Momentan eine Freigabefunktion in MetaModels zu integrieren. Es handelt sich dabei aber nicht um die Veröffentlichen-Funktion.
    Undzwar muss im Backend eine Auflistung von Benutzern einer Gruppe stattfinden.
    Jeder Benutzer wird dann als Checkbox auf der Backend bearbeiten Seite angezeigt. Wenn man als einer von diesen angemeldet ist, ist nur die eigene Checkbox aktivier- / deaktivierbar. Die anderen sind disabled.
    Das ganze soll weitesgehend dynamisch sein. Also wenn sich ein Benutzer der Gruppe anschließt soll auch bei der Pflege im Backend dieser in der Auflistung sein. Die nötigen field options für Contao habe ich bereits. Auch die Funktion steht und wird aktuell für die Newsartikel verwendet:
    PHP-Code:
    $objMember $this->Database->execute("SELECT * FROM tl_user WHERE disable!=1 ORDER BY username");

            while (
    $objMember->next())
            {
              
    $arrMemberGroups deserialize($objMember->groups);
              if(
    in_array(2$arrMemberGroups))
              {
                
    //$GLOBALS['TL_DCA']['tl_news']['palettes']['default'] .= ',user'.$objMember->id;
                
                
    $GLOBALS['TL_DCA']['tl_news']['fields']['user'.$objMember->id]['label'] = array($objMember->name,'');
                
    $GLOBALS['TL_DCA']['tl_news']['fields']['user'.$objMember->id]['inputType'] = 'checkbox';
                
    $GLOBALS['TL_DCA']['tl_news']['fields']['user'.$objMember->id]['sql'] = "char(1) NOT NULL default ''";
                
    $disable true;
                if(
    BackendUser::getInstance()->id == $objMember->id$disable false;
                
    $GLOBALS['TL_DCA']['tl_news']['fields']['user'.$objMember->id]['eval']['disabled'] = $disable;
                
    $GLOBALS['TL_DCA']['tl_news']['fields']['user'.$objMember->id]['eval']['doNotCopy'] = true;
              }
              
    $GLOBALS['TL_DCA']['tl_news']['palettes']['default'] .= ',user'.$objMember->id;
            } 
    Das ganze soll dann in etwa so aussehen:
    Beitrag ID 13 bearbeiten - Contao Open Source CMS 3..png

    Das ganze hat dann den Sinn, dass nur die Einträge später ausgegeben werden die von mindestens 2 Benutzern kontrolliert und freigegeben wurden.

    Für mögliche Lösungsansätze wäre ich sehr dankbar!


    Nachtrag
    #############

    Eventuell kann man das auch über einen onload_callback lösen?!
    Bloß wo muss dieser dann eingebunden werden?
    Geändert von qf_rigo (17.06.2014 um 12:02 Uhr)

  2. #2
    Gesperrt
    Registriert seit
    02.11.2012.
    Beiträge
    52

    Standard

    Hallo,

    mittlerweile habe ich eine Lösung gefunden.
    Meine Funktion habe ich in den MetaModelDcaBuilder von MetaModels geschrieben und die Ausgabe funktioniert auch wunderbar.
    Auch das Speichern der Werte in die Datenbank. Was jetzt nur noch nicht klappt ist das ankreuzen der Checkboxen.
    Wenn ich also eine Checkbox anhacke und dann speichere wird der Wert in der Datenbank auf 1 gesetzt.
    Dann prüfe ich beim erneuten Zusammenbaun des DCAs welcher Wert drin steht. Wenn der 1 ist dann sollte soetws wie:
    PHP-Code:
                    $GLOBALS['TL_DCA'][$a]['fields']['user'.$objMember->id]['default'] = true;
                    
    $GLOBALS['TL_DCA'][$a]['fields']['user'.$objMember->id]['checked'] = true
    erzeugt werden welches die Checkbox als checked ausgibt.
    $a ist die Tabelle und user$obj... die ID - Das passt alles soweit.

    Welcher DCA Field setting Befehl setzt also eine Checkbox auf checked?
    default und checked funktionieren bei mir aktuelle nicht.

    Meine übrige Konfiguration für die DCA Checkbox sieht so aus:
    PHP-Code:
                $GLOBALS['TL_DCA'][$a]['fields']['user'.$objMember->id]['label'] = array($objMember->name,''); 
                
    $GLOBALS['TL_DCA'][$a]['fields']['user'.$objMember->id]['inputType'] = 'checkbox'
                
    $GLOBALS['TL_DCA'][$a]['fields']['user'.$objMember->id]['eval']['disabled'] = $disable
                
    $GLOBALS['TL_DCA'][$a]['fields']['user'.$objMember->id]['eval']['doNotCopy'] = true
    Das disable der Checkbox funktioniert ja auch...

    Danke für euer Feedback

  3. #3
    Gesperrt
    Registriert seit
    02.11.2012.
    Beiträge
    52

    Standard

    Hab die Lösung gefunden. Musste dazu nur noch die CheckBox.php vom Contao-DCA bearbeiten. Eine etwas tiefergehende Änderung aber so gehts ohne Probleme.

    Thema kann geschlossen werden

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
  •