[], $this) @ref данные см view * @param array $opts доп. параметры ['ob'] * bool 'ob' - форсировать использование буферизации вывода * @return static * @see Input::view() */ public function onView(callable $callback, array $opts = []) { $opts['callable'] = $callback; $this->onView = $opts; return $this; } /** * Генерация основного контента поля * @param array $data @ref данные * @return string HTML */ public function view(array &$data = []) { if ($this->noTitle) { $data['wrapper'] = ['colspan' => 2]; } $content = ''; static::obCallable($content, $this->onView, function($callable) use (& $data) { $_data = ['data' => &$data]; return call_user_func($callable, $_data, $this); }); return $content; } /** * Уканываем на необходимость объединить столбцы. (Не выводить столбец с заголовком) * @param bool $noTitle * @return $this */ public function noTitle($noTitle = true) { $this->noTitle = $noTitle; return $this; } /** * Определение функции для генерации значения заголовка * @param callable $callback функция * @param array $opts доп. параметры ['ob'] * bool 'ob' - форсировать использование буферизации вывода * @return static */ public function onTitle(callable $callback, array $opts = []) { $opts['callable'] = $callback; $this->onTitle = $opts; return $this; } /** * Получение значения заголовка * @return string */ public function title() { $content = ''; $result = static::obCallable($content, $this->onTitle, function($callable) { return call_user_func($callable, $this); }); if ($result !== false) { return $result; } return parent::title(); } /** * Определение функции для проверка значения или выполнения действий после сохранения * @param callable $callback функция * @return static */ public function onValidateAfter(callable $callback) { $this->onValidateAfter = $callback; return $this; } /** * Проверка значения или выполнение действий после сохранения (точно есть recordID) * @param bool $isInserted - была добавленна новая запись false - редактирование существующей * @param array $data ['saved' => &$saved, 'result' => &$result], 'saved' - сохраненные данные, 'result' - данные для обновления В БД */ public function validateAfter($isInserted, $data) { if (is_callable($this->onValidateAfter)) { call_user_func($this->onValidateAfter, $isInserted, $data, $this); } parent::validateAfter($isInserted, $data); } /** * Определение функции для формирования ajax урл * @param callable $callback функция * @return static */ public function onAjaxUrl(callable $callback) { $this->onAjaxUrl = $callback; return $this; } /** * Формирования ajax урл для вызова функции ajax из javascript * @param string $action название события * @return string */ public function ajaxUrl($action = '') { if (is_callable($this->onAjaxUrl)) { return call_user_func($this->onAjaxUrl, $action); } return parent::ajaxUrl($action); } /** * Определение функции для обработчика ajax запросов * @param callable $callback функция ($action, $this) * @return static */ public function onAjax(callable $callback) { $this->onAjax = $callback; return $this; } /** * Обработка ajax запросов * @return array|bool данные для ajax ответа */ public function ajax() { $act = $this->input->getpost($this->ajaxAction, TYPE_STR); if (is_callable($this->onAjax)) { return call_user_func($this->onAjax, $act, $this); } return parent::ajax(); } /** * Получить обработчик ajax запросов * @return callable|null */ public function getOnAjax() { return $this->onAjax; } /** * Определение функции для обработчика получения значения поля * @param callable $callback функция * @return static */ public function onGetValue(callable $callback) { $this->onGetValue = $callback; return $this; } /** * Получение значения поля * @param bool $lang только для указанного языка, если применимо * @return mixed */ public function value($lang = false) { if (is_callable($this->onGetValue)) { return call_user_func($this->onGetValue, $lang, $this); } return parent::value($lang); } }