PHP Class Prado\Web\UI\WebControls\TRepeater
TRepeater displays its content repeatedly based on the data fetched from
{@link setDataSource DataSource}.
The repeated contents in TRepeater are called items, which are controls and
can be accessed through {@link getItems Items}. When {@link dataBind()} is invoked,
TRepeater creates an item for each row of data and binds the data row to the item.
Optionally, a repeater can have a header, a footer and/or separators between items.
The layout of the repeated contents are specified by inline templates.
Repeater items, header, footer, etc. are being instantiated with the corresponding
templates when data is being bound to the repeater.
Since v3.1.0, the layout can also be specified by renderers. A renderer is a control class
that can be instantiated as repeater items, header, etc. A renderer can thus be viewed
as an external template (in fact, it can also be non-templated controls).
A renderer can be any control class.
- If the class implements {@link \Prado\IDataRenderer}, the
Data
property will be set as the data row during databinding. Many PRADO controls
implement this interface, such as {@link TLabel}, {@link TTextBox}, etc.
- If the class implements {@link IItemDataRenderer}, the
ItemIndex property will be set
as the zero-based index of the item in the repeater item collection, and
the
ItemType property as the item's type (such as TListItemType::Item).
{@link TRepeaterItemRenderer} may be used as the convenient base class which
already implements {@link IDataItemRenderer}.
The following properties are used to specify different types of template and renderer
for a repeater:
- {@link setItemTemplate ItemTemplate}, {@link setItemRenderer ItemRenderer}:
for each repeated row of data
- {@link setAlternatingItemTemplate AlternatingItemTemplate}, {@link setAlternatingItemRenderer AlternatingItemRenderer}:
for each alternating row of data. If not set, {@link setItemTemplate ItemTemplate} or {@link setItemRenderer ItemRenderer}
will be used instead.
- {@link setHeaderTemplate HeaderTemplate}, {@link setHeaderRenderer HeaderRenderer}:
for the repeater header.
- {@link setFooterTemplate FooterTemplate}, {@link setFooterRenderer FooterRenderer}:
for the repeater footer.
- {@link setSeparatorTemplate SeparatorTemplate}, {@link setSeparatorRenderer SeparatorRenderer}:
for content to be displayed between items.
- {@link setEmptyTemplate EmptyTemplate}, {@link setEmptyRenderer EmptyRenderer}:
used when data bound to the repeater is empty.
If a content type is defined with both a template and a renderer, the latter takes precedence.
When {@link dataBind()} is being called, TRepeater undergoes the following lifecycles for each row of data:
- create item based on templates or renderers
- set the row of data to the item
- raise {@link onItemCreated OnItemCreated}:
- add the item as a child control
- call dataBind() of the item
- raise {@link onItemDataBound OnItemDataBound}:
TRepeater raises an {@link onItemCommand OnItemCommand} whenever a button control
within some repeater item raises a
OnCommand event. Therefore,
you can handle all sorts of
OnCommand event in a central place by
writing an event handler for {@link onItemCommand OnItemCommand}.
When a page containing a repeater is post back, the repeater will restore automatically
all its contents, including items, header, footer and separators.
However, the data row associated with each item will not be recovered and become null.
To access the data, use one of the following ways:
- Use {@link getDataKeys DataKeys} to obtain the data key associated with
the specified repeater item and use the key to fetch the corresponding data
from some persistent storage such as DB.
- Save the whole dataset in viewstate, which will restore the dataset automatically upon postback.
Be aware though, if the size of your dataset is big, your page size will become big. Some
complex data may also have serializing problem if saved in viewstate.
Afficher le fichier
Open project: pradosoft/prado
Class Usage Examples
Méthodes publiques
Méthodes protégées
Méthode |
Description |
|
createEmptyContent ( ) |
Creates empty repeater content. |
|
createItem ( $itemIndex, $itemType ) : TControl |
Creates a repeater item instance based on the item type and index. |
|
getDataFieldValue ( $data, $field ) : mixed |
Returns the value of the data at the specified field. |
|
performDataBinding ( $data ) |
Performs databinding to populate repeater items from data source. |
|
restoreItemsFromViewState ( ) |
Creates repeater items based on viewstate information. |
|
Private Methods
Méthode |
Description |
|
createItemInternal ( $itemIndex, $itemType ) : TControl |
Creates a repeater item. |
|
createItemWithDataInternal ( $itemIndex, $itemType, $dataItem ) : TControl |
Creates a repeater item and performs databinding. |
|
Method Details
bubbleEvent()
public méthode
This method should only be used by control developers.
createEmptyContent()
protected méthode
Creates empty repeater content.
createItem()
protected méthode
Creates a repeater item instance based on the item type and index.
protected createItem ( $itemIndex, $itemType ) : TControl |
Résultat |
TControl |
created repeater item |
getAlternatingItemRenderer()
public méthode
getAlternatingItemTemplate()
public méthode
getDataFieldValue()
protected méthode
If data is an array, TMap or TList, the value will be returned at the index
of the specified field. If the data is a component with a property named
as the field name, the property value will be returned.
Otherwise, an exception will be raised.
getDataKeyField()
public méthode
getDataKeys()
public méthode
public getDataKeys ( ) : Prado\Collections\TList |
Résultat |
Prado\Collections\TList |
the keys used in the data listing control. |
getEmptyRenderer()
public méthode
getEmptyTemplate()
public méthode
public getEmptyTemplate ( ) : ITemplate |
Résultat |
ITemplate |
the template applied when no data is bound to the repeater |
getItemRenderer()
public méthode
getItemTemplate()
public méthode
public getItemTemplate ( ) : ITemplate |
Résultat |
ITemplate |
the template for repeater items |
getItems()
public méthode
public getItems ( ) : TRepeaterItemCollection |
Résultat |
TRepeaterItemCollection |
list of repeater item controls |
getSeparatorRenderer()
public méthode
getSeparatorTemplate()
public méthode
loadState()
public méthode
This method is invoked right after control state is loaded.
onItemCommand()
public méthode
This method is invoked after a button control in
a template raises OnCommand event.
The repeater control responsible for the event
can be determined from the event parameter.
The event parameter also contains the information about
the initial sender of the OnCommand event, command name
and command parameter.
You may override this method to provide customized event handling.
Be sure to call parent's implementation so that
event handlers have chance to respond to the event.
onItemCreated()
public méthode
This method is invoked after a repeater item is created and instantiated with
template, but before added to the page hierarchy.
The repeater item control responsible for the event
can be determined from the event parameter.
If you override this method, be sure to call parent's implementation
so that event handlers have chance to respond to the event.
onItemDataBound()
public méthode
This method is invoked right after an item is data bound.
The repeater item control responsible for the event
can be determined from the event parameter.
If you override this method, be sure to call parent's implementation
so that event handlers have chance to respond to the event.
This method overrides the parent implementation by rendering the body
content as the whole presentation of the repeater. Outer tag is not rendered.
Clears up all items in the repeater.
restoreItemsFromViewState()
protected méthode
Creates repeater items based on viewstate information.
saveState()
public méthode
This method is invoked right before control state is to be saved.
setAlternatingItemRenderer()
public méthode
If not empty, the class will be used to instantiate as alternative repeater items.
This property takes precedence over {@link getAlternatingItemTemplate AlternatingItemTemplate}.
setAlternatingItemTemplate()
public méthode
setDataKeyField()
public méthode
setEmptyRenderer()
public méthode
The empty renderer is created as the child of the repeater
if data bound to the repeater is empty.
This property takes precedence over {@link getEmptyTemplate EmptyTemplate}.
setEmptyTemplate()
public méthode
setItemRenderer()
public méthode
If not empty, the class will be used to instantiate as repeater items.
This property takes precedence over {@link getItemTemplate ItemTemplate}.
setItemTemplate()
public méthode
setSeparatorRenderer()
public méthode
If not empty, the class will be used to instantiate as repeater item separators.
This property takes precedence over {@link getSeparatorTemplate SeparatorTemplate}.
setSeparatorTemplate()
public méthode