[[0 => property(свойство обьекта), ... дополнительные * настройки]], ...[]] * */ public $attributes; /** * События * * События на которые должно срабатывать поведение. Задается ассоциативный массив, в котором ключ - событие * связанного обьекта, а значение - метод, который вызывается при этом событии * * @return array [key(event) => val(method)] * */ public function events() { return [ ActiveRecord::EVENT_BEFORE_INSERT => 'autocomplete', ActiveRecord::EVENT_BEFORE_UPDATE => 'autocomplete', ]; } /** * События * * События на которые должно срабатывать поведение. Задается ассоциативный массив, в котором ключ - событие * связанного обьекта, а значение - метод, который вызывается при этом событии * Доступные автозаполнения: * ['translit' => ['prop1', ... 'prop2']], * где prop - свойство подлежащее транслитерации * ['repeat' => [[string 'prop1', string 'target1', boolean 'skipFilled', int 'count', boolean 'truncate', string 'suffix'], ...[]], * где prop - свойство для преобразования, * target - свойство с которого взять данные, * count - число для преобразования, * skipFilled - пропустить непустые, * truncate - true - обрезать по словам, false - по символам, * suffix - суффикс, который добавить после обрезки * * @param mixed $event Yii обьект свойста https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/concept-events.md * */ public function autocomplete($event) { if(!empty($this->attributes['translit'])) { foreach($this->attributes['translit'] as $translit) { if($this->owner->hasAttribute($translit)) { $this->owner->$translit = Tools::translit($this->owner->$translit); } } } if(!empty($this->attributes['repeat'])) { foreach($this->attributes['repeat'] as $repeat) { if(is_array($repeat) && $this->owner->hasAttribute($repeat[0]) && $this->owner->hasAttribute($repeat[1]) && is_int($repeat[3]) && (empty($this->owner->$repeat[0]) || $repeat[2])) { $suffix = $repeat[5]?:''; $truncate = $repeat[4]?'truncateWords':'truncate'; $this->owner->$repeat[0] = StringHelper::$truncate($this->owner->$repeat[1], $repeat[3], $suffix); } } } } }