Commit 7164d2a700617423e5840cfccd8e969a0b049412

Authored by alex
1 parent 7dfb61f2

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

2) В страницах выводится seo->h1 если не присвоен свой заголовок в Page table
@@ -4,6 +4,11 @@ AddDefaultCharset utf-8 @@ -4,6 +4,11 @@ AddDefaultCharset utf-8
4 <IfModule mod_rewrite.c> 4 <IfModule mod_rewrite.c>
5 RewriteEngine On 5 RewriteEngine On
6 6
  7 +
  8 + # Remove trailing slashes
  9 + RewriteCond %{REQUEST_FILENAME} !-d
  10 + RewriteRule ^(.*)/$ /$1 [L,R=301]
  11 +
7 # the main rewrite rule for the frontend application 12 # the main rewrite rule for the frontend application
8 RewriteCond %{REQUEST_URI} !^/(backend/web|admin|storage) 13 RewriteCond %{REQUEST_URI} !^/(backend/web|admin|storage)
9 RewriteRule !^frontend/web /frontend/web%{REQUEST_URI} [L] 14 RewriteRule !^frontend/web /frontend/web%{REQUEST_URI} [L]
frontend/components/UrlManager.php
1 <?php 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 \ No newline at end of file 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 \ No newline at end of file 234 \ No newline at end of file
frontend/views/site/about.php
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 <div class="row"> 17 <div class="row">
18 <div class="col-xs-12 col-sm-12"> 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 </div> 21 </div>
22 <div class="col-xs-12 col-sm-12 card-desk-text blog-view"> 22 <div class="col-xs-12 col-sm-12 card-desk-text blog-view">
23 <?= ($page->language->body) ?? '' ?> 23 <?= ($page->language->body) ?? '' ?>