2016-03-30 38 views
5

Ho un DataObject in ModelAdmin con i seguenti campi:Come mostrare dinamicamente/nascondere campo in SilverStripe ModelAdmin

class NavGroup extends DataObject { 

    private static $db = array(
     'GroupType' => 'Enum("Standard,NotStandard","Standard")', 
     'NumberOfBlocks' => 'Int' 
    ); 

    public function getCMSFields() { 
     $groupTypeOptions = singleton('NavGroup')->dbObject('GroupType')->enumValues(); 
     $fields = parent::getCMSFields(); 
     $fields->addFieldToTab('Root.Main', new Dropdownfield('GroupType', 'Group Type', $groupTypeOptions)); 
     $fields->addFieldToTab('Root.Main', new Numericfield('NumberOfBlocks', 'Number of Blocks')); 
     return $fields; 
    } 
} 

Se GroupType == "Standard" voglio il campo NumberOfBlocks per nascondere automaticamente in modo che sia nascosto all'utente. Questo dovrebbe accadere in modo dinamico.

Questa funzionalità è disponibile in SilverStripe o devo aggiungere un codice JavaScript personalizzato?

+0

Questa non è una funzione principale, ma Unclecheese ha creato un modulo 'Display Logic' che risolverà questo per voi: https://github.com/unclecheese/silverstripe-display-logic – colymba

risposta

4

È necessario utilizzare il modulo DisplayLogic ...

https://github.com/unclecheese/silverstripe-display-logic

Allora la vostra funzione può essere scritta come ...

public function getCMSFields() { 
    $fields = parent::getCMSFields(); 

    $fields->addFieldsToTab('Root.Main',array(
     Dropdownfield::create('GroupType', 'Group Type', singleton('NavGroup')->dbObject('GroupType')->enumValues())), 
     Numericfield::create('NumberOfBlocks', 'Number of Blocks') 
      ->displayIf('GroupType')->isEqualTo('Standard') 
    )); 

    return $fields; 
} 
+0

@BaronGrivet - Questa soluzione funziona per tu? – 3dgoo

1

Ogni richiesta di getCMSFields() utilizza state oggetto corrente, in modo da per questi casi si può fare semplicemente if statement:

public function getCMSFields() { 
    $groupTypeOptions = singleton('NavGroup')->dbObject('GroupType')->enumValues(); 
    $fields = parent::getCMSFields(); 
    $fields->addFieldToTab('Root.Main', new Dropdownfield('GroupType', 'Group Type', $groupTypeOptions)); 

    if ($this->GroupType === 'Standard') { 
     $fields->addFieldToTab('Root.Main', new Numericfield('NumberOfBlocks', 'Number of Blocks')); 
    } else { 
     $fields->addFieldToTab('Root.Main', new HiddenField('NumberOfBlocks', $this->NumberOfBlocks); 
    } 
    return $fields; 
} 

Tuttavia, la modifica di GroupType non aggiornerà i campi e sarà necessario salvare il modulo per attivare l'aggiornamento. Il modulo unclecheese/silverstripe-display-logic risolve questo problema.

Problemi correlati