columnName = $columnName; $this->label = $label; } /** * Specifies a list column rendering mode. Supported modes are: * - text - text column, aligned left * - number - numeric column, aligned right * @param string $type Specifies a render mode as described above */ public function displayAs($type, $config) { $this->type = strtolower($type) ?: $this->type; $this->config = $this->evalConfig($config); return $this; } /** * Process options and apply them to this object. * @param array $config * @return array */ protected function evalConfig($config) { if (isset($config['width'])) { $this->width = $config['width']; } if (isset($config['cssClass'])) { $this->cssClass = $config['cssClass']; } if (isset($config['searchable'])) { $this->searchable = $config['searchable']; } if (isset($config['sortable'])) { $this->sortable = $config['sortable']; } if (isset($config['clickable'])) { $this->clickable = $config['clickable']; } if (isset($config['invisible'])) { $this->invisible = $config['invisible']; } if (isset($config['valueFrom'])) { $this->valueFrom = $config['valueFrom']; } if (isset($config['default'])) { $this->defaults = $config['default']; } if (isset($config['select'])) { $this->sqlSelect = $config['select']; } if (isset($config['relation'])) { $this->relation = $config['relation']; } if (isset($config['format'])) { $this->format = $config['format']; } if (isset($config['path'])) { $this->path = $config['path']; } return $config; } /** * Returns a HTML valid name for the column name. * @return string */ public function getName() { return HtmlHelper::nameToId($this->columnName); } /** * Returns a value suitable for the column id property. * @param string $suffix Specify a suffix string * @return string */ public function getId($suffix = null) { $id = 'column'; $id .= '-'.$this->columnName; if ($suffix) { $id .= '-'.$suffix; } return HtmlHelper::nameToId($id); } /** * Returns this columns value from a supplied data set, which can be * an array or a model or another generic collection. * @param mixed $data * @param mixed $default * @return mixed */ public function getValueFromData($data, $default = null) { $columnName = $this->valueFrom ?: $this->columnName; return $this->getColumnNameFromData($columnName, $data, $default); } /** * Internal method to extract the value of a column name from a data set. * @param string $columnName * @param mixed $data * @param mixed $default * @return mixed */ protected function getColumnNameFromData($columnName, $data, $default = null) { /* * Array column name, eg: column[key][key2][key3] */ $keyParts = HtmlHelper::nameToArray($columnName); $result = $data; /* * Loop the column key parts and build a value. * To support relations only the last column should return the * relation value, all others will look up the relation object as normal. */ foreach ($keyParts as $key) { if ($result instanceof Model && $result->hasRelation($key)) { $result = $result->{$key}; } else { if (!isset($result->{$key})) { return $default; } $result = $result->{$key}; } } return $result; } }