> YII 类库手册 > CHtml
system.web.helpers
继承 class CHtml
源自 1.0
版本 $Id: CHtml.php 3515 2011-12-28 12:29:24Z mDOMba $
源码
CHtml是一个静态类,提供了一个用于创建HTML视图的辅助方法。

公共属性

属性 类型 描述 定义在
afterRequiredLabel string 加在必填项标签后面的HTML代码。 CHtml
beforeRequiredLabel string 加在必填项标签前面的HTML代码。 CHtml
count integer 产生自动输入栏位名称的计数器。 CHtml
errorCss string 高亮错误输出的CSS类。 如果有错误输入的话,表单输入控件将附加上这个CSS类。 CHtml
errorMessageCss string 显示错误消息的CSS类。(请参阅 error). CHtml
errorSummaryCss string 显示错误摘要的CSS类。(请参阅 errorSummary). CHtml
liveEvents 设置附加jQuery的事件处理程序的默认样式。 CHtml
requiredCss string 必填项标签的CSS类。默认为'required'。 CHtml

公共方法

方法 描述 定义在
activeCheckBox() 为模型属性生成一个复选框。 CHtml
activeCheckBoxList() 为一个模型属性生成一个复选框列表。 CHtml
activeDropDownList() 为一个模型属性生成一个下拉列表。 CHtml
activeFileField() 为一个模型属性生成一个文件输入框。 CHtml
activeHiddenField() 为模型属性生成一个隐藏域。 CHtml
activeId() 为模型属性生成一个输入栏的ID。 CHtml
activeLabel() 为模型属性生成一个label标签。 CHtml
activeLabelEx() 为模型属性生成一个label标签。 CHtml
activeListBox() 为一个模型属性生成一个列表框。 CHtml
activeName() 为一个模型属性生成输入栏名称。 CHtml
activePasswordField() 为一个模型属性生成一个密码输入框。 CHtml
activeRadioButton() 为模型属性生成一个单选按钮。 CHtml
activeRadioButtonList() 为一个模型属性生成一个单选按钮列表。 CHtml
activeTextArea() 为一个模型属性生成一个文本框。 CHtml
activeTextField() 为模型属性生成一个文本框。 CHtml
ajax() 生成启动AJAX请求的JavaScript。 CHtml
ajaxButton() 生成一个可以发起AJAX请求的按钮。 CHtml
ajaxSubmitButton() 生成一个可以用POST方法提交当前表单的按钮。 CHtml
asset() 生成公共资源的URL。 CHtml
beginForm() 生成一个表单的开始标签。 CHtml
button() 生成一个按钮。 CHtml
cdata() 将一个给定的字符串密封进一个CDATA标签中。 CHtml
checkBox() 生成一个复选框。 CHtml
checkBoxList() 生成一个复选框列表。 CHtml
closeTag() 生成一个HTML元素的结束标记 CHtml
css() 将给定的CSS内容密封到一个CSS标签中。 CHtml
cssFile() 特定的CSS文件的链接。 CHtml
decode() 把特殊的HTML实体解码为相对应的字符。 CHtml
encode() 把特殊的字符编码为HTML实体。 CHtml
encodeArray() 把一个字符串数组中的特殊字符编码为HTML实体。 CHtml
endForm() 生成一个表单的结束标签。 CHtml
error() 显示一个模型属性的第一个有效的错误。 CHtml
errorSummary() 显示一个或多个模型的有效错误的摘要。 CHtml
fileField() 生成一个文件输入框。 CHtml
form() 生成一个表单的开始标签。 CHtml
getIdByName() 根据名称来生成一个有效的HTML ID。 CHtml
hiddenField() 生成一个隐藏的输入框 CHtml
htmlButton() 生成一个使用HTML按钮标签的按钮。 CHtml
image() 生成一个图片标签。 CHtml
imageButton() 生成一个图片提交按钮。 CHtml
label() 生成一个label标签 CHtml
linkButton() 生成一个链接提交按钮。 CHtml
linkTag() 生成一个link标签,可以插入到HTML页面的头部部分。 CHtml
listBox() 生成一个列表框。 CHtml
listData() 为列表型HTML元素生成适当的数据。 CHtml
listOptions() 生成一个列表选项。 CHtml
mailto() 创建一个电子邮件链接。 CHtml
metaTag() 生成一个meta标签,可以插入到HTML页面的头部部分。 CHtml
normalizeUrl() 通过标准的输入来生成一个有效的URL。 CHtml
openTag() 生成一个HTML元素的开始标签。 CHtml
pageStateField() 生成一个用于存储页面持久状态的隐藏域。 CHtml
passwordField() 生成一个密码输入框。 CHtml
radioButton() 生成一个单选按钮。 CHtml
radioButtonList() 生成一个单选按钮列表。 CHtml
refresh() 注册一个“刷新”meta标签。 CHtml
renderAttributes() 渲染HTML标签属性。 CHtml
resetButton() 生成一个重置按钮。 CHtml
resolveName() 生成一个模型属性的输入名称 CHtml
resolveNameID() 生成一个模型属性的输入框名称和ID。 CHtml
resolveValue() 评估模型的属性值。 CHtml
script() 将给定的Javascript密封到一个script标签中。 CHtml
scriptFile() 包含一个Javascript文件。 CHtml
statefulForm() 生成一个有状态的表单标签。 CHtml
submitButton() 生成一个提交按钮。 CHtml
tag() 生成一个HTML元素。 CHtml
textArea() 生成一个文本框。 CHtml
textField() 生成一个文本输入框。 CHtml
value() 评估给定的模型中指定属性的值。 CHtml

受保护方法

方法 描述 定义在
activeInputField() 为一个模型属性生成一个输入标签。 CHtml
addErrorCss() 添加errorCss到'class'属性。 CHtml
clientChange() 生成JavaScript与指定的客户端变化。 CHtml
inputField() 生成一个input标签。 CHtml

属性详细

afterRequiredLabel 属性
public static string $afterRequiredLabel;

加在必填项标签后面的HTML代码。

参见

  • label
beforeRequiredLabel 属性
public static string $beforeRequiredLabel;

加在必填项标签前面的HTML代码。

参见

  • label
count 属性
public static integer $count;

产生自动输入栏位名称的计数器。

errorCss 属性
public static string $errorCss;

高亮错误输出的CSS类。 如果有错误输入的话,表单输入控件将附加上这个CSS类。

errorMessageCss 属性
public static string $errorMessageCss;

显示错误消息的CSS类。(请参阅 error).

errorSummaryCss 属性
public static string $errorSummaryCss;

显示错误摘要的CSS类。(请参阅 errorSummary).

liveEvents 属性 (可用自 v1.1.9)
public static $liveEvents;

设置附加jQuery的事件处理程序的默认样式。

如果设置为true(默认),则使用live/delegated样式。 事件处理程序被附加到body后面, 来处理在稍后的时间添加到body的子元素上的事件。

如果设置为false,则使用直接的方式。 事件处理程序直接附加到DOM元素上面,元素必须是已经在页面上存在的。 在晚些时间注入到页面的元素不被处理。

你可以为某个特定的元素设置htmlOption中live属性来覆盖这个设置。 (请参阅 clientChange).

更多关于附加jQuery事件处理程序的信息,请参阅Http://api.jquery.com/on/

参见

  • clientChange
requiredCss 属性
public static string $requiredCss;

必填项标签的CSS类。默认为'required'。

参见

  • label

方法详细

activeCheckBox() 方法
public static string activeCheckBox(CModel $model, string $attribute, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。) 一个名为'uncheckValue'的选项是可用的, 当复选框没有被选中时可以返回这个选项的值。这个值默认为0。 在内部,一个隐藏域会被渲染,以便当复选框没有被选中时, 我们仍然能获取到未选中的值。 如果'uncheckValue'被设置为NULL,隐藏域将不会被渲染。
{return} string 生成的复选框
public static function activeCheckBox($model,$attribute,$htmlOptions=array())
{
    
self::resolveNameID($model,$attribute,$htmlOptions);
    if(!isset(
$htmlOptions['value']))
        
$htmlOptions['value']=1;
    if(!isset(
$htmlOptions['checked']) && self::resolveValue($model,$attribute)==$htmlOptions['value'])
        
$htmlOptions['checked']='checked';
    
self::clientChange('click',$htmlOptions);

    if(
array_key_exists('uncheckValue',$htmlOptions))
    {
        
$uncheck=$htmlOptions['uncheckValue'];
        unset(
$htmlOptions['uncheckValue']);
    }
    else
        
$uncheck='0';

    
$hiddenOptions=isset($htmlOptions['id']) ? array('id'=>self::ID_PREFIX.$htmlOptions['id']) : array('id'=>false);
    
$hidden=$uncheck!==null self::hiddenField($htmlOptions['name'],$uncheck,$hiddenOptions) : '';

    return 
$hidden self::activeInputField('checkbox',$model,$attribute,$htmlOptions);
}

为模型属性生成一个复选框。 属性被假定是true或false。 如果该属性有输入错误, 输入栏的CSS类会被附加上errorCss。

参见

  • clientChange
  • activeInputField
activeCheckBoxList() 方法
public static string activeCheckBoxList(CModel $model, string $attribute, array $data, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$data array 用于生成复选框列表的值-标签对。 注意,值会被自动HTML编码,而标签不会。
$htmlOptions array 附加的HTML选项。 选项将会应用于每个复选框。下面指定的选项是被认可的:
  • template: 字符串,指定如何渲染每个复选框。 默认为"{input} {label}", 其中"{input}"将被生成的复选框标签取代, 而"{label}"会替换为相应的复选框标签的label。
  • separator: 字符串,分隔生成的复选框的字符串。
  • checkAll: 字符串,"check all"复选框指定的标签。 如果指定这个选项,一个'check all'复选框将会显示。 点击这个复选框将会将所有的复选框全选或全不选。
  • checkAllLast: 布尔值,指定是否在筛选框列表后面显示一个'check all'复选框。 如果没有设置这个选项(默认), 或者设置为false, 'check all'复选框将会显示在复选框列表的前面。
  • encode: 布尔型,指定是否对标签属性和值进行HTML编码,默认为true。
自1.1.7版起,一个名称为‘uncheckValue’的特殊选项可以被使用, 这个特殊选项的值在当单选按钮没有被选中时返回。 如果设置了这个特殊选项值,那么一个隐藏域会被渲染,以便当单选按钮没有被选中时,我们仍然可以获得一个未选中时的值。 如果‘uncheckValue’没有被设置或设置为NULL,隐藏域将不会被渲染。
{return} string 生成的复选框列表
public static function activeCheckBoxList($model,$attribute,$data,$htmlOptions=array())
{
    
self::resolveNameID($model,$attribute,$htmlOptions);
    
$selection=self::resolveValue($model,$attribute);
    if(
$model->hasErrors($attribute))
        
self::addErrorCss($htmlOptions);
    
$name=$htmlOptions['name'];
    unset(
$htmlOptions['name']);

    if(
array_key_exists('uncheckValue',$htmlOptions))
    {
        
$uncheck=$htmlOptions['uncheckValue'];
        unset(
$htmlOptions['uncheckValue']);
    }
    else
        
$uncheck='';

    
$hiddenOptions=isset($htmlOptions['id']) ? array('id'=>self::ID_PREFIX.$htmlOptions['id']) : array('id'=>false);
    
$hidden=$uncheck!==null self::hiddenField($name,$uncheck,$hiddenOptions) : '';

    return 
$hidden self::checkBoxList($name,$selection,$data,$htmlOptions);
}

为一个模型属性生成一个复选框列表。 模型的属性值用来作为选项。 如果该属性有输入错误, 输入栏的CSS类会被附加上errorCss。 注意一个复选框列表允许多选。就像listBox. 结果,相应的POST值是一个数组。 万一没有选择的话,相应的POST值是一个空字符串。

参见

  • checkBoxList
activeDropDownList() 方法
public static string activeDropDownList(CModel $model, string $attribute, array $data, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$data array 生成列表选项的数据(值=>显示) 你可以使用listData来生成这个数据。 请参阅listOptions来了解这个数据如何生成列表数据。 注意,这里的值个标签会自动被这个方法进行HTML编码。
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。) 此外,下面的这属性也被支持:
  • encode: 布尔值,是否对值进行编码。默认为true。
  • prompt: 字符串,指定的作为第一个列表选项的提示文本。它的值为空。注意,提示文本不会被HTML编码。
  • empty: 字符串,指定空选项的文本,它的值为空。 'empty'选项也可以是一个值-标签对形式的数组。 在一开始每个对都会用于渲染一个列表的选项。注意,文本标签不会被HTML编码。
  • options: 数组,为每个OPTION标签额外指定的属性。 数组的键名必须是选项的值, 数组的键值是选项标签的额外的属性,名称-值对的形式。例如,
        array(
            'value1'=>array('disabled'=>true, 'label'=>'value 1'),
            'value2'=>array('label'=>'value 2'),
        );
    
{return} string 生成的下拉列表
public static function activeDropDownList($model,$attribute,$data,$htmlOptions=array())
{
    
self::resolveNameID($model,$attribute,$htmlOptions);
    
$selection=self::resolveValue($model,$attribute);
    
$options="\n".self::listOptions($selection,$data,$htmlOptions);
    
self::clientChange('change',$htmlOptions);
    if(
$model->hasErrors($attribute))
        
self::addErrorCss($htmlOptions);
    if(isset(
$htmlOptions['multiple']))
    {
        if(
substr($htmlOptions['name'],-2)!=='[]')
            
$htmlOptions['name'].='[]';
    }
    return 
self::tag('select',$htmlOptions,$options);
}

为一个模型属性生成一个下拉列表。 如果该属性有输入错误, 输入栏的CSS类会被附加上errorCss。

参见

  • clientChange
  • listData
activeFileField() 方法
public static string activeFileField(CModel $model, string $attribute, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$htmlOptions array 额外的HTML属性(请参阅tag).
{return} string 生成的文件输入框
public static function activeFileField($model,$attribute,$htmlOptions=array())
{
    
self::resolveNameID($model,$attribute,$htmlOptions);
    
// 添加一个隐藏域,以便当一个模型只有一个文件输入框时,
    // 我们仍可以使用isset($_POST[$modelClass])来发现是否有输入提交
    
$hiddenOptions=isset($htmlOptions['id']) ? array('id'=>self::ID_PREFIX.$htmlOptions['id']) : array('id'=>false);
    return 
self::hiddenField($htmlOptions['name'],'',$hiddenOptions)
        . 
self::activeInputField('file',$model,$attribute,$htmlOptions);
}

为一个模型属性生成一个文件输入框。 注意,你必须设置表单的‘enctype’属性为‘multipart/form-data’。 表单被提交后,上传的文件信息可以通过$_FILES[$name]来获得 (请参阅 PHP documentation).

参见

  • activeInputField
activeHiddenField() 方法
public static string activeHiddenField(CModel $model, string $attribute, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$htmlOptions array 额外的HTML属性
{return} string 生成的隐藏域
public static function activeHiddenField($model,$attribute,$htmlOptions=array())
{
    
self::resolveNameID($model,$attribute,$htmlOptions);
    return 
self::activeInputField('hidden',$model,$attribute,$htmlOptions);
}

为模型属性生成一个隐藏域。

参见

  • activeInputField
activeId() 方法
public static string activeId(CModel $model, string $attribute)
$model CModel 数据模型
$attribute string 属性
{return} string 生成的输入栏的ID
public static function activeId($model,$attribute)
{
    return 
self::getIdByName(self::activeName($model,$attribute));
}

为模型属性生成一个输入栏的ID。

activeInputField() 方法
protected static string activeInputField(string $type, CModel $model, string $attribute, array $htmlOptions)
$type string 输入类型(例如'text', 'radio')
$model CModel 数据模型
$attribute string 属性
$htmlOptions array 输入标签的额外的HTML属性
{return} string 生成的输入标签
protected static function activeInputField($type,$model,$attribute,$htmlOptions)
{
    
$htmlOptions['type']=$type;
    if(
$type==='text' || $type==='password')
    {
        if(!isset(
$htmlOptions['maxlength']))
        {
            foreach(
$model->getValidators($attribute) as $validator)
            {
                if(
$validator instanceof CStringValidator && $validator->max!==null)
                {
                    
$htmlOptions['maxlength']=$validator->max;
                    break;
                }
            }
        }
        else if(
$htmlOptions['maxlength']===false)
            unset(
$htmlOptions['maxlength']);
    }

    if(
$type==='file')
        unset(
$htmlOptions['value']);
    else if(!isset(
$htmlOptions['value']))
        
$htmlOptions['value']=self::resolveValue($model,$attribute);
    if(
$model->hasErrors($attribute))
        
self::addErrorCss($htmlOptions);
    return 
self::tag('input',$htmlOptions);
}

为一个模型属性生成一个输入标签。 这个方法会依据给定的数据模型和属性来生成一个输入标签。 如果属性有输入错误, 输入栏的CSS类将被附加上errorCss。 这个可以高亮错误的输入。

activeLabel() 方法
public static string activeLabel(CModel $model, string $attribute, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$htmlOptions array 额外的HTML属性。下面指定选项是被认可的:
  • required: 如果设置了且为true, 那么标签将会设置为CSS类'required' (可由CHtml::$requiredCss定制), 可以用CHtml::beforeRequiredLabel和 CHtml::afterRequiredLabel来装饰。
  • label: 指定要显示的标签。如果没有设置, CModel::getAttributeLabel将被调用来获取要用于显示的标签。 如果标签被指定为false,那么将不会有标签被渲染。
{return} string 生成的label标签
public static function activeLabel($model,$attribute,$htmlOptions=array())
{
    if(isset(
$htmlOptions['for']))
    {
        
$for=$htmlOptions['for'];
        unset(
$htmlOptions['for']);
    }
    else
        
$for=self::getIdByName(self::resolveName($model,$attribute));
    if(isset(
$htmlOptions['label']))
    {
        if((
$label=$htmlOptions['label'])===false)
            return 
'';
        unset(
$htmlOptions['label']);
    }
    else
        
$label=$model->getAttributeLabel($attribute);
    if(
$model->hasErrors($attribute))
        
self::addErrorCss($htmlOptions);
    return 
self::label($label,$for,$htmlOptions);
}

为模型属性生成一个label标签。 标签的文本是模型属性的标签, 标签和input的属性有关(请参阅CModel::getAttributeLabel。 如果属性有输入错误,标签的CSS类会附加上errorCss.

activeLabelEx() 方法
public static string activeLabelEx(CModel $model, string $attribute, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$htmlOptions array 额外的HTML属性
{return} string 生成的label标签
public static function activeLabelEx($model,$attribute,$htmlOptions=array())
{
    
$realAttribute=$attribute;
    
self::resolveName($model,$attribute); // strip off square brackets if any
    
$htmlOptions['required']=$model->isAttributeRequired($attribute);
    return 
self::activeLabel($model,$realAttribute,$htmlOptions);
}

为模型属性生成一个label标签。 这是一个加强版的activeLabel。 当属性是必填的时候,它将渲染额外的CSS类个标记。 特别的,它调用CModel::isAttributeRequired来决定 属性是否为必填的。 如果是,它将添加一个CSS类CHtml::requiredCss到标签上, 用CHtml::beforeRequiredLabel和CHtml::afterRequiredLabel 来装饰标签。

activeListBox() 方法
public static string activeListBox(CModel $model, string $attribute, array $data, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$data array 生成列表选项的数据(值=>显示) 你可以使用listData来生成这个数据。 请参阅listOptions来了解这个数据如何生成列表数据。 注意,这里的值个标签会自动被这个方法进行HTML编码。
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。) 此外,下面的这属性也被支持:
  • encode: 布尔值,是否对值进行编码。默认为true。
  • prompt: 字符串,指定的作为第一个列表选项的提示文本。它的值为空。注意,提示文本不会被HTML编码。
  • empty: 字符串,指定空选项的文本,它的值为空。 'empty'选项也可以是一个值-标签对形式的数组。 在一开始每个对都会用于渲染一个列表的选项。注意,文本标签不会被HTML编码。
  • options: 数组,为每个OPTION标签额外指定的属性。 数组的键名必须是选项的值, 数组的键值是选项标签的额外的属性,名称-值对的形式。例如,
        array(
            'value1'=>array('disabled'=>true, 'label'=>'value 1'),
            'value2'=>array('label'=>'value 2'),
        );
    
{return} string 生成的列表框
public static function activeListBox($model,$attribute,$data,$htmlOptions=array())
{
    if(!isset(
$htmlOptions['size']))
        
$htmlOptions['size']=4;
    return 
self::activeDropDownList($model,$attribute,$data,$htmlOptions);
}

为一个模型属性生成一个列表框。 模型的属性值用来作为选项。 如果该属性有输入错误, 输入栏的CSS类会被附加上errorCss。

参见

  • clientChange
  • listData
activeName() 方法
public static string activeName(CModel $model, string $attribute)
$model CModel 数据模型
$attribute string 属性
{return} string 生成的输入栏名称
public static function activeName($model,$attribute)
{
    
$a=$attribute// because the attribute name may be changed by resolveName
    
return self::resolveName($model,$a);
}

为一个模型属性生成输入栏名称。 不同于resolveName,这个方法不用修改属性名。

activePasswordField() 方法
public static string activePasswordField(CModel $model, string $attribute, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的密码输入框
public static function activePasswordField($model,$attribute,$htmlOptions=array())
{
    
self::resolveNameID($model,$attribute,$htmlOptions);
    
self::clientChange('change',$htmlOptions);
    return 
self::activeInputField('password',$model,$attribute,$htmlOptions);
}

为一个模型属性生成一个密码输入框。 如果该属性有输入错误, 输入栏的CSS类将会被附加上errorCss。

参见

  • clientChange
  • activeInputField
activeRadioButton() 方法
public static string activeRadioButton(CModel $model, string $attribute, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。) 一个名为'uncheckValue'的选项是可用的, 当单选按钮没有被选中时可以返回这个选项的值。这个值默认为0。 在内部,一个隐藏域会被渲染,以便当单选按钮没有被选中时, 我们仍然能获取到未选中的值。 如果'uncheckValue'被设置为NULL,隐藏域将不会被渲染。
{return} string 生成的单选按钮
public static function activeRadioButton($model,$attribute,$htmlOptions=array())
{
    
self::resolveNameID($model,$attribute,$htmlOptions);
    if(!isset(
$htmlOptions['value']))
        
$htmlOptions['value']=1;
    if(!isset(
$htmlOptions['checked']) && self::resolveValue($model,$attribute)==$htmlOptions['value'])
        
$htmlOptions['checked']='checked';
    
self::clientChange('click',$htmlOptions);

    if(
array_key_exists('uncheckValue',$htmlOptions))
    {
        
$uncheck=$htmlOptions['uncheckValue'];
        unset(
$htmlOptions['uncheckValue']);
    }
    else
        
$uncheck='0';

    
$hiddenOptions=isset($htmlOptions['id']) ? array('id'=>self::ID_PREFIX.$htmlOptions['id']) : array('id'=>false);
    
$hidden=$uncheck!==null self::hiddenField($htmlOptions['name'],$uncheck,$hiddenOptions) : '';

    
// add a hidden field so that if the radio button is not selected, it still submits a value
    
return $hidden self::activeInputField('radio',$model,$attribute,$htmlOptions);
}

为模型属性生成一个单选按钮。 如果该属性有输入错误, 输入栏的CSS类会被附加上errorCss。

参见

  • clientChange
  • activeInputField
activeRadioButtonList() 方法
public static string activeRadioButtonList(CModel $model, string $attribute, array $data, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$data array 用于生成单选按钮列表的值-标签对。 注意,值会被自动HTML编码,而标签不会。
$htmlOptions array 附加的HTML选项。 选项将会应用于每个单选按钮。下面指定的选项是被认可的:
  • template: 字符串,指定如何渲染每个复选框。 默认为"{input} {label}", 其中"{input}"将被生成的单选按钮标签取代, 而"{label}"会替换为相应的单选按钮标签的label。
  • separator: 字符串,分隔生成的单选按钮的字符串。默认为一个新行(
  • encode: 布尔型,指定是否对标签属性和值进行HTML编码,默认为true。
自1.1.7版起,一个名为'uncheckValue'的选项可用。 当没有单选按钮被选中时它返回一个特定的值。默认为''。 在内部,一个隐藏域会被渲染,当没有单选按钮被选中时,我们仍然可以获取一个POST值。 如果'uncheckValue'设置为NULL,隐藏域将不会被渲染。
{return} string 生成的单选按钮列表
public static function activeRadioButtonList($model,$attribute,$data,$htmlOptions=array())
{
    
self::resolveNameID($model,$attribute,$htmlOptions);
    
$selection=self::resolveValue($model,$attribute);
    if(
$model->hasErrors($attribute))
        
self::addErrorCss($htmlOptions);
    
$name=$htmlOptions['name'];
    unset(
$htmlOptions['name']);

    if(
array_key_exists('uncheckValue',$htmlOptions))
    {
        
$uncheck=$htmlOptions['uncheckValue'];
        unset(
$htmlOptions['uncheckValue']);
    }
    else
        
$uncheck='';

    
$hiddenOptions=isset($htmlOptions['id']) ? array('id'=>self::ID_PREFIX.$htmlOptions['id']) : array('id'=>false);
    
$hidden=$uncheck!==null self::hiddenField($name,$uncheck,$hiddenOptions) : '';

    return 
$hidden self::radioButtonList($name,$selection,$data,$htmlOptions);
}

为一个模型属性生成一个单选按钮列表。 模型的属性值用来作为选项。 如果该属性有输入错误, 输入栏的CSS类会被附加上errorCss。

参见

  • radioButtonList
activeTextArea() 方法
public static string activeTextArea(CModel $model, string $attribute, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的文本框
public static function activeTextArea($model,$attribute,$htmlOptions=array())
{
    
self::resolveNameID($model,$attribute,$htmlOptions);
    
self::clientChange('change',$htmlOptions);
    if(
$model->hasErrors($attribute))
        
self::addErrorCss($htmlOptions);
    
$text=self::resolveValue($model,$attribute);
    return 
self::tag('textarea',$htmlOptions,isset($htmlOptions['encode']) && !$htmlOptions['encode'] ? $text self::encode($text));
}

为一个模型属性生成一个文本框。 如果该属性有输入错误, 输入栏的CSS类会被附加上errorCss。

参见

  • clientChange
activeTextField() 方法
public static string activeTextField(CModel $model, string $attribute, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的文本框
public static function activeTextField($model,$attribute,$htmlOptions=array())
{
    
self::resolveNameID($model,$attribute,$htmlOptions);
    
self::clientChange('change',$htmlOptions);
    return 
self::activeInputField('text',$model,$attribute,$htmlOptions);
}

为模型属性生成一个文本框。 如果属性有输入错误, 输入框的CSS类将会附加上errorCss.

参见

  • clientChange
  • activeInputField
addErrorCss() 方法
protected static void addErrorCss(array &$htmlOptions)
$htmlOptions array 要被修改的HTML选项
protected static function addErrorCss(&$htmlOptions)
{
    if(isset(
$htmlOptions['class']))
        
$htmlOptions['class'].=' '.self::$errorCss;
    else
        
$htmlOptions['class']=self::$errorCss;
}

添加errorCss到'class'属性。

ajax() 方法
public static string ajax(array $options)
$options array AJAX选项。jQuery的AJAX文档中指定了有效的选项。 为了方便起见,下面指定的选项被添加:
  • update: 字符串,指定的选择器, 它的HTML内容将会被AJAX的请求结果所代替。
  • replace: 字符串,指定的选择器, 会被AJAX的请求结果所代替。
注意,如果你指定了'success'选项,那么上面的设置会被忽略。
{return} string 生成的JavaScript
public static function ajax($options)
{
    
Yii::app()->getClientScript()->registerCoreScript('jquery');
    if(!isset(
$options['url']))
        
$options['url']='js:location.href';
    else
        
$options['url']=self::normalizeUrl($options['url']);
    if(!isset(
$options['cache']))
        
$options['cache']=false;
    if(!isset(
$options['data']) && isset($options['type']))
        
$options['data']='js:jQuery(this).parents("form").serialize()';
    foreach(array(
'beforeSend','complete','error','success') as $name)
    {
        if(isset(
$options[$name]) && strpos($options[$name],'js:')!==0)
            
$options[$name]='js:'.$options[$name];
    }
    if(isset(
$options['update']))
    {
        if(!isset(
$options['success']))
            
$options['success']='js:function(html){jQuery("'.$options['update'].'").html(html)}';
        unset(
$options['update']);
    }
    if(isset(
$options['replace']))
    {
        if(!isset(
$options['success']))
            
$options['success']='js:function(html){jQuery("'.$options['replace'].'").replaceWith(html)}';
        unset(
$options['replace']);
    }
    return 
'jQuery.ajax('.CJavaScript::encode($options).');';
}

生成启动AJAX请求的JavaScript。

参见

  • http://docs.jquery.com/Ajax/jQuery.ajax#options
ajaxButton() 方法
public static string ajaxButton(string $label, mixed $url, array $ajaxOptions=array ( ), array $htmlOptions=array ( ))
$label string 按钮的标签
$url mixed AJAX请求的URL。如果是空,那就假定为当前的URL。更多详细情况请参见normalizeUrl。
$ajaxOptions array AJAX options (see ajax)
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的按钮
public static function ajaxButton($label,$url,$ajaxOptions=array(),$htmlOptions=array())
{
    
$ajaxOptions['url']=$url;
    
$htmlOptions['ajax']=$ajaxOptions;
    return 
self::button($label,$htmlOptions);
}

生成一个可以发起AJAX请求的按钮。

public static string ajaxLink(string $text, mixed $url, array $ajaxOptions=array ( ), array $htmlOptions=array ( ))
$text string 链接主体(不会被HTML编码)
$url mixed AJAX请求的URL。如果是空,那就假定为当前的URL。更多详细信息请参见normalizeUrl。
$ajaxOptions array AJAX选项 (请参阅ajax)
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的链接
public static function ajaxLink($text,$url,$ajaxOptions=array(),$htmlOptions=array())
{
    if(!isset(
$htmlOptions['href']))
        
$htmlOptions['href']='#';
    
$ajaxOptions['url']=$url;
    
$htmlOptions['ajax']=$ajaxOptions;
    
self::clientChange('click',$htmlOptions);
    return 
self::tag('a',$htmlOptions,$text);
}

生成一个可以发起AJAX请求的链接。

参见

  • normalizeUrl
  • ajax
ajaxSubmitButton() 方法
public static string ajaxSubmitButton(string $label, mixed $url, array $ajaxOptions=array ( ), array $htmlOptions=array ( ))
$label string 按钮的标签
$url mixed AJAX请求的URL。如果是空,那就假定为当前的URL。更多详细信息请参见normalizeUrl。
$ajaxOptions array AJAX选项(请参阅ajax)
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的按钮
public static function ajaxSubmitButton($label,$url,$ajaxOptions=array(),$htmlOptions=array())
{
    
$ajaxOptions['type']='POST';
    
$htmlOptions['type']='submit';
    return 
self::ajaxButton($label,$url,$ajaxOptions,$htmlOptions);
}

生成一个可以用POST方法提交当前表单的按钮。

asset() 方法
public static string asset(string $path, boolean $hashByName=false)
$path string 发布的资源路径
$hashByName boolean 公布的目录是否应该被命名为哈希文档名。 如果为false,该名称将是发布路径的哈希目录名。 默认为false。 如果想在不同扩展之间共享发布路径,那么就设置为true。
{return} string 公共资源的URL
public static function asset($path,$hashByName=false)
{
    return 
Yii::app()->getAssetManager()->publish($path,$hashByName);
}

生成公共资源的URL。

beginForm() 方法
public static string beginForm(mixed $action='', string $method='post', array $htmlOptions=array ( ))
$action mixed 表单的action链接(关于这个参数详见normalizeUrl。)
$method string 表单方法(例如 post, get)
$htmlOptions array 附加的HTML属性(请参阅tag)。
{return} string 生成的表单标签。
public static function beginForm($action='',$method='post',$htmlOptions=array())
{
    
$htmlOptions['action']=$url=self::normalizeUrl($action);
    
$htmlOptions['method']=$method;
    
$form=self::tag('form',$htmlOptions,false,false);
    
$hiddens=array();
    if(!
strcasecmp($method,'get') && ($pos=strpos($url,'?'))!==false)
    {
        foreach(
explode('&',substr($url,$pos+1)) as $pair)
        {
            if((
$pos=strpos($pair,'='))!==false)
                
$hiddens[]=self::hiddenField(urldecode(substr($pair,0,$pos)),urldecode(substr($pair,$pos+1)),array('id'=>false));
        }
    }
    
$request=Yii::app()->request;
    if(
$request->enableCsrfValidation && !strcasecmp($method,'post'))
        
$hiddens[]=self::hiddenField($request->csrfTokenName,$request->getCsrfToken(),array('id'=>false));
    if(
$hiddens!==array())
        
$form.="\n".self::tag('div',array('style'=>'display:none'),implode("\n",$hiddens));
    return 
$form;
}

生成一个表单的开始标签。 注意,仅生成表单的开始标签。 闭合的标签应该在表单末尾手动添加。

参见

  • endForm
button() 方法
public static string button(string $label='button', array $htmlOptions=array ( ))
$label string 按钮的标签
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的按钮标签
public static function button($label='button',$htmlOptions=array())
{
    if(!isset(
$htmlOptions['name']))
    {
        if(!
array_key_exists('name',$htmlOptions))
            
$htmlOptions['name']=self::ID_PREFIX.self::$count++;
    }
    if(!isset(
$htmlOptions['type']))
        
$htmlOptions['type']='button';
    if(!isset(
$htmlOptions['value']))
        
$htmlOptions['value']=$label;
    
self::clientChange('click',$htmlOptions);
    return 
self::tag('input',$htmlOptions);
}

生成一个按钮。

参见

  • clientChange
cdata() 方法
public static string cdata(string $text)
$text string 要被密封的字符串
{return} string 含有密封内容的CDATA标签。
public static function cdata($text)
{
    return 
'<![CDATA[' $text ']]>';
}

将一个给定的字符串密封进一个CDATA标签中。

checkBox() 方法
public static string checkBox(string $name, boolean $checked=false, array $htmlOptions=array ( ))
$name string 复选框的名称
$checked boolean 复选框是否为被选中状态
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。) 自1.1.2版起,一个名称为‘uncheckValue’的特殊选项可以被使用, 这个特殊选项的值在当复选框没被选中时返回。 如果设置了这个特殊选项值,那么一个隐藏域会被渲染,以便当复选框没有被选中时,我们仍然可以获得一个未选中时的值。 如果‘uncheckValue’没有被设置或设置为NULL,隐藏域将不会被渲染。
{return} string 生成的复选框
public static function checkBox($name,$checked=false,$htmlOptions=array())
{
    if(
$checked)
        
$htmlOptions['checked']='checked';
    else
        unset(
$htmlOptions['checked']);
    
$value=isset($htmlOptions['value']) ? $htmlOptions['value'] : 1;
    
self::clientChange('click',$htmlOptions);

    if(
array_key_exists('uncheckValue',$htmlOptions))
    {
        
$uncheck=$htmlOptions['uncheckValue'];
        unset(
$htmlOptions['uncheckValue']);
    }
    else
        
$uncheck=null;

    if(
$uncheck!==null)
    {
        
// 添加一个隐藏域,以便当复选框没有被选中时,仍然会提交一个值
        
if(isset($htmlOptions['id']) && $htmlOptions['id']!==false)
            
$uncheckOptions=array('id'=>self::ID_PREFIX.$htmlOptions['id']);
        else
            
$uncheckOptions=array('id'=>false);
        
$hidden=self::hiddenField($name,$uncheck,$uncheckOptions);
    }
    else
        
$hidden='';

    
// 添加一个隐藏域,以便当复选框没有被选中时,仍然会提交一个值
    
return $hidden self::inputField('checkbox',$name,$value,$htmlOptions);
}

生成一个复选框。

参见

  • clientChange
  • inputField
checkBoxList() 方法
public static string checkBoxList(string $name, mixed $select, array $data, array $htmlOptions=array ( ))
$name string 复选框列表的名称。 一旦表单被提交,你可以就这个名称来获取选中的值。
$select mixed 复选框列表的选中项。 这个可以是一个单独的被选中项的字符串,也可以是多个选中项的数组。
$data array 用于生成复选框列表的值-标签对。 注意,值将自动被HTML编码,然而标签不会。
$htmlOptions array 附加的HTML选项。 选项将会应用于每个复选框上,下面这些特定的选项是被认可的:
  • template: 字符串,指定如何渲染每个复选框。 默认为"{input} {label}", 其中"{input}"将被生成的复选框标签取代, 而"{label}"会替换为相应的复选框标签的label。
  • separator: 字符串,分隔生成的复选框的字符串。
  • checkAll: 字符串,"check all"复选框指定的标签。 如果指定这个选项,一个'check all'复选框将会显示。 点击这个复选框将会将所有的复选框全选或全不选。
  • checkAllLast: 布尔值,指定是否在筛选框列表后面显示一个'check all'复选框。 如果没有设置这个选项(默认), 或者设置为false, 'check all'复选框将会显示在复选框列表的前面。
  • labelOptions: 数组, 指定为列表中的每个标签渲染的附加的HTML属性。
{return} string 生成的复选框列表
public static function checkBoxList($name,$select,$data,$htmlOptions=array())
{
    
$template=isset($htmlOptions['template'])?$htmlOptions['template']:'{input} {label}';
    
$separator=isset($htmlOptions['separator'])?$htmlOptions['separator']:"<br/>\n";
    unset(
$htmlOptions['template'],$htmlOptions['separator']);

    if(
substr($name,-2)!=='[]')
        
$name.='[]';

    if(isset(
$htmlOptions['checkAll']))
    {
        
$checkAllLabel=$htmlOptions['checkAll'];
        
$checkAllLast=isset($htmlOptions['checkAllLast']) && $htmlOptions['checkAllLast'];
    }
    unset(
$htmlOptions['checkAll'],$htmlOptions['checkAllLast']);

    
$labelOptions=isset($htmlOptions['labelOptions'])?$htmlOptions['labelOptions']:array();
    unset(
$htmlOptions['labelOptions']);

    
$items=array();
    
$baseID=self::getIdByName($name);
    
$id=0;
    
$checkAll=true;

    foreach(
$data as $value=>$label)
    {
        
$checked=!is_array($select) && !strcmp($value,$select) || is_array($select) && in_array($value,$select);
        
$checkAll=$checkAll && $checked;
        
$htmlOptions['value']=$value;
        
$htmlOptions['id']=$baseID.'_'.$id++;
        
$option=self::checkBox($name,$checked,$htmlOptions);
        
$label=self::label($label,$htmlOptions['id'],$labelOptions);
        
$items[]=strtr($template,array('{input}'=>$option,'{label}'=>$label));
    }

    if(isset(
$checkAllLabel))
    {
        
$htmlOptions['value']=1;
        
$htmlOptions['id']=$id=$baseID.'_all';
        
$option=self::checkBox($id,$checkAll,$htmlOptions);
        
$label=self::label($checkAllLabel,$id,$labelOptions);
        
$item=strtr($template,array('{input}'=>$option,'{label}'=>$label));
        if(
$checkAllLast)
            
$items[]=$item;
        else
            
array_unshift($items,$item);
        
$name=strtr($name,array('['=>'\\[',']'=>'\\]'));
        
$js=<<<EOD
$('#$id').click(function() {
$("input[name='
$name']").prop('checked', this.checked);
});
$("input[name='
$name']").click(function() {
$('#
$id').prop('checked', !$("input[name='$name']:not(:checked)").length);
});
$('#
$id').prop('checked', !$("input[name='$name']:not(:checked)").length);
EOD;
        
$cs=Yii::app()->getClientScript();
        
$cs->registerCoreScript('jquery');
        
$cs->registerScript($id,$js);
    }

    return 
self::tag('span',array('id'=>$baseID),implode($separator,$items));
}

生成一个复选框列表。 一个允许多选的复选框列表,比如listBox. 作为一个结果,相对的POST值是一个数组。

clientChange() 方法
protected static void clientChange(string $event, array &$htmlOptions)
$event string 事件名(不带'on')
$htmlOptions array HTML属性,可能包含以下 特殊属性来指定客户端改变行为:
  • submit: 字符串,指定该按钮应该提交的URL。如果为空,当前请求的URL将被使用。
  • params: 数组,名称-值对的形式,应该和表单一起提交。这仅用于'submit'选项被指定的时候。
  • csrf: 布尔值,当CHttpRequest::enableCsrfValidation为true时,是否提交一个CSRF令牌。默认为false。 当元素周围没有表单时,你可能会设置这个为true。 这个选项仅当'sumit'选项设置时才有意义。
  • return: 布尔值,返回值是javascript。默认为false, 意味着javascript的结果将不能引起事件的默认行为。
  • confirm: 字符串,指定显示在弹出的对话框中的信息。
  • ajax: 数组,指定的AJAX选项(请参阅ajax)。
  • live: 布尔值,事件处理程序应该附加live/delegate样式还是用直接的样式。如果没有设置,liveEvents将会被使用,这个选项自1.1.6版可用。
这个参数自1.1.1版就已经可用。
protected static function clientChange($event,&$htmlOptions)
{
    if(!isset(
$htmlOptions['submit']) && !isset($htmlOptions['confirm']) && !isset($htmlOptions['ajax']))
        return;

    if(isset(
$htmlOptions['live']))
    {
        
$live=$htmlOptions['live'];
        unset(
$htmlOptions['live']);
    }
    else
        
$live self::$liveEvents;

    if(isset(
$htmlOptions['return']) && $htmlOptions['return'])
        
$return='return true';
    else
        
$return='return false';

    if(isset(
$htmlOptions['on'.$event]))
    {
        
$handler=trim($htmlOptions['on'.$event],';').';';
        unset(
$htmlOptions['on'.$event]);
    }
    else
        
$handler='';

    if(isset(
$htmlOptions['id']))
        
$id=$htmlOptions['id'];
    else
        
$id=$htmlOptions['id']=isset($htmlOptions['name'])?$htmlOptions['name']:self::ID_PREFIX.self::$count++;

    
$cs=Yii::app()->getClientScript();
    
$cs->registerCoreScript('jquery');

    if(isset(
$htmlOptions['submit']))
    {
        
$cs->registerCoreScript('yii');
        
$request=Yii::app()->getRequest();
        if(
$request->enableCsrfValidation && isset($htmlOptions['csrf']) && $htmlOptions['csrf'])
            
$htmlOptions['params'][$request->csrfTokenName]=$request->getCsrfToken();
        if(isset(
$htmlOptions['params']))
            
$params=CJavaScript::encode($htmlOptions['params']);
        else
            
$params='{}';
        if(
$htmlOptions['submit']!=='')
            
$url=CJavaScript::quote(self::normalizeUrl($htmlOptions['submit']));
        else
            
$url='';
        
$handler.="jQuery.yii.submitForm(this,'$url',$params);{$return};";
    }

    if(isset(
$htmlOptions['ajax']))
        
$handler.=self::ajax($htmlOptions['ajax'])."{$return};";

    if(isset(
$htmlOptions['confirm']))
    {
        
$confirm='confirm(\''.CJavaScript::quote($htmlOptions['confirm']).'\')';
        if(
$handler!=='')
            
$handler="if($confirm) {".$handler."} else return false;";
        else
            
$handler="return $confirm;";
    }

    if(
$live)
        
$cs->registerScript('Yii.CHtml.#' $id"$('body').on('$event','#$id',function(){{$handler}});");
    else
        
$cs->registerScript('Yii.CHtml.#' $id"$('#$id').on('$event', function(){{$handler}});");
    unset(
$htmlOptions['params'],$htmlOptions['submit'],$htmlOptions['ajax'],$htmlOptions['confirm'],$htmlOptions['return'],$htmlOptions['csrf']);
}

生成JavaScript与指定的客户端变化。

closeTag() 方法
public static string closeTag(string $tag)
$tag string 标签名
{return} string 生成的HTML元素标签
public static function closeTag($tag)
{
    return 
'</'.$tag.'>';
}

生成一个HTML元素的结束标记

css() 方法
public static string css(string $text, string $media='')
$text string CSS内容
$media string 这个CSS适用于的media。
{return} string 密封好的CSS
public static function css($text,$media='')
{
    if(
$media!=='')
        
$media=' media="'.$media.'"';
    return 
"<style type=\"text/css\"{$media}>\n/*<![CDATA[*/\n{$text}\n/*]]>*/\n</style>";
}

将给定的CSS内容密封到一个CSS标签中。

cssFile() 方法
public static string cssFile(string $url, string $media='')
$url string CSS的URL
$media string CSS应用的media。
{return} string CSS链接
public static function cssFile($url,$media='')
{
    if(
$media!=='')
        
$media=' media="'.$media.'"';
    return 
'<link rel="stylesheet" type="text/css" href="'.self::encode($url).'"'.$media.' />';
}

特定的CSS文件的链接。

decode() 方法 (可用自 v1.1.8)
public static string decode(string $text)
$text string 要被解码的数据
{return} string 解码后的数据
public static function decode($text)
{
    return 
htmlspecialchars_decode($text,ENT_QUOTES);
}

把特殊的HTML实体解码为相对应的字符。 这个和encode()是相反的功能。

参见

  • http://www.php.net/manual/en/function.htmlspecialchars-decode.php
public static string dropDownList(string $name, string $select, array $data, array $htmlOptions=array ( ))
$name string 下拉列表的名称
$select string 被选中的值
$data array 用来生成列表选项的数据(值=>显示). 你可以使用listData来生这个数据。 请参考listOptions来了解这个数据如何生成列表选项。 注意,这个方法会自动的将值和标签HTML编码。
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。) 此外,下面这些选项也被下拉列表所支持:
  • encode: 布尔值,指定是否对值进行编码。默认为true。
  • prompt: 字符串,指定作为第一个列表项的提示文本,它的值是空的。注意,提示文本不会被HTML编码。
  • empty: 字符串,指定空选项的文本,它的值是空的。 ‘empty’选项也可以是一个值-标签对的数组。 每一对都将在一开始渲染为一个列表选项。注意,文本标签不会被HTML编码。
  • options: 数组,每个option标签的指定附加属性。 数组的键名必须是option的值, 数组的键值是option标签的附加的属性。例如,
        array(
            'value1'=>array('disabled'=>true, 'label'=>'value 1'),
            'value2'=>array('label'=>'value 2'),
        );
    
{return} string 生成的下拉列表
public static function dropDownList($name,$select,$data,$htmlOptions=array())
{
    
$htmlOptions['name']=$name;
    if(!isset(
$htmlOptions['id']))
        
$htmlOptions['id']=self::getIdByName($name);
    else if(
$htmlOptions['id']===false)
        unset(
$htmlOptions['id']);
    
self::clientChange('change',$htmlOptions);
    
$options="\n".self::listOptions($select,$data,$htmlOptions);
    return 
self::tag('select',$htmlOptions,$options);
}

生成一个下拉列表。

参见

  • clientChange
  • inputField
  • listData
encode() 方法
public static string encode(string $text)
$text string 要被编码的数据
{return} string 编码后的数据
public static function encode($text)
{
    return 
htmlspecialchars($text,ENT_QUOTES,Yii::app()->charset);
}

把特殊的字符编码为HTML实体。 application charset将被用于编码。

参见

  • http://www.php.net/manual/en/function.htmlspecialchars.php
encodeArray() 方法
public static array encodeArray(array $data)
$data array 要被编码的数据
{return} array 编码后的数据
public static function encodeArray($data)
{
    
$d=array();
    foreach(
$data as $key=>$value)
    {
        if(
is_string($key))
            
$key=htmlspecialchars($key,ENT_QUOTES,Yii::app()->charset);
        if(
is_string($value))
            
$value=htmlspecialchars($value,ENT_QUOTES,Yii::app()->charset);
        else if(
is_array($value))
            
$value=self::encodeArray($value);
        
$d[$key]=$value;
    }
    return 
$d;
}

把一个字符串数组中的特殊字符编码为HTML实体。 如果需要的话,数组的键名和键值都将被编码。 如果键值是一个数组,这个方法也将递归的将它编码 application charset将被用于编码。

参见

  • http://www.php.net/manual/en/function.htmlspecialchars.php
endForm() 方法
public static string endForm()
{return} string 生成的标签
public static function endForm()
{
    return 
'</form>';
}

生成一个表单的结束标签。

参见

  • beginForm
error() 方法
public static 数据显示字符串。如果没有发现错误则为空。 error(CModel $model, string $attribute, array $htmlOptions=array ( ))
$model CModel 数据模型
$attribute string 属性名
$htmlOptions array 额外的被渲染到div容器的HTML属性。
{return} 数据显示字符串。如果没有发现错误则为空。
public static function error($model,$attribute,$htmlOptions=array())
{
    
self::resolveName($model,$attribute); // turn [a][b]attr into attr
    
$error=$model->getError($attribute);
    if(
$error!='')
    {
        if(!isset(
$htmlOptions['class']))
            
$htmlOptions['class']=self::$errorMessageCss;
        return 
self::tag('div',$htmlOptions,$error);
    }
    else
        return 
'';
}

显示一个模型属性的第一个有效的错误。

参见

  • CModel::getErrors
  • errorMessageCss
errorSummary() 方法
public static string errorSummary(mixed $model, string $header=NULL, string $footer=NULL, array $htmlOptions=array ( ))
$model mixed 输入错误要被显示的模型。 可以是一个单独的模型,也可以是一个模型的数组。
$header string 出现在错误前面的一段HTML代码
$footer string 出现在错误后面的一段HTML代码
$htmlOptions array 额外的被渲染到div容器的HTML属性。 一个名为'firstError'的属性是被认可的,当设置为true, 将只显示每个属性的第一个错误信息。 如果不设置或设置为false,所有的错误信息都将会显示。 这个选项自1.1.3版可用。
{return} string 错误摘要。如果没有错误被找到则为空。
public static function errorSummary($model,$header=null,$footer=null,$htmlOptions=array())
{
    
$content='';
    if(!
is_array($model))
        
$model=array($model);
    if(isset(
$htmlOptions['firstError']))
    {
        
$firstError=$htmlOptions['firstError'];
        unset(
$htmlOptions['firstError']);
    }
    else
        
$firstError=false;
    foreach(
$model as $m)
    {
        foreach(
$m->getErrors() as $errors)
        {
            foreach(
$errors as $error)
            {
                if(
$error!='')
                    
$content.="<li>$error</li>\n";
                if(
$firstError)
                    break;
            }
        }
    }
    if(
$content!=='')
    {
        if(
$header===null)
            
$header='<p>'.Yii::t('yii','Please fix the following input errors:').'</p>';
        if(!isset(
$htmlOptions['class']))
            
$htmlOptions['class']=self::$errorSummaryCss;
        return 
self::tag('div',$htmlOptions,$header."\n<ul>\n$content</ul>".$footer);
    }
    else
        return 
'';
}

显示一个或多个模型的有效错误的摘要。

参见

  • CModel::getErrors
  • errorSummaryCss
fileField() 方法
public static string fileField(string $name, string $value='', array $htmlOptions=array ( ))
$name string 输入框的名称
$value string 输入框的值
$htmlOptions array 附加的HTML属性(请参阅tag).
{return} string 生成的文件输入框
public static function fileField($name,$value='',$htmlOptions=array())
{
    return 
self::inputField('file',$name,$value,$htmlOptions);
}

生成一个文件输入框。 注意,你必须设置表单的‘enctype’属性为‘multipart/form-data’。 表单被提交后,上传的文件信息可以通过$_FILES[$name]来获得 (请参阅 PHP documentation).

参见

  • inputField
form() 方法
public static string form(mixed $action='', string $method='post', array $htmlOptions=array ( ))
$action mixed 表单的action链接(关于这个参数详见normalizeUrl。)
$method string 表单方法(例如 post, get)
$htmlOptions array 附加的HTML属性(请参阅tag)。
{return} string 生成的表单标签。
public static function form($action='',$method='post',$htmlOptions=array())
{
    return 
self::beginForm($action,$method,$htmlOptions);
}

生成一个表单的开始标签。 这是beginForm的一个捷径。

getIdByName() 方法
public static string getIdByName(string $name)
$name string 用来生成HTML ID的名称
{return} string 根据名称生成的ID。
public static function getIdByName($name)
{
    return 
str_replace(array('[]''][''['']'), array('''_''_'''), $name);
}

根据名称来生成一个有效的HTML ID。

hiddenField() 方法
public static string hiddenField(string $name, string $value='', array $htmlOptions=array ( ))
$name string 输入框的名称
$value string 输入框的值
$htmlOptions array 附加的HTML属性(请参阅tag).
{return} string 生成的隐藏输入框
public static function hiddenField($name,$value='',$htmlOptions=array())
{
    return 
self::inputField('hidden',$name,$value,$htmlOptions);
}

生成一个隐藏的输入框

参见

  • inputField
htmlButton() 方法
public static string htmlButton(string $label='button', array $htmlOptions=array ( ))
$label string 按钮的标签。 注意,这个值将会直接的插入到按钮元素中,不经过编码处理。
$htmlOptions array additional 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的按钮标签
public static function htmlButton($label='button',$htmlOptions=array())
{
    if(!isset(
$htmlOptions['name']))
        
$htmlOptions['name']=self::ID_PREFIX.self::$count++;
    if(!isset(
$htmlOptions['type']))
        
$htmlOptions['type']='button';
    
self::clientChange('click',$htmlOptions);
    return 
self::tag('button',$htmlOptions,$label);
}

生成一个使用HTML按钮标签的按钮。 这个方法类似于button, 只是它生成一个按钮标签来替代input标签。

参见

  • clientChange
image() 方法
public static string image(string $src, string $alt='', array $htmlOptions=array ( ))
$src string 图片的URL
$alt string 替代的文字显示
$htmlOptions array 附加的HTML属性(请参阅tag).
{return} string 生成的图片标签
public static function image($src,$alt='',$htmlOptions=array())
{
    
$htmlOptions['src']=$src;
    
$htmlOptions['alt']=$alt;
    return 
self::tag('img',$htmlOptions);
}

生成一个图片标签。

imageButton() 方法
public static string imageButton(string $src, array $htmlOptions=array ( ))
$src string 图片的URL
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的按钮标签
public static function imageButton($src,$htmlOptions=array())
{
    
$htmlOptions['src']=$src;
    
$htmlOptions['type']='image';
    return 
self::button('submit',$htmlOptions);
}

生成一个图片提交按钮。

参见

  • clientChange
inputField() 方法
protected static string inputField(string $type, string $name, string $value, array $htmlOptions)
$type string input标签类型(例如 'text', 'radio')
$name string input标签名称
$value string input标签值
$htmlOptions array 额外的HTML标签的属性(请参阅tag).
{return} string 生成的input标签
protected static function inputField($type,$name,$value,$htmlOptions)
{
    
$htmlOptions['type']=$type;
    
$htmlOptions['value']=$value;
    
$htmlOptions['name']=$name;
    if(!isset(
$htmlOptions['id']))
        
$htmlOptions['id']=self::getIdByName($name);
    else if(
$htmlOptions['id']===false)
        unset(
$htmlOptions['id']);
    return 
self::tag('input',$htmlOptions);
}

生成一个input标签。 这个方法基于给定的名称和值来生成一个input标签。

label() 方法
public static string label(string $label, string $for, array $htmlOptions=array ( ))
$label string 标签文本。注意,如果需要的话,你应该把文本HTML编码。
$for string 和这个标签有关的HTML元素的ID。 如果是false,标签的‘for’属性将不会被渲染。
$htmlOptions array 附加的HTML属性。 下面的HTML选项是被认可的:
  • required: 如果设置为true, 标签的样式将会设置为CSS类'required' (可以用CHtml::$requiredCss来定制), 也可以用CHtml::beforeRequiredLabel 和CHtml::afterRequiredLabel来装饰。
{return} string 生成的label标签
public static function label($label,$for,$htmlOptions=array())
{
    if(
$for===false)
        unset(
$htmlOptions['for']);
    else
        
$htmlOptions['for']=$for;
    if(isset(
$htmlOptions['required']))
    {
        if(
$htmlOptions['required'])
        {
            if(isset(
$htmlOptions['class']))
                
$htmlOptions['class'].=' '.self::$requiredCss;
            else
                
$htmlOptions['class']=self::$requiredCss;
            
$label=self::$beforeRequiredLabel.$label.self::$afterRequiredLabel;
        }
        unset(
$htmlOptions['required']);
    }
    return 
self::tag('label',$htmlOptions,$label);
}

生成一个label标签

public static string link(string $text, mixed $url='#', array $htmlOptions=array ( ))
$text string 链接主体。它不会被编码。因此,如图像标签那样的HTML代码也会被通过。
$url mixed 一个URL或一个路由动作,用于创建一个URL。 关于如何指定这个参数的更多详细情况请参阅normalizeUrl。
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的超链接
public static function link($text,$url='#',$htmlOptions=array())
{
    if(
$url!=='')
        
$htmlOptions['href']=self::normalizeUrl($url);
    
self::clientChange('click',$htmlOptions);
    return 
self::tag('a',$htmlOptions,$text);
}

生成一个超链接。

参见

  • normalizeUrl
  • clientChange
linkButton() 方法
public static string linkButton(string $label='submit', array $htmlOptions=array ( ))
$label string 按钮的标签
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的按钮标签
public static function linkButton($label='submit',$htmlOptions=array())
{
    if(!isset(
$htmlOptions['submit']))
        
$htmlOptions['submit']=isset($htmlOptions['href']) ? $htmlOptions['href'] : '';
    return 
self::link($label,'#',$htmlOptions);
}

生成一个链接提交按钮。

参见

  • clientChange
linkTag() 方法
public static string linkTag(string $relation=NULL, string $type=NULL, string $href=NULL, string $media=NULL, array $options=array ( ))
$relation string link标签的rel属性。如果是null,属性将不会被生成。
$type string link标签的type属性。如果是null,属性将不会被生成。
$href string link标签的href属性。如果是null,属性将不会被生成。
$media string link标签的media属性。如果是null,属性将不会被生成。
$options array 其它选项的名称-值对
{return} string 生成的link标签
public static function linkTag($relation=null,$type=null,$href=null,$media=null,$options=array())
{
    if(
$relation!==null)
        
$options['rel']=$relation;
    if(
$type!==null)
        
$options['type']=$type;
    if(
$href!==null)
        
$options['href']=$href;
    if(
$media!==null)
        
$options['media']=$media;
    return 
self::tag('link',$options);
}

生成一个link标签,可以插入到HTML页面的头部部分。 不要把这个方法与link()相混乱,后者是生成一个超级链接。

listBox() 方法
public static string listBox(string $name, mixed $select, array $data, array $htmlOptions=array ( ))
$name string 列表框的名称
$select mixed 被选中的值。这个可以是一个单独的被选中项的字符串,也可以是多个选中项的数组。
$data array 用于生成列表选项的数据(值=>显示) 你可以使用listData来生这个数据。 请参考listOptions来了解这个数据如何生成列表选项。 注意,这个方法会自动的将值和标签HTML编码。
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。) 此外,下面这些选项也被下拉列表所支持:
  • encode: 布尔值,指定是否对值进行编码。默认为true。
  • prompt: 字符串,指定作为第一个列表项的提示文本,它的值是空的。注意,提示文本不会被HTML编码。
  • empty: 字符串,指定空选项的文本,它的值是空的。 ‘empty’选项也可以是一个值-标签对的数组。 每一对都将在一开始渲染为一个列表选项。注意,文本标签不会被HTML编码。
  • options: 数组,每个option标签的指定附加属性。 数组的键名必须是option的值, 数组的键值是option标签的附加的属性。例如,
        array(
            'value1'=>array('disabled'=>true, 'label'=>'value 1'),
            'value2'=>array('label'=>'value 2'),
        );
    
{return} string 生成的列表框
public static function listBox($name,$select,$data,$htmlOptions=array())
{
    if(!isset(
$htmlOptions['size']))
        
$htmlOptions['size']=4;
    if(isset(
$htmlOptions['multiple']))
    {
        if(
substr($name,-2)!=='[]')
            
$name.='[]';
    }
    return 
self::dropDownList($name,$select,$data,$htmlOptions);
}

生成一个列表框。

参见

  • clientChange
  • inputField
  • listData
listData() 方法
public static array listData(array $models, string $valueField, string $textField, string $groupField='')
$models array 模型对象的列表。 这个参数也可以是一个关联的数组(例如CDbCommand::queryAll的结果)。
$valueField string 列表选项值的属性名
$textField string 列表选项文本的属性名
$groupField string 列表选项组的属性名。如果是空,将不会生成组。
{return} array 可用于dropDownList, listBox等的列表数据。
public static function listData($models,$valueField,$textField,$groupField='')
{
    
$listData=array();
    if(
$groupField==='')
    {
        foreach(
$models as $model)
        {
            
$value=self::value($model,$valueField);
            
$text=self::value($model,$textField);
            
$listData[$value]=$text;
        }
    }
    else
    {
        foreach(
$models as $model)
        {
            
$group=self::value($model,$groupField);
            
$value=self::value($model,$valueField);
            
$text=self::value($model,$textField);
            
$listData[$group][$value]=$text;
        }
    }
    return 
$listData;
}

为列表型HTML元素生成适当的数据。 生成的数据可用于dropDownList, listBox, checkBoxList, radioButtonList,和它们的加强版(比如activeDropDownList). 注意,这个方法不会对生成的数据HTML编码。 如果需要的话你可以调用encodeArray来给它编码。 请参阅value方法来了解如何指定值字段,文本字段以及组字段。

listOptions() 方法
public static string listOptions(mixed $selection, array $listData, array &$htmlOptions)
$selection mixed 被选中的值。这个可以是一个单独的被选中项的字符串,也可以是多个选中项的数组。
$listData array 选项数据(请参阅listData)
$htmlOptions array 额外的HTML属性。下面两个特定的属性是被认可:
  • encode: 布尔值,指定是否对值进行编码。默认为true。
  • prompt: 字符串,指定作为第一个列表选项的提示文本。它的值为空。注意,提示文本不会被HTML编码。
  • empty: 字符串,指定空选项的文本,它的值为空。 'empty'选项也可以是一个值-标签对形式的数组。 在一开始每个对都会用于渲染一个列表的选项。注意,文本标签不会被HTML编码。
  • options: 数组,为每个OPTION标签额外指定的属性。 数组的键名必须是选项的值, 数组的键值是选项标签的额外的属性,名称-值对的形式。例如,
        array(
            'value1'=>array('disabled'=>true, 'label'=>'value 1'),
            'value2'=>array('label'=>'value 2'),
        );
    
  • key: 字符串,指定选择对象的key属性名称specifies the name of key attribute of the selection object(s). 当作为对象实体来请求时使用。在这种情况下,This is used when the selection is represented in terms of objects. In this case, 这个用对象的选项的key来命名的属性将作为真实的选中的值。 这个选项默认为'primaryKey', 意味着使用选中实体的'primaryKey'属性值。 这个选项自1.1.3版可用。
{return} string 生成的列表选项
public static function listOptions($selection,$listData,&$htmlOptions)
{
    
$raw=isset($htmlOptions['encode']) && !$htmlOptions['encode'];
    
$content='';
    if(isset(
$htmlOptions['prompt']))
    {
        
$content.='<option value="">'.strtr($htmlOptions['prompt'],array('<'=>'&lt;''>'=>'&gt;'))."</option>\n";
        unset(
$htmlOptions['prompt']);
    }
    if(isset(
$htmlOptions['empty']))
    {
        if(!
is_array($htmlOptions['empty']))
            
$htmlOptions['empty']=array(''=>$htmlOptions['empty']);
        foreach(
$htmlOptions['empty'] as $value=>$label)
            
$content.='<option value="'.self::encode($value).'">'.strtr($label,array('<'=>'&lt;''>'=>'&gt;'))."</option>\n";
        unset(
$htmlOptions['empty']);
    }

    if(isset(
$htmlOptions['options']))
    {
        
$options=$htmlOptions['options'];
        unset(
$htmlOptions['options']);
    }
    else
        
$options=array();

    
$key=isset($htmlOptions['key']) ? $htmlOptions['key'] : 'primaryKey';
    if(
is_array($selection))
    {
        foreach(
$selection as $i=>$item)
        {
            if(
is_object($item))
                
$selection[$i]=$item->$key;
        }
    }
    else if(
is_object($selection))
        
$selection=$selection->$key;

    foreach(
$listData as $key=>$value)
    {
        if(
is_array($value))
        {
            
$content.='<optgroup label="'.($raw?$key self::encode($key))."\">\n";
            
$dummy=array('options'=>$options);
            if(isset(
$htmlOptions['encode']))
                
$dummy['encode']=$htmlOptions['encode'];
            
$content.=self::listOptions($selection,$value,$dummy);
            
$content.='</optgroup>'."\n";
        }
        else
        {
            
$attributes=array('value'=>(string)$key'encode'=>!$raw);
            if(!
is_array($selection) && !strcmp($key,$selection) || is_array($selection) && in_array($key,$selection))
                
$attributes['selected']='selected';
            if(isset(
$options[$key]))
                
$attributes=array_merge($attributes,$options[$key]);
            
$content.=self::tag('option',$attributes,$raw?(string)$value self::encode((string)$value))."\n";
        }
    }

    unset(
$htmlOptions['key']);

    return 
$content;
}

生成一个列表选项。

mailto() 方法
public static string mailto(string $text, string $email='', array $htmlOptions=array ( ))
$text string 链接主体。它不会被编码。因此,如图像标签那样的HTML代码也会被通过。
$email string email地址。如果是空,第一个参数(链接主体)将被作为email地址。
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string the 生成的电子邮件链接
public static function mailto($text,$email='',$htmlOptions=array())
{
    if(
$email==='')
        
$email=$text;
    return 
self::link($text,'mailto:'.$email,$htmlOptions);
}

创建一个电子邮件链接。

参见

  • clientChange
metaTag() 方法
public static string metaTag(string $content, string $name=NULL, string $httpEquiv=NULL, array $options=array ( ))
$content string meta标签的内容属性
$name string meta标签的属性名。如果是null,属性将不会被生成
$httpEquiv string meta标签的http-equiv属性。如果是null,属性将不会被生成
$options array 其它选项的名称-值对(例如 'scheme', 'lang')
{return} string 生成的meta标签
public static function metaTag($content,$name=null,$httpEquiv=null,$options=array())
{
    if(
$name!==null)
        
$options['name']=$name;
    if(
$httpEquiv!==null)
        
$options['http-equiv']=$httpEquiv;
    
$options['content']=$content;
    return 
self::tag('meta',$options);
}

生成一个meta标签,可以插入到HTML页面的头部部分。

normalizeUrl() 方法
public static string normalizeUrl(mixed $url)
$url mixed 生成一个有效的URL的参数
{return} string 有效的URL
public static function normalizeUrl($url)
{
    if(
is_array($url))
    {
        if(isset(
$url[0]))
        {
            if((
$c=Yii::app()->getController())!==null)
                
$url=$c->createUrl($url[0],array_splice($url,1));
            else
                
$url=Yii::app()->createUrl($url[0],array_splice($url,1));
        }
        else
            
$url='';
    }
    return 
$url==='' Yii::app()->getRequest()->getUrl() : $url;
}

通过标准的输入来生成一个有效的URL。

如果输入参数是一个空字符串,将返回当前请求的URL。

如果输入参数不是一个空字符串, 它被当作一个有效的URL,不作任何改变被返回。

如果输入参数是一个数组,它被视为一个控制器路由和一个GET参数列表, 将会调用CController::createUrl方法来创建一个URL。 既然这样,数组的第一个元素是指控制器的路由, 其它的键名-键值对指额外的URL参数。 例如,array('post/list', 'page'=>3) 可以生成一个URL /index.php?r=post/list&page=3.

openTag() 方法
public static string openTag(string $tag, array $htmlOptions=array ( ))
$tag string 标签名
$htmlOptions array 元素的属性。属性值将被encode()HTML编码。 如果给了一个'encode'属性,而且属性值为false的话, 其余的属性值将不会被HTML编码。 自1.1.5起,属性值为null的属性将不会被渲染。
{return} string 生成的HTML元素标签
public static function openTag($tag,$htmlOptions=array())
{
    return 
'<' $tag self::renderAttributes($htmlOptions) . '>';
}

生成一个HTML元素的开始标签。

pageStateField() 方法
public static string pageStateField(string $value)
$value string 序列化的持久状态
{return} string 生成的隐藏域
public static function pageStateField($value)
{
    return 
'<input type="hidden" name="'.CController::STATE_INPUT_NAME.'" value="'.$value.'" />';
}

生成一个用于存储页面持久状态的隐藏域。 这个方法在内部为statefulForm所用。

passwordField() 方法
public static string passwordField(string $name, string $value='', array $htmlOptions=array ( ))
$name string 输入框的名称
$value string 输入框的值
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的密码输入框
public static function passwordField($name,$value='',$htmlOptions=array())
{
    
self::clientChange('change',$htmlOptions);
    return 
self::inputField('password',$name,$value,$htmlOptions);
}

生成一个密码输入框。

参见

  • clientChange
  • inputField
radioButton() 方法
public static string radioButton(string $name, boolean $checked=false, array $htmlOptions=array ( ))
$name string 按钮的名称
$checked boolean 单选按钮是否被选中状态
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。) 自1.1.2版起,一个名称为‘uncheckValue’的特殊选项可以被使用, 这个特殊选项的值在当单选按钮没有被选中时返回。 如果设置了这个特殊选项值,那么一个隐藏域会被渲染,以便当单选按钮没有被选中时,我们仍然可以获得一个未选中时的值。 如果‘uncheckValue’没有被设置或设置为NULL,隐藏域将不会被渲染。
{return} string 生成的单选按钮
public static function radioButton($name,$checked=false,$htmlOptions=array())
{
    if(
$checked)
        
$htmlOptions['checked']='checked';
    else
        unset(
$htmlOptions['checked']);
    
$value=isset($htmlOptions['value']) ? $htmlOptions['value'] : 1;
    
self::clientChange('click',$htmlOptions);

    if(
array_key_exists('uncheckValue',$htmlOptions))
    {
        
$uncheck=$htmlOptions['uncheckValue'];
        unset(
$htmlOptions['uncheckValue']);
    }
    else
        
$uncheck=null;

    if(
$uncheck!==null)
    {
        
// 添加一个隐藏域,以便当单选按钮没有被选中时,仍然会提交一个值
        
if(isset($htmlOptions['id']) && $htmlOptions['id']!==false)
            
$uncheckOptions=array('id'=>self::ID_PREFIX.$htmlOptions['id']);
        else
            
$uncheckOptions=array('id'=>false);
        
$hidden=self::hiddenField($name,$uncheck,$uncheckOptions);
    }
    else
        
$hidden='';

    
// 添加一个隐藏域,以便当单选按钮没有被选中时,仍然会提交一个值
    
return $hidden self::inputField('radio',$name,$value,$htmlOptions);
}

生成一个单选按钮。

参见

  • clientChange
  • inputField
radioButtonList() 方法
public static string radioButtonList(string $name, string $select, array $data, array $htmlOptions=array ( ))
$name string 单选按钮列表的名称。 一旦表单被提交,你可以使用这个名称来获取被选中的值。
$select string 被选中的单选按钮。
$data array 用于生成单选按钮列表的值-标签对。 注意,值将自动被HTML编码,然而标签不会。
$htmlOptions array 附加的HTML选项。 选项将会应用于每个单选按钮上,下面这些特定的选项是被认可的:
  • template: 字符串,指定如何渲染每个复选框。 默认为"{input} {label}", 其中"{input}"将被生成的单选按钮标签取代, 而"{label}"会替换为相应的复选框标签的label。
  • separator: 字符串,分隔生成的单选按钮的字符串。默认为一个新行(
  • labelOptions: 数组, 指定为列表中的每个标签渲染的附加的HTML属性。
{return} string 生成的单选按钮列表
public static function radioButtonList($name,$select,$data,$htmlOptions=array())
{
    
$template=isset($htmlOptions['template'])?$htmlOptions['template']:'{input} {label}';
    
$separator=isset($htmlOptions['separator'])?$htmlOptions['separator']:"<br/>\n";
    unset(
$htmlOptions['template'],$htmlOptions['separator']);

    
$labelOptions=isset($htmlOptions['labelOptions'])?$htmlOptions['labelOptions']:array();
    unset(
$htmlOptions['labelOptions']);

    
$items=array();
    
$baseID=self::getIdByName($name);
    
$id=0;
    foreach(
$data as $value=>$label)
    {
        
$checked=!strcmp($value,$select);
        
$htmlOptions['value']=$value;
        
$htmlOptions['id']=$baseID.'_'.$id++;
        
$option=self::radioButton($name,$checked,$htmlOptions);
        
$label=self::label($label,$htmlOptions['id'],$labelOptions);
        
$items[]=strtr($template,array('{input}'=>$option,'{label}'=>$label));
    }
    return 
self::tag('span',array('id'=>$baseID),implode($separator,$items));
}

生成一个单选按钮列表。 一个单选按钮列表就像是一个复选框列表, 只是它是允许选中单个。.

refresh() 方法 (可用自 v1.1.1)
public static void refresh(integer $seconds, string $url='')
$seconds integer 刷新页面前等待的秒数
$url string 要跳转的URL,如果是空,意味着当前页。
public static function refresh($seconds$url='')
{
    
$content="$seconds";
    if(
$url!=='')
        
$content.=';'.self::normalizeUrl($url);
    
Yii::app()->clientScript->registerMetaTag($content,null,'refresh');
}

注册一个“刷新”meta标签。 这个方法可以在一个视图的任何地方被唤起。 它将用CClientScript来注册一个“刷新”meta标签, 可以让页面在特定的秒数后刷新。

renderAttributes() 方法
public static string renderAttributes(array $htmlOptions)
$htmlOptions array 将被渲染的属性
{return} string 渲染结果
public static function renderAttributes($htmlOptions)
{
    static 
$specialAttributes=array(
        
'checked'=>1,
        
'declare'=>1,
        
'defer'=>1,
        
'disabled'=>1,
        
'ismap'=>1,
        
'multiple'=>1,
        
'nohref'=>1,
        
'noresize'=>1,
        
'readonly'=>1,
        
'selected'=>1,
    );

    if(
$htmlOptions===array())
        return 
'';

    
$html='';
    if(isset(
$htmlOptions['encode']))
    {
        
$raw=!$htmlOptions['encode'];
        unset(
$htmlOptions['encode']);
    }
    else
        
$raw=false;

    if(
$raw)
    {
        foreach(
$htmlOptions as $name=>$value)
        {
            if(isset(
$specialAttributes[$name]))
            {
                if(
$value)
                    
$html .= ' ' $name '="' $name '"';
            }
            else if(
$value!==null)
                
$html .= ' ' $name '="' $value '"';
        }
    }
    else
    {
        foreach(
$htmlOptions as $name=>$value)
        {
            if(isset(
$specialAttributes[$name]))
            {
                if(
$value)
                    
$html .= ' ' $name '="' $name '"';
            }
            else if(
$value!==null)
                
$html .= ' ' $name '="' self::encode($value) . '"';
        }
    }
    return 
$html;
}

渲染HTML标签属性。 自1.1.5版起,属性值为null的属性将不会被渲染。 特殊的属性,像'checked', 'disabled', 'readonly', 将被渲染为为它们相对应的布尔值。

resetButton() 方法
public static string resetButton(string $label='reset', array $htmlOptions=array ( ))
$label string 按钮的标签
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的按钮标签
public static function resetButton($label='reset',$htmlOptions=array())
{
    
$htmlOptions['type']='reset';
    return 
self::button($label,$htmlOptions);
}

生成一个重置按钮。

参见

  • clientChange
resolveName() 方法
public static string resolveName(CModel $model, string &$attribute)
$model CModel 数据模型
$attribute string 属性
{return} string 输入标签的名称
public static function resolveName($model,&$attribute)
{
    if((
$pos=strpos($attribute,'['))!==false)
    {
        if(
$pos!==0)  // e.g. name[a][b]
            
return get_class($model).'['.substr($attribute,0,$pos).']'.substr($attribute,$pos);
        if((
$pos=strrpos($attribute,']'))!==false && $pos!==strlen($attribute)-1)  // e.g. [a][b]name
        
{
            
$sub=substr($attribute,0,$pos+1);
            
$attribute=substr($attribute,$pos+1);
            return 
get_class($model).$sub.'['.$attribute.']';
        }
        if(
preg_match('/\](\w+\[.*)$/',$attribute,$matches))
        {
            
$name=get_class($model).'['.str_replace(']','][',trim(strtr($attribute,array(']['=>']','['=>']')),']')).']';
            
$attribute=$matches[1];
            return 
$name;
        }
    }
    return 
get_class($model).'['.$attribute.']';
}

生成一个模型属性的输入名称 注意,调用此方法后,如果名称包含方括号前的真实属性的名称(主要用于表格输入), 属性的名称可能会被修改。

resolveNameID() 方法
public static void resolveNameID(CModel $model, string &$attribute, array &$htmlOptions)
$model CModel 数据模型
$attribute string 属性
$htmlOptions array HTML选项
public static function resolveNameID($model,&$attribute,&$htmlOptions)
{
    if(!isset(
$htmlOptions['name']))
        
$htmlOptions['name']=self::resolveName($model,$attribute);
    if(!isset(
$htmlOptions['id']))
        
$htmlOptions['id']=self::getIdByName($htmlOptions['name']);
    else if(
$htmlOptions['id']===false)
        unset(
$htmlOptions['id']);
}

生成一个模型属性的输入框名称和ID。 这个方法会根据设置的'name'和'id'属性来更新HTML的选项。 此方法也可以修改属性的名称, 如果名称中包含方括号的话(主要用于表格输入)。

resolveValue() 方法 (可用自 v1.1.3)
public static mixed resolveValue(CModel $model, string $attribute)
$model CModel 数据模型
$attribute string 属性名
{return} mixed 属性值
public static function resolveValue($model,$attribute)
{
    if((
$pos=strpos($attribute,'['))!==false)
    {
        if(
$pos===0)  // [a]name[b][c], should ignore [a]
        
{
            if(
preg_match('/\](\w+)/',$attribute,$matches))
                
$attribute=$matches[1];
            if((
$pos=strpos($attribute,'['))===false)
                return 
$model->$attribute;
        }
        
$name=substr($attribute,0,$pos);
        
$value=$model->$name;
        foreach(
explode('][',rtrim(substr($attribute,$pos+1),']')) as $id)
        {
            if(
is_array($value) && isset($value[$id]))
                
$value=$value[$id];
            else
                return 
null;
        }
        return 
$value;
    }
    else
        return 
$model->$attribute;
}

评估模型的属性值。 这个方法认可一个数组格式的属性名。 例如,如果属性名为'name[a][b]', 那么"$model->name['a']['b']"的值将被返回。

script() 方法
public static string script(string $text)
$text string 将被密封的Javascript
{return} string 密封好的Javascript
public static function script($text)
{
    return 
"<script type=\"text/javascript\">\n/*<![CDATA[*/\n{$text}\n/*]]>*/\n</script>";
}

将给定的Javascript密封到一个script标签中。

scriptFile() 方法
public static string scriptFile(string $url)
$url string JavaScript文件的URL
{return} string JavaScript文件标签
public static function scriptFile($url)
{
    return 
'<script type="text/javascript" src="'.self::encode($url).'"></script>';
}

包含一个Javascript文件。

statefulForm() 方法
public static string statefulForm(mixed $action='', string $method='post', array $htmlOptions=array ( ))
$action mixed 表单的action链接(关于这个参数详见normalizeUrl。)
$method string 表单方法(例如 post, get)
$htmlOptions array 附加的HTML属性(请参阅tag)。
{return} string 生成的表单标签。
public static function statefulForm($action='',$method='post',$htmlOptions=array())
{
    return 
self::form($action,$method,$htmlOptions)."\n".
        
self::tag('div',array('style'=>'display:none'),self::pageStateField(''));
}

生成一个有状态的表单标签。 一个有状态的表单标签类似于form,除这以外, 它还可以渲染一个附加的用于持久存储页面状态的隐藏域。 如果你想在表单提交的时候可以访问页面持久状态,那么你就可以用这个方法生成一个表单标签

submitButton() 方法
public static string submitButton(string $label='submit', array $htmlOptions=array ( ))
$label string 按钮的标签
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的按钮标签
public static function submitButton($label='submit',$htmlOptions=array())
{
    
$htmlOptions['type']='submit';
    return 
self::button($label,$htmlOptions);
}

生成一个提交按钮。

参见

  • clientChange
tag() 方法
public static string tag(string $tag, array $htmlOptions=array ( ), mixed $content=false, boolean $closeTag=true)
$tag string 标签名
$htmlOptions array 元素的属性。属性值将被encode()HTML编码。 如果给了一个'encode'属性,而且属性值为false的话, 其余的属性值将不会被HTML编码。 自1.1.5起,属性值为null的属性将不会被渲染。
$content mixed 被附加在开启和闭合的元素标记之间的内容。它不会被HTML编码。 如果是false,意味着没有主体内容。
$closeTag boolean 是否生成结束标记。
{return} string 生成的HTML元素标签
public static function tag($tag,$htmlOptions=array(),$content=false,$closeTag=true)
{
    
$html='<' $tag self::renderAttributes($htmlOptions);
    if(
$content===false)
        return 
$closeTag $html.' />' $html.'>';
    else
        return 
$closeTag $html.'>'.$content.'</'.$tag.'>' $html.'>'.$content;
}

生成一个HTML元素。

textArea() 方法
public static string textArea(string $name, string $value='', array $htmlOptions=array ( ))
$name string 文本框的名称
$value string 文本框的值
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的文本框
public static function textArea($name,$value='',$htmlOptions=array())
{
    
$htmlOptions['name']=$name;
    if(!isset(
$htmlOptions['id']))
        
$htmlOptions['id']=self::getIdByName($name);
    else if(
$htmlOptions['id']===false)
        unset(
$htmlOptions['id']);
    
self::clientChange('change',$htmlOptions);
    return 
self::tag('textarea',$htmlOptions,isset($htmlOptions['encode']) && !$htmlOptions['encode'] ? $value self::encode($value));
}

生成一个文本框。

参见

  • clientChange
  • inputField
textField() 方法
public static string textField(string $name, string $value='', array $htmlOptions=array ( ))
$name string 输入框的名称
$value string 输入框的值
$htmlOptions array 附加的HTML属性。除了正常的HTML属性外, 一些特殊的属性也是可以的(请参阅clientChange和tag来了解更多详细信息。)
{return} string 生成的文本输入框
public static function textField($name,$value='',$htmlOptions=array())
{
    
self::clientChange('change',$htmlOptions);
    return 
self::inputField('text',$name,$value,$htmlOptions);
}

生成一个文本输入框。

参见

  • clientChange
  • inputField
value() 方法
public static mixed value(mixed $model, string $attribute, mixed $defaultValue=NULL)
$model mixed 模型。可以是一个对象也可以是一个数组。
$attribute string 属性名(用点连接的多重属性)
$defaultValue mixed 当属性不存在时返回的默认值
{return} mixed n属性值
public static function value($model,$attribute,$defaultValue=null)
{
    foreach(
explode('.',$attribute) as $name)
    {
        if(
is_object($model))
            
$model=$model->$name;
        else if(
is_array($model) && isset($model[$name]))
            
$model=$model[$name];
        else
            return 
$defaultValue;
    }
    return 
$model;
}

评估给定的模型中指定属性的值。 属性名可以用点语法的形式给出。例如, 如果属性是"author.firstName",这个方法将返回"$model->author->firstName"的值。 如果属性不存在或者在中间被打断, 将会返回一个默认值(被看作是最后一个参数)(例如$model->author是null). 模型可以是一个对象也可以是一个数组。 如果是数组,属性被看作是数组的一个键名。 例如"author.firstName",意味着是数组值"$model['author']['firstName']"。

上一篇:
下一篇: