Yii - Шпаргалка по методам класса CHtml

18.08.2011

Ниже в статье показаны примеры использования основных методов класса CHtml, а именно:

  • CHtml::link()
  • CHtml::button()
  • CHtml::textField()
  • CHtml::listData()
  • CHtml::dropDownList()

оригинал статьи - http://www.yiiframework.com/wiki/48/by-example-chtml/

Метод CHtml::link()

public static string link(string $text, mixed $url='#', array $htmlOptions=array ( ))
Генерирует тег <a></a>

Пример 1: Ссылка на определённых экшен контроллера:

<?php echo CHtml::link('Link Text',array('controller/action')); ?>

На выходи, получаем HTML:

<a href="index.php?r=controller/action">Link Text</a>

Пример 2: Ссылка на экшен с передачей дополнительных параметров:

<?php echo CHtml::link('Link Text',array('controller/action',
                                         'param1'=>'value1')); ?>

Код HTML:

<a href="index.php?r=controller/action&param1=value1">Link Text</a>

Пример 3: Аналогичен предыдущему, но передаем несколько параметров:

<?php echo CHtml::link('Link Text',array('controller/action',
                                         'param1'=>'value1',
                                         'param2'=>'value2',
                                         'param3'=>'value3')); ?>

Код:

<a href="index.php?r=controller/action&param1=value1&param2=value2&param3=value3">Link Text</a>

Пример 4: Ссылка, открывающая страницу в новой вкладке:

<?php echo CHtml::link('Link Text',array('controller/action',
                   'param1'=>'value1'), array('target'=>'_blank'); ?>

Код:

<a target="_blank" href="index.php?r=controller/action&param1=value1">Link Text</a>

Пример 5: Ссылка, на экшен, внутри одного контроллера:

(предположим что нужно добавить ссылку из PostController/view на PostController/create)

<?php echo CHtml::link('Link Text',array('action')); ?>

Пример 6: Ссылка из корневя сайта:

(предположим нужна ссылка из модуля на какой-либо контроллер корневого сайта)

<?php echo CHtml::link('Link Text',array('/controller/action')); ?>

Пример 7: Ссылка на экшен модуля:

<?php echo CHtml::link('Link Text',array('/module-id/controller/action')); ?>

Пример 8: Ссылка на экшен внутри модуля:

<?php echo CHtml::link('Link Text',array('/{$this->module->id}/controller/action')); ?>

Метод CHtml::button()

public static string button(string $label='button', array $htmlOptions=array ( ))
Генерирует кнопку.

Пример 1: Подключение кнопки к какому-либо экшену контроллера:

<?php echo CHtml::button('Button Text', array('submit' => array('controller/action'))); ?>
Код:
<input id="yt0" type="button" value="Button Text" name="yt0"/>
<script type="text/javascript">
/*<![CDATA[*/
jQuery(document).ready(function() {
             jQuery('#yt0').click(function( {
                            jQuery.yii.submitForm(
                                     this,
                                     'controller/action',{}
                                          );return false;});
                                  });
/*]]>*/
</script>

Метод CHtml::textField()

public static function textField($name,$value='',$htmlOptions=array())

Генерирует текстовое поле.

Пример 1: Генерация пустого поля, с именем

<?php echo CHtml::textField('Text'); ?>

Пример 2: Генерация поля с именем и значением:

<?php echo CHtml::textField('Text', 'some value'); ?>

Пример 3: Генерация поля с дополнительными HTML параметрами

<?php echo CHtml::textField('Text', 'some value',
array('id'=>'idTextField',
       'width'=>100,
       'maxlength'=>100); ?>

Пример 4: Генерация выключенного поля

<?php echo CHtml::textField('Text', 'some value',
    array('disabled'=>'disabled'); ?>

Метод CHtml::listData()

public static function listData($models,$valueField,$textField,$groupField='')

Генерирует данные для dropDownList и listBox в формате $key=>$value

Пример 1: Генерация категорий:

<?php
     /*you can use here any find method you think
     proper to return your data from db*/
     $models = categories::model()->findAll();

     // format models resulting using listData    
     $list = CHtml::listData($models,
                'category_id', 'category_name');   

     print_r($list);

Вывод HTML:

array("1" => "Arts", "2" => "Science", "3" => "Culture");

Пример 2: Генерация сортированных списков с использованием findAll()

<?php
     $models = categories::model()->findAll(
                 array('order' => 'category_name'));

     $list = CHtml::listData($models,
                'category_id', 'category_name');   

     print_r($list);

Метод CHtml::dropDownList()

public static function dropDownList($name,$select,$data,$htmlOptions=array())
Генерирует выпадающий список

Пример 1: Генерация простого выпадающего списка для выбора пола

<?php echo CHtml::dropDownList('listname', $select,
              array('M' => 'Male', 'F' => 'Female'))

Пример 2: Генерация выпадающего списка с пустым элементом

<?php echo CHtml::dropDownList('listname', $select,
              array('M' => 'Male', 'F' => 'Female'),
              array('empty' => '(Select a gender)'));

Пример 3: Генерация списка с использованием данных из модели:

В модели:
public function getGenderOptions(){
    return array('M' => 'Male', 'F' => 'Female');
}
В представлении:
<?php echo CHtml::dropDownList('listname', $select,
              $model->genderOptions,
              array('empty' => '(Select a gender'));

Пример 4: Использовании данных из базы

// retrieve the models from db
$models = categories::model()->findAll(
                 array('order' => 'category_name'));

// format models as $key=>$value with listData
$list = CHtml::listData($models,
                'category_id', 'category_name');
<?php echo CHtml::dropDownList('categories', $category,
              $list,
              array('empty' => '(Select a category'));

blog comments powered by Disqus
Наверх