Commit 7164d2a700617423e5840cfccd8e969a0b049412

Authored by alex
1 parent 7dfb61f2

1)Cделал редирект / в .htaccess

2) В страницах выводится seo->h1 если не присвоен свой заголовок в Page table
.htaccess
... ... @@ -4,6 +4,11 @@ AddDefaultCharset utf-8
4 4 <IfModule mod_rewrite.c>
5 5 RewriteEngine On
6 6  
  7 +
  8 + # Remove trailing slashes
  9 + RewriteCond %{REQUEST_FILENAME} !-d
  10 + RewriteRule ^(.*)/$ /$1 [L,R=301]
  11 +
7 12 # the main rewrite rule for the frontend application
8 13 RewriteCond %{REQUEST_URI} !^/(backend/web|admin|storage)
9 14 RewriteRule !^frontend/web /frontend/web%{REQUEST_URI} [L]
... ...
frontend/components/UrlManager.php
1 1 <?php
2   -
3   - namespace frontend\components;
4   -
5   - use artbox\core\models\Alias;
6   - use artbox\core\models\Language;
7   - use artbox\core\services\Languages;
8   - use yii\helpers\Json;
9   - use yii\web\NotFoundHttpException;
10   - use yii\web\Request;
11   -
12   -
13   - /**
14   - * Url manager extended to work with aliases and languages
15   - *
16   - * @package artbox\core\seo
17   - */
18   - class UrlManager extends \yii\web\UrlManager
19   - {
20   - /**
21   - * @var bool
22   - */
23   - public $hideDefaultLanguagePrefix = false;
24   -
25   - /**
26   - * @see \yii\web\UrlManager
27   - * @var bool
28   - */
29   - public $enablePrettyUrl = true;
30   -
31   - /**
32   - * @see \yii\web\UrlManager
33   - * @var bool
34   - */
35   - public $showScriptName = false;
36   -
37   - /**
38   - * @var \artbox\core\services\Languages
39   - */
40   - protected $languages;
41   -
42   - /**
43   - * UrlManager constructor.
44   - *
45   - * @param \artbox\core\services\Languages $languages
46   - * @param array $config
47   - */
48   -
49   - public $params = [
50   - 'id' => 'id',
51   - 'page' => 'page',
52   - 'per-page' => 'per_page',
53   - 'book_id' => 'book_id',
54   - 'q' => 'q',
55   - 'tag' => 'tag',
56   - ];
57   - public function __construct(Languages $languages, array $config = [])
58   - {
59   - $this->languages = $languages;
60   -
61   - parent::__construct($config);
62   - }
63   -
64   - /**
65   - * @param \yii\web\Request $request
66   - *
67   - * @return array|bool
68   - * @throws \artbox\core\exceptions\AliasOverwriteException
69   - * @throws \yii\base\ExitException
70   - * @throws \yii\base\InvalidConfigException
71   - */
72   - public function parseRequest($request)
73   - {
74   - $redirect = $this->checkRedirect($request->url);
75   -
76   - if ($redirect !== null) {
77   -
78   - \Yii::$app->response->redirect("/" . $redirect->value, 301);
79   - }
80   - $request = $this->parseLanguage($request);
81   - $path=$request->pathInfo;
82   -
83   - if (strlen($path) && $path[strlen($path) - 1] == '/'
84   - # && $path[strlen($path)-2]=='/'
85   - )
86   - {
87   - throw new NotFoundHttpException();
88   - }
89   -
90   -
91   - /**
92   - * @var Alias $alias
93   - */
94   - $alias = Alias::find()
95   - ->where(
96   - [
97   - 'value' => trim($request->pathInfo, '/'),
98   - ]
99   - )
100   - ->andWhere(
101   - [
102   - 'language_id' => $this->languages->getCurrent()->id,
103   - ]
104   - )
105   - ->one();
106   - $this->invalidParams(\Yii::$app->request->queryParams);
107   - if ($alias !== null) {
108   - $params = Json::decode($alias->route);
109   -
110   - $route = array_shift($params);
111   -
112   - /**
113   - * @todo REFACTOR AS SOO AS POSIBLE!
114   - * remove service locator, and implement Dependency Injection
115   - * @var \artbox\core\components\SeoComponent $seo
116   - */
117   - $seo = \Yii::$app->get('seo');
118   - $seo->setAlias($alias);
119   - return [
120   - $route,
121   - $params,
122   - ];
123   - }
124   -
125   - return parent::parseRequest($request);
126   - }
127   -
128   - /**
129   - * @param array|string $params
130   - *
131   - * @return string
132   - */
133   - public function createUrl($params)
134   - {
135   - if ($this->hideDefaultLanguagePrefix && ( $this->languages->getCurrent(
136   - )->url == $this->languages->getDefault()->url )) {
137   - $prefix = '';
138   - } else {
139   - $prefix = '/' . $this->languages->getCurrent()->url;
140   - }
141   -
142   - if (isset($params[ 'alias' ])) {
143   - if ($params[ 'alias' ] instanceof Alias) {
144   - return $prefix . '/' . $params[ 'alias' ]->value;
145   - } elseif (is_array($params[ 'alias' ])) {
146   - return $prefix . '/' . $params[ 'alias' ][ 'value' ];
147   - }
148   - }
149   -
150   - return $prefix . parent::createUrl($params);
151   - }
152   -
153   - /**
154   - * @param $request
155   - *
156   - * @return mixed
157   - * @throws \yii\base\ExitException
158   - * @throws \yii\base\InvalidConfigException
159   - */
160   - protected function parseLanguage(Request $request)
161   - {
162   - $split = explode('/', $request->pathInfo);
163   - if (in_array($split[ 0 ], array_keys($this->languages->getActive()))) {
164   - if ($this->hideDefaultLanguagePrefix && ( $split[ 0 ] == $this->languages->getDefault()->url )) {
165   - unset($split[ 0 ]);
166   -
167   - \Yii::$app->response->redirect('/' . implode('/', $split), 301)
168   - ->send();
169   - \Yii::$app->end();
170   - } else {
171   - $this->languages->setCurrent($split[ 0 ]);
172   -
173   - unset($split[ 0 ]);
174   -
175   - $request->setPathInfo(implode('/', $split));
176   - }
177   - } else {
178   - if ($this->hideDefaultLanguagePrefix) {
179   - $this->languages->setCurrentDefault();
180   - } else {
181   - \Yii::$app->response->redirect(
182   - '/' . $this->languages->getDefault()->url . '/' . implode('/', $split),
183   - 301
184   - )
185   - ->send();
186   - \Yii::$app->end();
187   - }
188   - }
189   -
190   - return $request;
191   - }
192   -
193   - /**
194   - * Looks for rule in table(column)
195   - * `redirect.from` if findes -
196   - * redirects to `redirect.to`
197   - *
198   - * @param string $url
199   - */
200   - protected function checkRedirect(string $url)
201   - {
202   - $url1 = parse_url($url);
203   -
204   -
205   - $string = '{"0":"' . ltrim($url1['path'], "/") . '"';
206   - if (isset($url1['query'])) {
207   - parse_str($url1['query'], $url1['query']);
208   - $string .= (isset($url1['query']['id']))
209   - ? ',"id":' . $url1['query']['id']
210   - : '';
211   - }
212   -
213   - $string .= '}';
214   -
215   - $alias = Alias::find()
216   - ->where(['like', 'route', $string])
217   - ->limit(1)
218   - ->one();
219   - return $alias;
220   -
221   -
222   -
223   -
224   - }
225   -
226   - protected function invalidParams($requestParams){
227   - foreach ($requestParams as $key =>$param){
228   -
229   - if (!array_key_exists($key, $this->params)){
230   - throw new NotFoundHttpException();
231   - }
232   - }
233   - }
234   - }
235 2 \ No newline at end of file
  3 +
  4 +namespace frontend\components;
  5 +
  6 +use artbox\core\models\Alias;
  7 +use artbox\core\models\Language;
  8 +use artbox\core\services\Languages;
  9 +use yii\helpers\Json;
  10 +use yii\web\NotFoundHttpException;
  11 +use yii\web\Request;
  12 +
  13 +
  14 +/**
  15 + * Url manager extended to work with aliases and languages
  16 + *
  17 + * @package artbox\core\seo
  18 + */
  19 +class UrlManager extends \yii\web\UrlManager
  20 +{
  21 + /**
  22 + * @var bool
  23 + */
  24 + public $hideDefaultLanguagePrefix = false;
  25 +
  26 + /**
  27 + * @see \yii\web\UrlManager
  28 + * @var bool
  29 + */
  30 + public $enablePrettyUrl = true;
  31 +
  32 + /**
  33 + * @see \yii\web\UrlManager
  34 + * @var bool
  35 + */
  36 + public $showScriptName = false;
  37 +
  38 + /**
  39 + * @var \artbox\core\services\Languages
  40 + */
  41 + protected $languages;
  42 +
  43 + /**
  44 + * UrlManager constructor.
  45 + *
  46 + * @param \artbox\core\services\Languages $languages
  47 + * @param array $config
  48 + */
  49 +
  50 + public $params = [
  51 + 'id' => 'id',
  52 + 'page' => 'page',
  53 + 'per-page' => 'per_page',
  54 + 'book_id' => 'book_id',
  55 + 'q' => 'q',
  56 + 'tag' => 'tag',
  57 + ];
  58 +
  59 + public function __construct(Languages $languages, array $config = [])
  60 + {
  61 + $this->languages = $languages;
  62 +
  63 + parent::__construct($config);
  64 + }
  65 +
  66 + /**
  67 + * @param \yii\web\Request $request
  68 + *
  69 + * @return array|bool
  70 + * @throws \artbox\core\exceptions\AliasOverwriteException
  71 + * @throws \yii\base\ExitException
  72 + * @throws \yii\base\InvalidConfigException
  73 + */
  74 + public function parseRequest($request)
  75 + {
  76 + $redirect = $this->checkRedirect($request->url);
  77 +
  78 + if ($redirect !== null) {
  79 +
  80 + \Yii::$app->response->redirect("/" . $redirect->value, 301);
  81 + }
  82 + $request = $this->parseLanguage($request);
  83 + $path = $request->pathInfo;
  84 +
  85 + if (strlen($path) && $path[strlen($path) - 1] == '/'
  86 + # && $path[strlen($path)-2]=='/'
  87 + ) {
  88 + throw new NotFoundHttpException();
  89 + }
  90 +
  91 +
  92 + /**
  93 + * @var Alias $alias
  94 + */
  95 + $alias = Alias::find()
  96 + ->where(
  97 + [
  98 + 'value' => trim($request->pathInfo, '/'),
  99 + ]
  100 + )
  101 + ->andWhere(
  102 + [
  103 + 'language_id' => $this->languages->getCurrent()->id,
  104 + ]
  105 + )
  106 + ->one();
  107 + $this->invalidParams(\Yii::$app->request->queryParams);
  108 + if ($alias !== null) {
  109 + $params = Json::decode($alias->route);
  110 +
  111 + $route = array_shift($params);
  112 +
  113 + /**
  114 + * @todo REFACTOR AS SOO AS POSIBLE!
  115 + * remove service locator, and implement Dependency Injection
  116 + * @var \artbox\core\components\SeoComponent $seo
  117 + */
  118 + $seo = \Yii::$app->get('seo');
  119 + $seo->setAlias($alias);
  120 + return [
  121 + $route,
  122 + $params,
  123 + ];
  124 + }
  125 +
  126 + return parent::parseRequest($request);
  127 + }
  128 +
  129 + /**
  130 + * @param array|string $params
  131 + *
  132 + * @return string
  133 + */
  134 + public function createUrl($params)
  135 + {
  136 + if ($this->hideDefaultLanguagePrefix && ($this->languages->getCurrent()->url == $this->languages->getDefault()->url)) {
  137 + $prefix = '';
  138 + } else {
  139 + $prefix = '/' . $this->languages->getCurrent()->url;
  140 + }
  141 +
  142 + if (isset($params['alias'])) {
  143 + if ($params['alias'] instanceof Alias) {
  144 + return $prefix . '/' . $params['alias']->value;
  145 + } elseif (is_array($params['alias'])) {
  146 + return $prefix . '/' . $params['alias']['value'];
  147 + }
  148 + }
  149 +
  150 + return $prefix . parent::createUrl($params);
  151 + }
  152 +
  153 + /**
  154 + * @param $request
  155 + *
  156 + * @return mixed
  157 + * @throws \yii\base\ExitException
  158 + * @throws \yii\base\InvalidConfigException
  159 + */
  160 + protected function parseLanguage(Request $request)
  161 + {
  162 + $split = explode('/', $request->pathInfo);
  163 + if (in_array($split[0], array_keys($this->languages->getActive()))) {
  164 + if ($this->hideDefaultLanguagePrefix && ($split[0] == $this->languages->getDefault()->url)) {
  165 + unset($split[0]);
  166 +
  167 + \Yii::$app->response->redirect('/' . implode('/', $split), 301)
  168 + ->send();
  169 + \Yii::$app->end();
  170 + } else {
  171 + $this->languages->setCurrent($split[0]);
  172 +
  173 + unset($split[0]);
  174 +
  175 + $request->setPathInfo(implode('/', $split));
  176 + }
  177 + } else {
  178 + if ($this->hideDefaultLanguagePrefix) {
  179 + $this->languages->setCurrentDefault();
  180 + } else {
  181 + \Yii::$app->response->redirect(
  182 + '/' . $this->languages->getDefault()->url . '/' . implode('/', $split),
  183 + 301
  184 + )
  185 + ->send();
  186 + \Yii::$app->end();
  187 + }
  188 + }
  189 +
  190 + return $request;
  191 + }
  192 +
  193 + /**
  194 + * Looks for rule in table(column)
  195 + * `redirect.from` if findes -
  196 + * redirects to `redirect.to`
  197 + *
  198 + * @param string $url
  199 + */
  200 + protected function checkRedirect(string $url)
  201 + {
  202 + $url1 = parse_url($url);
  203 +
  204 +
  205 + $string = '{"0":"' . ltrim($url1['path'], "/") . '"';
  206 + if (isset($url1['query'])) {
  207 + parse_str($url1['query'], $url1['query']);
  208 + $string .= (isset($url1['query']['id']))
  209 + ? ',"id":' . $url1['query']['id']
  210 + : '';
  211 + }
  212 +
  213 + $string .= '}';
  214 +
  215 + $alias = Alias::find()
  216 + ->where(['like', 'route', $string])
  217 + ->limit(1)
  218 + ->one();
  219 + return $alias;
  220 +
  221 +
  222 + }
  223 +
  224 + protected function invalidParams($requestParams)
  225 + {
  226 + foreach ($requestParams as $key => $param) {
  227 +
  228 + if (!array_key_exists($key, $this->params)) {
  229 + throw new NotFoundHttpException();
  230 + }
  231 + }
  232 + }
  233 +}
236 234 \ No newline at end of file
... ...
frontend/views/site/about.php
... ... @@ -17,7 +17,7 @@
17 17 <div class="row">
18 18 <div class="col-xs-12 col-sm-12">
19 19  
20   - <h1 class="card-desk-title"><?= ($page->language->title) ?? '' ?></h1>
  20 + <h1 class="card-desk-title"><?= ($page->language->title) ?? $seo->h1 ?></h1>
21 21 </div>
22 22 <div class="col-xs-12 col-sm-12 card-desk-text blog-view">
23 23 <?= ($page->language->body) ?? '' ?>
... ...