"By Example" : CHtml - link()
Рубрика: Перевод Cookbook
8 Окт. 2009
Серия рецентов "By Example" пытается предоставить для разработчиков примеры использования самых распостраненных действий в Yii. Учимся использовать CHtml::link() на примерах!
[+update 8/10/2009]
CHtml::link() method
public static string link(string $text, mixed $url='#', array $htmlOptions=array ( ))
Создание линков (ссылок) с использованием CHtml
Пример 1: Ссылка на действие контроллера
<?php echo CHtml::link('Link Text',array('controller/action')); ?>
Результат:
<a href="index.php?r=controller/action">Link Text</a>
Пример 2: Ссылка на действие контроллера с дополнительными параметрами
<?php echo CHtml::link('Link Text',array('controller/action',
'param1'=>'value1')); ?>
Результат:
<a href="index.php?r=controller/action¶m1=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¶m1=value1¶m2=value2¶m3=value3">Link Text</a>
Пример 4: Ссылка на действие внутри текущего контроллера
Предположим вы находитесь в PostController/view и хотите перейти в PostController/create. Для этого просто укажите название экшинса без указания контроллера! Если хотите перейти на другой контроллер - используйте примеры указанные выше.
<?php echo CHtml::link('Link Text',array('action')); ?>
Пример 5: Ссылка на контроллер от корня
Предположим вы находитесь в модуле и хотите сделать ссылку на корневой контроллер. В этом случае добавьте косую черту в начале строки URL. Это имеет смысл только если вы работаете с модулями
<?php echo CHtml::link('Link Text',array('/controller/action')); ?>
Пример 6: Ссылка на действие контроллера в другом модуле
<?php echo CHtml::link('Link Text',array('/module-id/controller/action')); ?>
Пример 7: Ссылка на действие контроллера со стороны модуля
<?php echo CHtml::link('Link Text',array('/{$this->module->id}/controller/action')); ?>
- Оригинал "By Example: CHtml" [англ.]
Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
- Если честно я немного подглядел список изменений которые уже были сделаны и решил опубликовать их для вас. Скорее всего изменения ... "Что нас ждет в 1.0.6?"
- Данная статья является переводом крохотной заметки в Cookbook-е которая появилась совсем недавно. Разработчики Yii порадовали нас отличной "фичей" которая ... "Добавление контекстной информации (session, user...) в журнал"
- Не знаю почему, но многие разработчики с которыми я переписываюсь совершенно не верно решают проблема "пустых данных" в ... "Принтуем данные из attributes"

[adm] zolter
Было сказано: Воскресенье, 27 Сентябрь 2009
В пояснение лишь скажу что данный код надо использовать в отображениях. К примеру, для генерации создания ссылок на странице вместо привычных для вас <a href="...">

[adm] zolter
Было сказано: Четверг, 08 Октябрь 2009
Статья обновлена, были добавлены новые примеры в связи с их появлением на eng версии.
Скоро будут готовы такие же статьи по:
CHtml::button()
CHtml::textField()
CHtml::listData()
CHtml::dropDownList()

[guest] Анонимус
Было сказано: Пятница, 09 Октябрь 2009
Пофиксь пожалуйста рсс, неверно эскейпит кавычки в загаловках

[guest] Гость
Было сказано: Пятница, 09 Октябрь 2009
А как получить только содержимое тега href при генерации ссылки?
Задача - сгенерировать ссылку до контроллера с параметрами и отправить эту ссылку по емейлу.

[adm] zolter
Было сказано: Пятница, 09 Октябрь 2009
Вот так вот:
$this->createUrl('site/category')
или если нужны параметры дополнительные то вот так:
$this->createUrl('site/category', array('id'=>$id))

[guest] Гость
Было сказано: Среда, 28 Октябрь 2009
А как получить полный URL с доменом.
Задача сгенерировать URL что бы отправить его EMail'ом.
допустим контроллер и экшен такие: users/approve
параметер 'code' => '12345'

[adm] zolter
Было сказано: Четверг, 29 Октябрь 2009
Первое что в голову пришло это
echo 'http://' . $_SERVER['HTTP_HOST'] . $this->createUrl('users/approve', array('code'=>12345))

[guest] Гость
Было сказано: Пятница, 30 Октябрь 2009
Во. Оказывается есть #this->createAbsoluteUrl(...)

[adm] zolter
Было сказано: Пятница, 30 Октябрь 2009
Спасибо. Забыл про этот метод, тока 1 раз приходилось им пользоваться.

[guest] Гость
Было сказано: Вторник, 10 Ноябрь 2009
А еще тогда вопросик. Как добавить аттрибут class тегу "a"?
Что бы результат работы CHtml::link был такой
<a href="{url}" class="myClass">text</a>

[adm] zolter
Было сказано: Вторник, 10 Ноябрь 2009
Очень просто. За это у нас отвечает парраметр htmlOptions:
echo CHtml::link('test', array('site/index'), array('class' => 'myClass'));получим
<a class="myClass" href="/site/index">test</a>

[guest] Brakelv
Было сказано: Среда, 30 Декабрь 2009
Не знал, в какой именно раздел обратиться, решил отписаться тут.
Как можно задать title, description, keywords в layouts, при помощи CHtml. А так же как изменять эти значения в контролере?

[guest] Гость
Было сказано: Четверг, 30 Июнь 2011
А как сделать вот так пример <a href="www.foreingsite.ru" /> Метод link такое дает сделать?


