Editable::init PHP Method

init() public method

initialization of widget
public init ( )
    public function init()
    {
        parent::init();
        if (!$this->name) {
            throw new CException('Parameter "name" should be provided for Editable widget');
        }
        /*
        If set this flag to true --> element content will stay empty 
        and value will be rendered to data-value attribute to apply autotext afterwards.
        */
        $this->_prepareToAutotext = self::isAutotext($this->options, $this->type);
        /*
        For `date` and `datetime` we need format to be on php side to make conversions.
        But we can not set default format as datepicker and combodate has different formats.
        So do it here:
        */
        if (!$this->format && $this->type == 'date') {
            $this->format = 'yyyy-mm-dd';
        }
        if (!$this->format && $this->type == 'datetime') {
            $this->format = 'yyyy-mm-dd hh:ii:ss';
        }
    }

Usage Example

 /**
  * initialization of widget
  *
  */
 public function init()
 {
     if (!$this->model) {
         throw new CException('Parameter "model" should be provided for EditableField');
     }
     if (!$this->attribute) {
         throw new CException('Parameter "attribute" should be provided for EditableField');
     }
     $originalModel = $this->model;
     $originalAttribute = $this->attribute;
     $originalText = strlen($this->text) ? $this->text : CHtml::value($this->model, $this->attribute);
     //if apply set manually to false --> just render text, no js plugin applied
     if ($this->apply === false) {
         $this->text = $originalText;
     } else {
         $this->apply = true;
     }
     //try to resolve related model (if attribute contains '.')
     $resolved = $this->resolveModels($this->model, $this->attribute);
     $this->model = $resolved['model'];
     $this->attribute = $resolved['attribute'];
     $this->staticModel = $resolved['staticModel'];
     $staticModel = $this->staticModel;
     $isMongo = $resolved['isMongo'];
     $isFormModel = $this->model instanceof CFormModel;
     //if real (related) model not exists --> just print text
     if (!$this->model) {
         $this->apply = false;
         $this->text = $originalText;
     }
     //for security reason only safe attributes can be editable (e.g. defined in rules of model)
     //just print text (see 'run' method)
     if (!$staticModel->isAttributeSafe($this->attribute)) {
         $this->apply = false;
         $this->text = $originalText;
     }
     /*
      try to detect type from metadata if not set
     */
     if ($this->type === null) {
         $this->type = 'text';
         if (!$isMongo && !$isFormModel && array_key_exists($this->attribute, $staticModel->tableSchema->columns)) {
             $dbType = $staticModel->tableSchema->columns[$this->attribute]->dbType;
             if ($dbType == 'date') {
                 $this->type = 'date';
             }
             if ($dbType == 'datetime') {
                 $this->type = 'datetime';
             }
             if (stripos($dbType, 'text') !== false) {
                 $this->type = 'textarea';
             }
         }
     }
     //name
     if (empty($this->name)) {
         $this->name = $isMongo ? $originalAttribute : $this->attribute;
     }
     //pk (for mongo takes pk from parent!)
     $pkModel = $isMongo ? $originalModel : $this->model;
     if (!$isFormModel) {
         if ($pkModel && !$pkModel->isNewRecord) {
             $this->pk = $pkModel->primaryKey;
         }
     } else {
         //formModel does not have pk, so set `send` option to `always` (send without pk)
         if (empty($this->send) && empty($this->options['send'])) {
             $this->send = 'always';
         }
     }
     parent::init();
     /*
      If text not defined, generate it from model attribute for types except lists ('select', 'checklist' etc)
      For lists keep it empty to apply autotext.
      $this->_prepareToAutotext calculated in parent class Editable.php
     */
     if (!strlen($this->text) && !$this->_prepareToAutotext) {
         $this->text = $originalText;
     }
     //set value directly for autotext generation
     if ($this->model && $this->_prepareToAutotext) {
         $this->value = CHtml::value($this->model, $this->attribute);
     }
     //generate title from attribute label
     if ($this->title === null) {
         $titles = array('Select' => array('select', 'date'), 'Check' => array('checklist'));
         $title = Yii::t('EditableField.editable', 'Enter');
         foreach ($titles as $t => $types) {
             if (in_array($this->type, $types)) {
                 $title = Yii::t('EditableField.editable', $t);
             }
         }
         $this->title = $title . ' ' . $staticModel->getAttributeLabel($this->attribute);
     } else {
         $this->title = strtr($this->title, array('{label}' => $staticModel->getAttributeLabel($this->attribute)));
     }
     //scenario
     if ($pkModel && !isset($this->params['scenario'])) {
         $this->params['scenario'] = $pkModel->getScenario();
     }
 }
All Usage Examples Of Editable::init