Skip to content

Commit 8edfa0f

Browse files
dev
1 parent b8d85fc commit 8edfa0f

File tree

2 files changed

+55
-11
lines changed

2 files changed

+55
-11
lines changed

src/MultiLangComponent.php

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,18 @@
99
namespace skeeks\yii2\multiLanguage;
1010

1111

12+
use yii\base\BootstrapInterface;
13+
use yii\base\Event;
14+
use yii\helpers\ArrayHelper;
15+
use yii\helpers\Url;
16+
use yii\web\Application;
17+
use yii\web\View;
1218
/**
1319
* @property string $widgetSuffix
1420
*
1521
* @author Semenov Alexander <semenov@skeeks.com>
1622
*/
17-
class MultiLangComponent extends \yii\base\Component
23+
class MultiLangComponent extends \yii\base\Component implements BootstrapInterface
1824
{
1925
/**
2026
* @var array доступные языки
@@ -25,4 +31,43 @@ class MultiLangComponent extends \yii\base\Component
2531
* @var string язык проекта по умолчанию
2632
*/
2733
public $default_lang = 'ru';
34+
35+
/**
36+
* @var string
37+
*/
38+
public $lang_param_name = 'lang';
39+
40+
/**
41+
* @param \yii\base\Application $application
42+
*/
43+
public function bootstrap($application)
44+
{
45+
if ($application instanceof Application) {
46+
$application->view->on(View::EVENT_BEGIN_BODY, function (Event $e) {
47+
foreach ($this->langs as $langCode)
48+
{
49+
$urlData = [];
50+
$params = \Yii::$app->request->getQueryParams();
51+
if ($params)
52+
{
53+
$params = ArrayHelper::merge($params, [$this->lang_param_name => $langCode]);
54+
} else
55+
{
56+
$params = ArrayHelper::merge([], [$this->lang_param_name => $langCode]);
57+
}
58+
59+
$route = \Yii::$app->requestedRoute;
60+
$urlData = ["/" . $route];
61+
62+
$urlData = ArrayHelper::merge($urlData, $params);
63+
64+
$e->sender->registerLinkTag([
65+
'rel' => 'alternate',
66+
'hreflang' => $langCode,
67+
'href' => Url::to($urlData, true),
68+
]);
69+
}
70+
});
71+
}
72+
}
2873
}

src/MultiLangUrlManager.php

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,26 @@
1717
*/
1818
class MultiLangUrlManager extends UrlManager
1919
{
20-
/**
21-
*
22-
*/
23-
const LANG_PARAM_NAME = "lang";
24-
2520
/**
2621
* @param array|string $params
2722
* @return string
2823
*/
2924
public function createUrl($params)
3025
{
31-
if (isset($params[static::LANG_PARAM_NAME])) {
32-
$lang = $params[static::LANG_PARAM_NAME];
33-
//unset($params[static::LANG_PARAM_NAME]);
26+
if (isset($params[\Yii::$app->multiLanguage->lang_param_name])) {
27+
$lang = $params[\Yii::$app->multiLanguage->lang_param_name];
28+
//unset($params[\Yii::$app->multiLanguage->lang_param_name]);
3429
} else {
3530
//Если не указан параметр языка, то работаем с текущим языком
3631
$lang = \Yii::$app->language;
37-
$params[static::LANG_PARAM_NAME] = $lang;
32+
$params[\Yii::$app->multiLanguage->lang_param_name] = $lang;
3833
//$lang = 'ru';
3934
}
4035

36+
4137
//Если урл вида /url/test то нужно убрать из параметров язык, поскольку он будет содержатся не в параметра а в pathInfo
4238
if ($this->enablePrettyUrl) {
43-
unset($params[static::LANG_PARAM_NAME]);
39+
unset($params[\Yii::$app->multiLanguage->lang_param_name]);
4440
}
4541

4642
//Если указанный язык = отображаемому на сайте по умолчанию, то не нужно менять урл
@@ -58,6 +54,9 @@ public function createUrl($params)
5854
//Получаем сформированный URL(без префикса идентификатора языка)
5955
$url = parent::createUrl($params);
6056

57+
/*print_r($lang);
58+
print_r($url);*/
59+
6160
//Url absolute
6261
if (strpos($url, '://') !== false) {
6362
$urlData = parse_url($url);

0 commit comments

Comments
 (0)