Commit 440eeea8 by Alexander Makarov

Fixes #6106: Added ability to specify `encode` for each item of `yii\widgets\Breadcrumbs`

parent a87179e1
...@@ -21,6 +21,7 @@ Yii Framework 2 Change Log ...@@ -21,6 +21,7 @@ Yii Framework 2 Change Log
- Bug #6736: Removed `Content-Transfer-Encoding` from the list of default download headers (DaSourcerer) - Bug #6736: Removed `Content-Transfer-Encoding` from the list of default download headers (DaSourcerer)
- Enh #4502: Added alias support to URL route when calling `Url::toRoute()` and `Url::to()` (qiangxue, lynicidn) - Enh #4502: Added alias support to URL route when calling `Url::toRoute()` and `Url::to()` (qiangxue, lynicidn)
- Enh #5194: `yii\console\controllers\AssetController` now handles bundle files from external resources properly (klimov-paul) - Enh #5194: `yii\console\controllers\AssetController` now handles bundle files from external resources properly (klimov-paul)
- Enh #6106: Added ability to specify `encode` for each item of `yii\widgets\Breadcrumbs` (samdark)
- Enh #6247: Logger and error handler are now using slightly less memory (stepanselyuk, samdark) - Enh #6247: Logger and error handler are now using slightly less memory (stepanselyuk, samdark)
- Enh #6398: Added support for specifying dependent component in terms of a configuration array for classes such as `DbCache` (qiangxue) - Enh #6398: Added support for specifying dependent component in terms of a configuration array for classes such as `DbCache` (qiangxue)
- Enh #6434: Added `yii\behaviors\SluggableBehavior::immutable` to support keeping the generated slug unchanged (trntv) - Enh #6434: Added `yii\behaviors\SluggableBehavior::immutable` to support keeping the generated slug unchanged (trntv)
......
...@@ -101,6 +101,15 @@ class Breadcrumbs extends Widget ...@@ -101,6 +101,15 @@ class Breadcrumbs extends Widget
* ] * ]
* ``` * ```
* *
* Since 2.0.2 each individual link can override global [[encodeLabels]] param like the following:
*
* ```php
* [
* 'label' => '<strong>Hello!</strong>',
* 'encode' => false,
* ]
* ```
*
*/ */
public $links = []; public $links = [];
/** /**
...@@ -150,8 +159,14 @@ class Breadcrumbs extends Widget ...@@ -150,8 +159,14 @@ class Breadcrumbs extends Widget
*/ */
protected function renderItem($link, $template) protected function renderItem($link, $template)
{ {
$encodeLabel = $this->encodeLabels;
if (array_key_exists('encode', $link)) {
$encodeLabel = $link['encode'];
unset($link['encode']);
}
if (array_key_exists('label', $link)) { if (array_key_exists('label', $link)) {
$label = $this->encodeLabels ? Html::encode($link['label']) : $link['label']; $label = $encodeLabel ? Html::encode($link['label']) : $link['label'];
} else { } else {
throw new InvalidConfigException('The "label" element is required for each link.'); throw new InvalidConfigException('The "label" element is required for each link.');
} }
......
...@@ -106,6 +106,21 @@ class BreadcrumbsTest extends \yiiunit\TestCase ...@@ -106,6 +106,21 @@ class BreadcrumbsTest extends \yiiunit\TestCase
$this->assertEquals("<li>My-<br>Test-Label</li>\n", $unencodedValue); $this->assertEquals("<li>My-<br>Test-Label</li>\n", $unencodedValue);
} }
public function testEncodeOverride()
{
$link = ['label' => 'My-<br>Test-Label', 'encode' => false];
$method = $this->reflectMethod();
$result = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate);
$this->assertEquals("<li>My-<br>Test-Label</li>\n", $result);
//without encodeLabels
$this->breadcrumbs->encodeLabels = false;
$unencodedValue = $method->invoke($this->breadcrumbs, $link, $this->breadcrumbs->itemTemplate);
$this->assertEquals("<li>My-<br>Test-Label</li>\n", $unencodedValue);
}
public function testRenderItemWithLabelAndUrl() public function testRenderItemWithLabelAndUrl()
{ {
$link = ['label' => 'My-<br>Test-Label', 'url' => 'http://localhost/yii2']; $link = ['label' => 'My-<br>Test-Label', 'url' => 'http://localhost/yii2'];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment