Package | system.web |
---|---|
Inheritance | class CArrayDataProvider » CDataProvider » CComponent |
Implements | IDataProvider |
Since | 1.1.4 |
Source Code | framework/web/CArrayDataProvider.php |
$rawData=Yii::app()->db->createCommand('SELECT * FROM tbl_user')->queryAll(); // or using: $rawData=User::model()->findAll(); $dataProvider=new CArrayDataProvider($rawData, array( 'id'=>'user', 'sort'=>array( 'attributes'=>array( 'id', 'username', 'email', ), ), 'pagination'=>array( 'pageSize'=>10, ), )); // $dataProvider->getData() will return a list of arrays.
Property | Type | Description | Defined By |
---|---|---|---|
caseSensitiveSort | boolean | controls how sorting works. | CArrayDataProvider |
data | array | Returns the data items currently available. | CDataProvider |
id | string | Returns the ID that uniquely identifies the data provider. | CDataProvider |
itemCount | integer | Returns the number of data items in the current page. | CDataProvider |
keyField | string | the name of the key field. | CArrayDataProvider |
keys | array | Returns the key values associated with the data items. | CDataProvider |
pagination | CPagination|false | Returns the pagination object. | CDataProvider |
rawData | array | the data that is not paginated or sorted. | CArrayDataProvider |
sort | CSort|false | Returns the sort object. | CDataProvider |
totalItemCount | integer | Returns the total number of data items. | CDataProvider |
Method | Description | Defined By |
---|---|---|
__call() | Calls the named method which is not a class method. | CComponent |
__construct() | Constructor. | CArrayDataProvider |
__get() | Returns a property value, an event handler list or a behavior based on its name. | CComponent |
__isset() | Checks if a property value is null. | CComponent |
__set() | Sets value of a component property. | CComponent |
__unset() | Sets a component property to be null. | CComponent |
asa() | Returns the named behavior object. | CComponent |
attachBehavior() | Attaches a behavior to this component. | CComponent |
attachBehaviors() | Attaches a list of behaviors to the component. | CComponent |
attachEventHandler() | Attaches an event handler to an event. | CComponent |
canGetProperty() | Determines whether a property can be read. | CComponent |
canSetProperty() | Determines whether a property can be set. | CComponent |
detachBehavior() | Detaches a behavior from the component. | CComponent |
detachBehaviors() | Detaches all behaviors from the component. | CComponent |
detachEventHandler() | Detaches an existing event handler. | CComponent |
disableBehavior() | Disables an attached behavior. | CComponent |
disableBehaviors() | Disables all behaviors attached to this component. | CComponent |
enableBehavior() | Enables an attached behavior. | CComponent |
enableBehaviors() | Enables all behaviors attached to this component. | CComponent |
evaluateExpression() | Evaluates a PHP expression or callback under the context of this component. | CComponent |
getData() | Returns the data items currently available. | CDataProvider |
getEventHandlers() | Returns the list of attached event handlers for an event. | CComponent |
getId() | Returns the ID that uniquely identifies the data provider. | CDataProvider |
getItemCount() | Returns the number of data items in the current page. | CDataProvider |
getKeys() | Returns the key values associated with the data items. | CDataProvider |
getPagination() | Returns the pagination object. | CDataProvider |
getSort() | Returns the sort object. | CDataProvider |
getTotalItemCount() | Returns the total number of data items. | CDataProvider |
hasEvent() | Determines whether an event is defined. | CComponent |
hasEventHandler() | Checks whether the named event has attached handlers. | CComponent |
hasProperty() | Determines whether a property is defined. | CComponent |
raiseEvent() | Raises an event. | CComponent |
setData() | Sets the data items for this provider. | CDataProvider |
setId() | Sets the provider ID. | CDataProvider |
setKeys() | Sets the data item keys for this provider. | CDataProvider |
setPagination() | Sets the pagination for this data provider. | CDataProvider |
setSort() | Sets the sorting for this data provider. | CDataProvider |
setTotalItemCount() | Sets the total number of data items. | CDataProvider |
Method | Description | Defined By |
---|---|---|
calculateTotalItemCount() | Calculates the total number of data items. | CArrayDataProvider |
fetchData() | Fetches the data from the persistent data storage. | CArrayDataProvider |
fetchKeys() | Fetches the data item keys from the persistent data storage. | CArrayDataProvider |
getSortDirections() | Converts the "ORDER BY" clause into an array representing the sorting directions. | CArrayDataProvider |
getSortingFieldValue() | Get field for sorting, using dot like delimiter in query. | CArrayDataProvider |
sortData() | Sorts the raw data according to the specified sorting instructions. | CArrayDataProvider |
public boolean $caseSensitiveSort;
controls how sorting works. True value means that case will be taken into account. False value will lead to the case insensitive sort. Default value is true.
public string $keyField;
the name of the key field. This is a field that uniquely identifies a data record. In database this would be the primary key. Defaults to 'id'. If it's set to false, keys of rawData array are used.
public array $rawData;
the data that is not paginated or sorted. When pagination is enabled, this property usually contains more elements than data. The array elements must use zero-based integer keys.
public void __construct(array $rawData, array $config=array ( )) | ||
$rawData | array | the data that is not paginated or sorted. The array elements must use zero-based integer keys. |
$config | array | configuration (name=>value) to be applied as the initial property values of this class. |
public function __construct($rawData,$config=array())
{
$this->rawData=$rawData;
foreach($config as $key=>$value)
$this->$key=$value;
}
Constructor.
protected integer calculateTotalItemCount() | ||
{return} | integer | the total number of data items. |
protected function calculateTotalItemCount()
{
return count($this->rawData);
}
Calculates the total number of data items. This method simply returns the number of elements in rawData.
protected array fetchData() | ||
{return} | array | list of data items |
protected function fetchData()
{
if(($sort=$this->getSort())!==false && ($order=$sort->getOrderBy())!='')
$this->sortData($this->getSortDirections($order));
if(($pagination=$this->getPagination())!==false)
{
$pagination->setItemCount($this->getTotalItemCount());
return array_slice($this->rawData, $pagination->getOffset(), $pagination->getLimit());
}
else
return $this->rawData;
}
Fetches the data from the persistent data storage.
protected array fetchKeys() | ||
{return} | array | list of data item keys. |
protected function fetchKeys()
{
if($this->keyField===false)
return array_keys($this->rawData);
$keys=array();
foreach($this->getData() as $i=>$data)
$keys[$i]=is_object($data) ? $data->{$this->keyField} : $data[$this->keyField];
return $keys;
}
Fetches the data item keys from the persistent data storage.
protected array getSortDirections(string $order) | ||
$order | string | the "ORDER BY" clause. |
{return} | array | the sorting directions (field name => whether it is descending sort) |
protected function getSortDirections($order)
{
$segs=explode(',',$order);
$directions=array();
foreach($segs as $seg)
{
if(preg_match('/(.*?)(\s+(desc|asc))?$/i',trim($seg),$matches))
$directions[$matches[1]]=isset($matches[3]) && !strcasecmp($matches[3],'desc');
else
$directions[trim($seg)]=false;
}
return $directions;
}
Converts the "ORDER BY" clause into an array representing the sorting directions.
protected mixed getSortingFieldValue(mixed $data, array $fields) | ||
$data | mixed | array or object |
$fields | array | sorting fields in $data |
{return} | mixed | $data sorting field value |
protected function getSortingFieldValue($data, $fields)
{
if(is_object($data))
{
foreach($fields as $field)
$data=isset($data->$field) ? $data->$field : null;
}
else
{
foreach($fields as $field)
$data=isset($data[$field]) ? $data[$field] : null;
}
return $this->caseSensitiveSort ? $data : mb_strtolower($data,Yii::app()->charset);
}
Get field for sorting, using dot like delimiter in query.
protected void sortData(array $directions) | ||
$directions | array | the sorting directions (field name => whether it is descending sort) |
protected function sortData($directions)
{
if(empty($directions))
return;
$args=array();
$dummy=array();
foreach($directions as $name=>$descending)
{
$column=array();
$fields_array=preg_split('/\.+/',$name,-1,PREG_SPLIT_NO_EMPTY);
foreach($this->rawData as $index=>$data)
$column[$index]=$this->getSortingFieldValue($data, $fields_array);
$args[]=&$column;
$dummy[]=&$column;
unset($column);
$direction=$descending ? SORT_DESC : SORT_ASC;
$args[]=&$direction;
$dummy[]=&$direction;
unset($direction);
}
$args[]=&$this->rawData;
call_user_func_array('array_multisort', $args);
}
Sorts the raw data according to the specified sorting instructions. After calling this method, rawData will be modified.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CArrayDataProvider