Commit a44ef422ba30d5bef766da92620b806b971bbfc7

Authored by Eugeny Galkovskiy
2 parents 12d25705 2410d528

Merge remote-tracking branch 'origin/master'

common/messages/ru/app.php
@@ -2,4 +2,5 @@ @@ -2,4 +2,5 @@
2 return [ 2 return [
3 'Contact' => "Контакты", 3 'Contact' => "Контакты",
4 'About us' => 'О нас', 4 'About us' => 'О нас',
  5 + 'Home' => 'Главная',
5 ]; 6 ];
6 \ No newline at end of file 7 \ No newline at end of file
frontend/views/layouts/main.php
@@ -19,7 +19,7 @@ @@ -19,7 +19,7 @@
19 use yii\helpers\Json; 19 use yii\helpers\Json;
20 use yii\helpers\Url; 20 use yii\helpers\Url;
21 use yii\web\View; 21 use yii\web\View;
22 - use yii\widgets\Breadcrumbs; 22 + use frontend\widgets\SeoBreadcrumbs;
23 use \artbox\core\models\Language; 23 use \artbox\core\models\Language;
24 24
25 AppAsset::register($this); 25 AppAsset::register($this);
@@ -426,15 +426,21 @@ _________________________________________________________ --> @@ -426,15 +426,21 @@ _________________________________________________________ -->
426 <h1 class="main"><?= $seo->h1 ?></h1> 426 <h1 class="main"><?= $seo->h1 ?></h1>
427 </div> 427 </div>
428 <div class="col-md-5"> 428 <div class="col-md-5">
429 - <?= Breadcrumbs::widget(  
430 - [  
431 - 'links' => isset($this->params[ 'breadcrumbs' ]) ? $this->params[ 'breadcrumbs' ] : [],  
432 - 'homeLink' => [  
433 - 'label' => \Yii::t('yii', 'Home'),  
434 - 'url' => \Yii::$app->homeUrl.Language::$current->url,  
435 - ]  
436 - ]  
437 - ) ?> 429 + <?php
  430 + if( isset($this->params['breadcrumbs']) && is_array($this->params['breadcrumbs']) ){
  431 + echo SeoBreadcrumbs::widget(
  432 + [
  433 + 'links' => $this->params[ 'breadcrumbs' ],
  434 + 'encodeLabels' => false,
  435 + 'homeLink' => [
  436 + 'label' => "<span itemprop='name'>". \Yii::t('app', "Home") ."</span>",
  437 + 'url' => "/ru",
  438 + 'itemprop' => 'item',
  439 + ]
  440 + ]
  441 + );
  442 + }
  443 + ?>
438 444
439 </div> 445 </div>
440 </div> 446 </div>
frontend/widgets/SeoBreadcrumbs.php 0 → 100644
  1 +<?php
  2 + /**
  3 + * Created by PhpStorm.
  4 + * User: stes
  5 + * Date: 18.09.17
  6 + * Time: 12:20
  7 + * @var $this \frontend\widgets\SeoBreadcrumbs
  8 + */
  9 +
  10 + namespace frontend\widgets;
  11 + use yii\base\InvalidConfigException;
  12 + use yii\helpers\ArrayHelper;
  13 + use yii\helpers\Html;
  14 + use yii\helpers\Url;
  15 + use yii\widgets\Breadcrumbs;
  16 +
  17 + class SeoBreadcrumbs extends Breadcrumbs
  18 + {
  19 + public $tag = 'ul';
  20 + public $options = [
  21 + 'class' => 'breadcrumb',
  22 + 'itemscope' => true,
  23 + 'itemtype' => " http://schema.org/BreadcrumbList"
  24 + ];
  25 + public $encodeLabels = false;
  26 + public $itemTemplate = "<li itemprop=\"itemListElement\" itemscope itemtype=\"http://schema.org/ListItem\">{link}<meta itemprop=\"position\" content=\"{number}\" /></li>\n";
  27 + public $homeLink = [
  28 + 'label' => '<span itemprop="name">Интернет-магазин светильников</span>',
  29 + 'url' => '/',
  30 + 'itemprop' => 'item',
  31 + ];
  32 +
  33 + public $activeItemTemplate = '<li class="active" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">{link}<meta itemprop="position" content="{number}" /></span></li>';
  34 +
  35 + public function run()
  36 + {
  37 + if (empty($this->links)) {
  38 + return;
  39 + }
  40 + $links = [];
  41 + if ($this->homeLink === null) {
  42 + $links[] = $this->renderItem_([
  43 + 'label' => Yii::t('yii', 'Home'),
  44 + 'url' => Yii::$app->homeUrl,
  45 + ], $this->itemTemplate,1);
  46 + } elseif ($this->homeLink !== false) {
  47 + $links[] = $this->renderItem_($this->homeLink, $this->itemTemplate, 1, true);
  48 + }
  49 + foreach ($this->links as $key => $link) {
  50 + if (!is_array($link)) {
  51 + $link = ['label' => $link];
  52 + }
  53 + $links[] = $this->renderItem_($link, isset($link['url']) ? $this->itemTemplate : $this->activeItemTemplate, $key + 2);
  54 + }
  55 + echo Html::tag($this->tag, implode('', $links), $this->options);
  56 + }
  57 +
  58 + protected function renderItem_($link, $template, $number, $home = false)
  59 + {
  60 + $encodeLabel = ArrayHelper::remove($link, 'encode', $this->encodeLabels);
  61 + if (array_key_exists('label', $link)) {
  62 + $label = $encodeLabel ? Html::encode($link['label']) : $link['label'];
  63 + } else {
  64 + throw new InvalidConfigException('The "label" element is required for each link.');
  65 + }
  66 + if (isset($link['template'])) {
  67 + $template = $link['template'];
  68 + }
  69 + if (isset($link['url'])) {
  70 + $options = $link;
  71 + unset($options['template'], $options['label'], $options['url']);
  72 + if (!$home){
  73 + $label = "<span itemprop='name'>".$label."</span>";
  74 + }
  75 + $link = Html::a($label, $link['url'], $options);
  76 + } else {
  77 + $link = $label;
  78 + }
  79 + return strtr($template, ['{link}' => $link, '{number}' => $number]);
  80 + }
  81 + }
0 \ No newline at end of file 82 \ No newline at end of file