2012-04-13 2 views
0

Seltsame Frage, aber hier geht es. Ich möchte mehrere Beschriftungsfelder für ein Modell einrichten und dann zwischen ihnen wechseln. Was ich brauche, ist:Mehrere Etiketten in einem einzigen Modell - Yii

public function attributeLabels_1(){ 
    array(
      'line_1'=>'Authentication Number' 
    ) 
} 
public function attributeLabels_2(){ 
    array(
      'line_1'=>'Receipt Number' 
    ) 
} 

dies möglich ist, und wenn ja, wie würden Sie ändern, welche Array verwendet wird, wenn?

Vielen Dank.

Antwort

2

Ich erinnere mich nicht, wenn die Liste von attributeLabels() zurück irgendwo zwischengespeichert wird, wenn es nicht ist, dann sollte diese Arbeit:

/** implementation */ 

private $_currentLabelCollection = null; 

public function getCurrentLabelCollection() { 
    return $this->_currentLabelCollection; 
} 

public function setCurrentLabelCollection($value) { 
    if(!$value || array_key_exists($value, $this->_attributeLabelCollections)) { 
     $this->_currentLabelCollection = $value; 
    } else { 
     throw new CException(Yii::t("error", "Model {model} does not have a label collection named {key}.", array(
      '{model}' => get_class($this), 
      '{key}' => $value, 
     ))); 
    } 
} 

private $_attributeLabelCollections = array(
    'collection1' => array(
     'line_1' => 'Authentication Number', 
    ), 
    'collection2' => array(
     'line_1' => 'Receipt Number', 
    ), 
); 

public function attributeLabels() { 
    if($this->_currentLabelCollection) { 
     return $this->_attributeLabelCollections[$this->_currentLabelCollection]; 
    } else { 
     return reset($this->_attributeLabelCollections); 
    } 
} 

/** usage */ 

// use labels from 'collection2' 
$model->currentLabelCollection = 'collection2'; 

// use labels from the first defined collection 
$model->currentLabelCollection = null; 
+0

funktioniert perfekt .. Vielen Dank für die Hilfe –