CTabView
| Пакет | system.web.widgets |
|---|---|
| Наследование | класс CTabView » CWidget » CBaseController » CComponent |
| С версии | 1.0 |
| Исходный код | framework/web/widgets/CTabView.php |
Одновременно видна только одна вкладка. Пользователи могут нажать на заголовок вкладки, чтобы перейти к другой вкладке с содержимым.
Переключение вкладок осуществляется с помощью JavaScript. Если JavaScript отключен, CTabView всё равно отображает содержимое соответствующим образом.
Для определения содержимого и структуры вкладок, настройте свойство tabs. Свойство tabs принимает массив, где идентификатор вкладки сопоставлен с определением вкладки. Каждое определение вкладки — это массив следующей структуры:
- title: заголовок вкладки.
- content: содержимое, которое будет отображаться на вкладке.
- view: имя представления, которое будет отображено на этой вкладке. Представление будет рендериться с помощью метода CController::renderPartial текущего контроллера. Если указаны как 'content', так и 'view', будет использоваться 'content'.
- url: URL, на который браузер пользователя будет перенаправлен при нажатии на эту вкладку.
- data: массив (имя=>значение), который будет передан представлению, когда указан параметр 'view'.
Например, свойство tabs можно настроить следующим образом,
$this->widget('CTabView', array(
'tabs'=>array(
'tab1'=>array(
'title'=>'tab 1 title',
'view'=>'view1',
'data'=>array('model'=>$model),
),
'tab2'=>array(
'title'=>'tab 2 title',
'url'=>'http://www.yiiframework.com/',
),
),
));
По умолчанию активной будет первая вкладка. Чтобы активировать другую вкладку при первоначальной загрузке страницы, установите activeTab в идентификатор нужной вкладки.
Свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| actionPrefix | строка | префикс для идентификаторов действий. | CWidget |
| activeTab | строка | идентификатор вкладки, которая должна быть активной при первоначальной загрузке страницы. | CTabView |
| controller | CController | Возвращает контроллер, к которому принадлежит этот виджет. | CWidget |
| cssFile | смешанный тип | CSS-файл, используемый для виджета. | CTabView |
| htmlOptions | массив | дополнительные HTML-опции для рендеринга тега контейнера. | CTabView |
| id | строка | Возвращает ID виджета или генерирует новый, если требуется. | CWidget |
| owner | CBaseController | Возвращает владельца/создателя этого виджета. | CWidget |
| skin | смешанный тип | имя скина, который должен использоваться этим виджетом. | CWidget |
| tabs | массив | определения вкладок. | CTabView |
| viewData | массив | данные, которые будут переданы частичному представлению, рендерящемуся каждой вкладкой. | CTabView |
| viewPath | строка | Возвращает директорию с файлами представлений для этого виджета. | CWidget |
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает именованный метод, который не является методом класса. | CComponent |
| __construct() | Конструктор. | CWidget |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства null. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в null. | CComponent |
| actions() | Возвращает список действий, используемых этим виджетом. | CWidget |
| asa() | Возвращает объект поведения с заданным именем. | CComponent |
| attachBehavior() | Прикрепляет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Прикрепляет список поведений к компоненту. | CComponent |
| attachEventHandler() | Прикрепляет обработчик событий к событию. | CComponent |
| beginCache() | Начинает кэширование фрагмента. | CBaseController |
| beginClip() | Начинает запись клипа. | CBaseController |
| beginContent() | Начинает отображение содержимого, которое должно быть оформлено указанным представлением. | CBaseController |
| beginWidget() | Создаёт виджет и выполняет его. | CBaseController |
| canGetProperty() | Определяет, может ли свойство быть прочитано. | CComponent |
| canSetProperty() | Определяет, может ли свойство быть установлено. | CComponent |
| createWidget() | Создаёт виджет и инициализирует его. | CBaseController |
| detachBehavior() | Отсоединяет поведение от компонента. | CComponent |
| detachBehaviors() | Отсоединяет все поведения от компонента. | CComponent |
| detachEventHandler() | Отсоединяет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает прикреплённое поведение. | CComponent |
| disableBehaviors() | Отключает все прикреплённые к этому компоненту поведения. | CComponent |
| enableBehavior() | Включает прикреплённое поведение. | CComponent |
| enableBehaviors() | Включает все прикреплённые к этому компоненту поведения. | CComponent |
| endCache() | Завершает кэширование фрагмента. | CBaseController |
| endClip() | Завершает запись клипа. | CBaseController |
| endContent() | Завершает отображение содержимого. | CBaseController |
| endWidget() | Завершает выполнение указанного виджета. | CBaseController |
| evaluateExpression() | Вычисляет PHP выражение или обратный вызов в контексте этого компонента. | CComponent |
| getController() | Возвращает контроллер, к которому принадлежит этот виджет. | CWidget |
| getEventHandlers() | Возвращает список прикреплённых обработчиков событий для события. | CComponent |
| getId() | Возвращает идентификатор виджета или генерирует новый, если требуется. | CWidget |
| getOwner() | Возвращает владельца/создателя этого виджета. | CWidget |
| getViewFile() | Ищет файл скрипта представления в соответствии с именем представления. | CWidget |
| getViewPath() | Возвращает директорию, содержащую файлы представлений для этого виджета. | CWidget |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли прикреплённые обработчики для события с указанным именем. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует виджет. | CWidget |
| raiseEvent() | Вызывает событие. | CComponent |
| registerClientScript() | Регистрирует необходимый CSS и JavaScript. | CTabView |
| registerCssFile() | Регистрирует необходимый файл CSS. | CTabView |
| render() | Отображает представление. | CWidget |
| renderFile() | Отображает файл представления. | CBaseController |
| renderInternal() | Отображает файл представления. | CBaseController |
| run() | Выполняет виджет. | CTabView |
| setId() | Устанавливает идентификатор виджета. | CWidget |
| widget() | Создаёт виджет и выполняет его. | CBaseController |
Защищённые методы
| Метод | Описание | Определено в |
|---|---|---|
| renderBody() | Отображает часть тела. | CTabView |
| renderHeader() | Отображает заголовок. | CTabView |
Подробное описание свойств
activeTab свойство
public string $activeTab;
идентификатор вкладки, которая должна быть активирована при первоначальной загрузке страницы. Если не установлено, будет активирована первая вкладка.
cssFile свойство
public mixed $cssFile;
файл CSS, используемый для виджета. По умолчанию null, что означает использование файла по умолчанию, включенного вместе с виджетом. Если false, файл CSS не будет использоваться. В противном случае, указанный файл CSS будет включён при использовании этого виджета.
htmlOptions свойство
public array $htmlOptions;
дополнительные HTML опции, которые будут отображены в теге контейнера.
tabs свойство
public array $tabs;
Определения вкладок. Ключи массива — ID, а значения массива — соответствующее содержимое вкладок. Каждое значение массива должно быть массивом с следующими элементами:
- title: заголовок вкладки. Вы должны убедиться, что он закодирован в HTML.
- content: содержимое, отображаемое во вкладке.
- view: имя представления, которое должно быть отображено в этой вкладке. Представление будет отрисовано с помощью метода CController::renderPartial текущего контроллера. Когда указаны оба параметра 'content' и 'view', 'content' будет иметь приоритет.
- url: URL, на который будет перенаправлен браузер пользователя при нажатии на эту вкладку.
- data: массив (имя=>значение), который будет передан в представление, когда указан параметр 'view'. Этот параметр доступен начиная с версии 1.1.1.
- visible: отображать ли эту вкладку. По умолчанию — true. Этот параметр доступен начиная с версии 1.1.11.
array(
'tab1'=>array(
'title'=>'tab 1 title',
'view'=>'view1',
),
'tab2'=>array(
'title'=>'tab 2 title',
'url'=>'http://www.yiiframework.com/',
),
)
viewData свойство
public array $viewData;
данные, которые будут переданы в частичное представление, отрисовываемое каждой вкладкой.
Подробное описание методов
registerClientScript() метод
public void registerClientScript() |
public function registerClientScript()
{
$cs=Yii::app()->getClientScript();
$cs->registerCoreScript('yiitab');
$id=$this->getId();
$cs->registerScript('Yii.CTabView#'.$id,"jQuery(\"#{$id}\").yiitab();");
if($this->cssFile!==false)
self::registerCssFile($this->cssFile);
}
Регистрирует необходимый CSS и JavaScript.
registerCssFile() метод
public static void registerCssFile(string $url=NULL) | ||
| $url | строка | URL CSS. Если null, будет использоваться URL по умолчанию. |
public static function registerCssFile($url=null)
{
$cs=Yii::app()->getClientScript();
if($url===null)
$url=$cs->getCoreScriptUrl().'/yiitab/jquery.yiitab.css';
$cs->registerCssFile($url,'screen');
}
Регистрирует необходимый файл CSS.
renderBody() метод
protected void renderBody() |
protected function renderBody()
{
foreach($this->tabs as $id=>$tab)
{
$inactive=$id!==$this->activeTab?' style="display:none"' : '';
echo "<div class=\"view\" id=\"{$id}\"{$inactive}>\n";
if(isset($tab['content']))
echo $tab['content'];
elseif(isset($tab['view']))
{
if(isset($tab['data']))
{
if(is_array($this->viewData))
$data=array_merge($this->viewData, $tab['data']);
else
$data=$tab['data'];
}
else
$data=$this->viewData;
$this->getController()->renderPartial($tab['view'], $data);
}
echo "</div><!-- {$id} -->\n";
}
}
Отрисовывает часть тела.
renderHeader() метод
protected void renderHeader() |
protected function renderHeader()
{
echo "<ul class=\"tabs\">\n";
foreach($this->tabs as $id=>$tab)
{
$title=isset($tab['title'])?$tab['title']:'undefined';
$active=$id===$this->activeTab?' class="active"' : '';
$url=isset($tab['url'])?$tab['url']:"#{$id}";
echo "<li><a href=\"{$url}\"{$active}>{$title}</a></li>\n";
}
echo "</ul>\n";
}
Отрисовывает заголовок.
run() метод
public void run() |
public function run()
{
foreach($this->tabs as $id=>$tab)
if(isset($tab['visible']) && $tab['visible']==false)
unset($this->tabs[$id]);
if(empty($this->tabs))
return;
if($this->activeTab===null || !isset($this->tabs[$this->activeTab]))
{
reset($this->tabs);
list($this->activeTab, )=each($this->tabs);
}
$htmlOptions=$this->htmlOptions;
if(isset($this->htmlOptions['id']))
$this->id=$this->htmlOptions['id'];
else
$htmlOptions['id']=$this->id;
if(!isset($htmlOptions['class']))
$htmlOptions['class']=self::CSS_CLASS;
$this->registerClientScript();
echo CHtml::openTag('div',$htmlOptions)."\n";
$this->renderHeader();
$this->renderBody();
echo CHtml::closeTag('div');
}
Выполняет виджет.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CTabView