Spec-Zone.ru › Yii 1.1

CArrayDataProvider

Пакет system.web
Наследование класс CArrayDataProvider » CDataProvider » CComponent
Реализует IDataProvider
С версии 1.1.4
Исходный код framework/web/CArrayDataProvider.php
CArrayDataProvider реализует поставщик данных на основе массива исходных данных.

Свойство rawData содержит все данные, которые могут быть отсортированы и/или постраничены. CArrayDataProvider предоставит данные после сортировки и/или постраничной разбивки. Вы можете настроить свойства sort и pagination для настройки поведения сортировки и постраничной разбивки.

Элементы в массиве исходных данных могут быть либо объектами (например, объектами модели), либо ассоциативными массивами (например, результатами запросов DAO). Убедитесь, что вы установили свойство keyField в имя поля, которое однозначно идентифицирует запись данных, или в false, если такого поля нет.

CArrayDataProvider можно использовать следующим образом:
$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.


Примечание: если вы хотите использовать функцию сортировки, вы должны настроить свойство sort, чтобы поставщик знал, по каким столбцам можно сортировать.

Свойства

Свойство Тип Описание Определено
caseSensitiveSort boolean управляет процессом сортировки. CArrayDataProvider
data массив Возвращает элементы данных, доступные в настоящее время. CDataProvider
id строка Возвращает идентификатор, который однозначно идентифицирует поставщик данных. CDataProvider
itemCount целое число Возвращает количество элементов данных на текущей странице. CDataProvider
keyField строка имя поля ключа. CArrayDataProvider
keys массив Возвращает значения ключей, связанные с элементами данных. CDataProvider
pagination CPagination|false Возвращает объект постраничной разбивки. CDataProvider
rawData массив данные, которые не постраничены и не отсортированы. CArrayDataProvider
sort CSort|false Возвращает объект сортировки. CDataProvider
totalItemCount целое число Возвращает общее количество элементов данных. CDataProvider

Публичные методы

Метод Описание Определено в
__call() Вызывает метод с указанным именем, который не является методом класса. CComponent
__construct() Конструктор. CArrayDataProvider
__get() Возвращает значение свойства, список обработчиков событий или поведение по его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
asa() Возвращает объект поведения с указанным именем. CComponent
attachBehavior() Присоединяет поведение к данному компоненту. CComponent
attachBehaviors() Присоединяет список поведений к компоненту. CComponent
attachEventHandler() Присоединяет обработчик событий к событию. CComponent
canGetProperty() Определяет, может ли свойство быть прочитано. CComponent
canSetProperty() Определяет, может ли свойство быть установлено. CComponent
detachBehavior() Отсоединяет поведение от компонента. CComponent
detachBehaviors() Отсоединяет все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующий обработчик событий. CComponent
disableBehavior() Отключает присоединенное поведение. CComponent
disableBehaviors() Отключает все присоединённые поведения этого компонента. CComponent
enableBehavior() Включает присоединённое поведение. CComponent
enableBehaviors() Включает все присоединённые поведения этого компонента. CComponent
evaluateExpression() Вычисляет выражение PHP или обратный вызов в контексте этого компонента. CComponent
getData() Возвращает элементы данных, которые в данный момент доступны. CDataProvider
getEventHandlers() Возвращает список присоединённых обработчиков событий для события. CComponent
getId() Возвращает идентификатор, уникально определяющий источник данных. CDataProvider
getItemCount() Возвращает количество элементов данных на текущей странице. CDataProvider
getKeys() Возвращает значения ключей, связанные с элементами данных. CDataProvider
getPagination() Возвращает объект постраничной навигации. CDataProvider
getSort() Возвращает объект сортировки. CDataProvider
getTotalItemCount() Возвращает общее количество элементов данных. CDataProvider
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли обработчики событий для данного события. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
raiseEvent() Вызывает событие. CComponent
setData() Устанавливает элементы данных для этого источника. CDataProvider
setId() Устанавливает идентификатор источника данных. CDataProvider
setKeys() Устанавливает ключи элементов данных для этого источника. CDataProvider
setPagination() Устанавливает постраничную навигацию для этого источника данных. CDataProvider
setSort() Устанавливает сортировку для этого источника данных. CDataProvider
setTotalItemCount() Устанавливает общее количество элементов данных. CDataProvider

Защищённые методы

Метод Описание Определено в
calculateTotalItemCount() Вычисляет общее количество элементов данных. CArrayDataProvider
fetchData() Извлекает данные из постоянного хранилища данных. CArrayDataProvider
fetchKeys() Извлекает ключи элементов данных из постоянного хранилища данных. CArrayDataProvider
getSortDirections() Преобразует запрос "ORDER BY" в массив, представляющий направления сортировки. CArrayDataProvider
getSortingFieldValue() Получение поля для сортировки, используя разделитель точки в запросе. CArrayDataProvider
sortData() Сортирует исходные данные в соответствии с указанными инструкциями по сортировке. CArrayDataProvider

Подробное описание свойств

caseSensitiveSort свойство (доступно с версии v1.1.13)

public boolean $caseSensitiveSort;

управляет тем, как работает сортировка. Значение true означает, что регистр учитывается. Значение false приведет к сортировке без учета регистра. По умолчанию значение true.

keyField свойство

public string $keyField;

имя поля ключа. Это поле, которое однозначно идентифицирует запись данных. В базе данных это будет первичный ключ. По умолчанию равно 'id'. Если установлено в false, используются ключи массива rawData.

rawData свойство

public array $rawData;

данные, которые не постраничены и не отсортированы. Когда включена постраничная навигация, это свойство обычно содержит больше элементов, чем data. Элементы массива должны использовать целочисленные ключи, начиная с нуля.

Подробное описание методов

__construct() метод

public void __construct(array $rawData, array $config=array ( ))
$rawData array данные, которые не постраничены и не отсортированы. Элементы массива должны использовать целочисленные ключи, начиная с нуля.
$config array конфигурация (имя=>значение), которая будет применена в качестве начальных значений свойств этого класса.
Исходный код: framework/web/CArrayDataProvider.php#76 (показать)
public function __construct($rawData,$config=array())
{
    
$this->rawData=$rawData;
    foreach(
$config as $key=>$value)
        
$this->$key=$value;
}

Конструктор.

calculateTotalItemCount() метод

protected integer calculateTotalItemCount()
{return} целое число общее количество элементов данных.
Исходный код: framework/web/CArrayDataProvider.php#120 (показать)
protected function calculateTotalItemCount()
{
    return 
count($this->rawData);
}

Вычисляет общее количество элементов данных. Этот метод просто возвращает количество элементов в rawData.

fetchData() метод

protected array fetchData()
{return} массив список элементов данных
Исходный код: framework/web/CArrayDataProvider.php#87 (показать)
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;
}

Извлекает данные из постоянного хранилища данных.

fetchKeys() метод

protected array fetchKeys()
{return} массив список ключей элементов данных.
Исходный код: framework/web/CArrayDataProvider.php#105 (показать)
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;
}

Извлекает ключи элементов данных из постоянного хранилища данных.

getSortDirections() метод

protected array getSortDirections(string $order)
$order строка запрос "ORDER BY".
{return} массив направления сортировки (имя поля => сортировка по убыванию)
Исходный код: framework/web/CArrayDataProvider.php#187 (показать)
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;
}

Преобразует запрос "ORDER BY" в массив, представляющий направления сортировки.

getSortingFieldValue() метод

protected mixed getSortingFieldValue(mixed $data, array $fields)
$data смешанный тип массив или объект
$fields массив поля сортировки в $data
{return} смешанный тип значение поля сортировки $data
Исходный код: framework/web/CArrayDataProvider.php#167 (показать)
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);
}

Получение поля для сортировки, используя разделитель типа точка в запросе.

sortData() метод

protected void sortData(array $directions)
$directions массив направления сортировки (имя поля => сортировка по убыванию)
Исходный код: framework/web/CArrayDataProvider.php#130 (показать)
protected function sortData($directions)
{
    if(empty(
$directions) || empty($this->rawData))
        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);
    }

    
// This fix is used for cases when main sorting specified by columns has equal values
    // Without it it will lead to Fatal Error: Nesting level too deep - recursive dependency?
    
$args[]=range(1,count($this->rawData));
    
$args[]=SORT_ASC;
    
$args[]=SORT_NUMERIC;

    
$args[]=&$this->rawData;
    
call_user_func_array('array_multisort', $args);
}

Сортирует исходные данные в соответствии с указанными инструкциями сортировки. После вызова этого метода rawData будет изменён.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CArrayDataProvider

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API