Commit 989d9e93 authored by john's avatar john

2949

parent 0fc6446d
<?php <?php
namespace common\components; namespace common\components;
use common\modules\languages\models\Languages; use common\modules\languages\models\Languages;
use common\modules\content\models\CoContent; use common\modules\content\models\CoContent;
use common\modules\documentation\models\DocList;
class UrlManager extends \yii\web\UrlManager { class UrlManager extends \yii\web\UrlManager
{
public function parseRequest($request) public function parseRequest($request)
{ {
$pages = CoContent::find()->where(['active' => true])->all(); $pages = CoContent::find()->where(['active' => true])->all();
$rules = []; $rules = [];
foreach($pages as $page) foreach ($pages as $page) {
{ $rules['<page:(' . $page->url . ')>'] = 'content/page/view';
$rules['<page:('.$page->url.')>'] = 'content/page/view'; }
$documents = DocList::find()->where(['active' => true])->all();
foreach ($documents as $document) {
$content = $document->docContents;
if ($content)
$rules['<document:(' . $content[0]->lang->url . ')>'] = 'documentation/page/view';
} }
$request->url = rtrim($request->url, '/'); $request->url = rtrim($request->url, '/');
$this->addRules($rules, false); $this->addRules($rules, false);
return parent::parseRequest($request); return parent::parseRequest($request);
} }
public function createUrl($params) public function createUrl($params)
{ {
if(isset($params['lang_id'])) if (isset($params['lang_id'])) {
{
//Если указан идентификатор языка, то делаем попытку найти язык в БД, //Если указан идентификатор языка, то делаем попытку найти язык в БД,
//иначе работаем с языком по умолчанию //иначе работаем с языком по умолчанию
$lang = Languages::findOne($params['lang_id']); $lang = Languages::findOne($params['lang_id']);
if($lang === null) if ($lang === null) {
{
$lang = Languages::getDefaultLang(); $lang = Languages::getDefaultLang();
} }
unset($params['lang_id']); unset($params['lang_id']);
} } else {
else
{
//Если не указан параметр языка, то работаем с текущим языком //Если не указан параметр языка, то работаем с текущим языком
$lang = Languages::getCurrent(); $lang = Languages::getCurrent();
} }
//Получаем сформированный URL(без префикса идентификатора языка) //Получаем сформированный URL(без префикса идентификатора языка)
$url = parent::createUrl($params); $url = parent::createUrl($params);
//Добавляем к URL префикс - буквенный идентификатор языка //Добавляем к URL префикс - буквенный идентификатор языка
if($url == '/') if ($url == '/') {
{ return '/' . (!$lang->default ? $lang->url : '');
return '/' . (!$lang->default?$lang->url:'');
} }
// Делаем универсальный URL без языка для Eauth авторизации // Делаем универсальный URL без языка для Eauth авторизации
elseif (strpos($url, '/eauth') !== false) { elseif (strpos($url, '/eauth') !== false) {
return $url; return $url;
} } else {
else return (!$lang->default ? '/' . $lang->url : '') . $url;
{
return (!$lang->default?'/'.$lang->url:'') . $url;
} }
} }
} }
...@@ -25,6 +25,9 @@ class DocumentationAsset extends AssetBundle ...@@ -25,6 +25,9 @@ class DocumentationAsset extends AssetBundle
'css/documentation.css', 'css/documentation.css',
]; ];
public $js = [ public $js = [
'js/vendor.min.js',
'js/scripts.min.js',
'js/accordion.js',
'js/documentation.js', 'js/documentation.js',
]; ];
public $depends = [ public $depends = [
......
if($('.set').length){
$(".set > li > a").on("click", function(){
if($(this).parent().hasClass('active')){
$(this).parent().removeClass("active");
$(this).siblings('.set_in').slideUp(200);
//$(".set > a i").removeClass("fa-minus").addClass("fa-plus");
}else{
//$(".set > a i").removeClass("fa-minus").addClass("fa-plus");
//$(this).find("i").removeClass("fa-plus").addClass("fa-minus");
$(".set > li> a").parent().removeClass("active");
//$(this).addClass("active");
$(this).parent().addClass("active");
$('.set_in').slideUp(200);
$(this).siblings('.set_in').slideDown(200);
}
});
}
\ No newline at end of file
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -15,9 +15,9 @@ class PageController extends \common\components\BaseController ...@@ -15,9 +15,9 @@ class PageController extends \common\components\BaseController
]; ];
} }
public function actionView($id) public function actionView($document)
{ {
$model = $this->findModel($id); $model = $this->findDocumentModel($document);
$documentation = $model->lang->html; $documentation = $model->lang->html;
...@@ -47,4 +47,25 @@ class PageController extends \common\components\BaseController ...@@ -47,4 +47,25 @@ class PageController extends \common\components\BaseController
} }
} }
/**
* Finds the DocContent model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown.
* @param integer $id
* @return DocContent the loaded model
* @throws NotFoundHttpException if the model cannot be found
*/
protected function findDocumentModel($url)
{
$langContent = \common\modules\documentation\models\DocContentLang::findOne(['url' => $url]);
if (!$langContent) {
throw new NotFoundHttpException('The requested page does not exist.');
}
$model = $langContent->content;
if ($model !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
} }
...@@ -5,6 +5,7 @@ namespace common\modules\documentation\models; ...@@ -5,6 +5,7 @@ namespace common\modules\documentation\models;
use Yii; use Yii;
use yii\behaviors\TimestampBehavior; use yii\behaviors\TimestampBehavior;
use common\modules\languages\models\Languages; use common\modules\languages\models\Languages;
use yii\helpers\Html;
/** /**
* This is the model class for table "{{%doc_list}}". * This is the model class for table "{{%doc_list}}".
...@@ -73,7 +74,7 @@ class DocList extends \yii\db\ActiveRecord ...@@ -73,7 +74,7 @@ class DocList extends \yii\db\ActiveRecord
return [ return [
'id' => 'ID', 'id' => 'ID',
'active' => 'Активность', 'active' => 'Активность',
'parent_id' => 'Родитель', 'parent_id' => 'Родительский раздел',
'name' => 'Заголовок', 'name' => 'Заголовок',
'position' => 'Position', 'position' => 'Position',
'created_at' => 'Created At', 'created_at' => 'Created At',
...@@ -133,27 +134,23 @@ class DocList extends \yii\db\ActiveRecord ...@@ -133,27 +134,23 @@ class DocList extends \yii\db\ActiveRecord
* @param boolean $disabled * @param boolean $disabled
* @return array * @return array
*/ */
public function getParentList($updated, $parent_id = 0, $disabled = false) public function getParentList($updated, $parent_id = 0, $left = 0, $ignore = false)
{ {
$list = []; $list = [];
$thisLevel = DocList::find()->where(['=', 'parent_id', $parent_id])->orderBy(['position' => SORT_ASC])->all(); $thisLevel = DocList::find()->where(['=', 'parent_id', $parent_id])->orderBy(['position' => SORT_ASC])->all();
foreach ($thisLevel as $level) { foreach ($thisLevel as $level) {
if ($updated->id == $level->id) if ($updated->id == $level->id && !$ignore)
$disabled = true; continue;
$curent = [
'id' => $level->id, $l = '';
'text' => $level->lang->name, for ($i = 0; $i < $left; $i++)
'state' => [ $l .= '   ';
'disabled' => $disabled, $leftStr = ($left) ? $l : '';
'selected' => $updated->parent_id == $level->id, $curent [$level->id . ' '] = $leftStr . $level->lang->name;
'expanded' => true, $nodes = $level->getParentList($updated, $level->id, $left + 1);
'checked' => $updated->parent_id == $level->id,
]
];
$nodes = $level->getParentList($updated, $level->id, $disabled);
if ($nodes) if ($nodes)
$curent['nodes'] = $nodes; $curent = array_merge($curent, $nodes);
$list[] = $curent; $list = array_merge($list, $curent);
} }
return $list; return $list;
} }
...@@ -170,9 +167,13 @@ class DocList extends \yii\db\ActiveRecord ...@@ -170,9 +167,13 @@ class DocList extends \yii\db\ActiveRecord
$list = []; $list = [];
$thisLevel = DocList::find()->where(['=', 'parent_id', $parent_id])->orderBy(['position' => SORT_ASC])->all(); $thisLevel = DocList::find()->where(['=', 'parent_id', $parent_id])->orderBy(['position' => SORT_ASC])->all();
foreach ($thisLevel as $level) { foreach ($thisLevel as $level) {
$docContents = $level->docContents;
$url = ($docContents) ? $docContents[0]->lang->url : '';
$curent = [ $curent = [
'id' => $level->id, 'id' => $level->id,
'text' => $level->lang->name, 'text' => $level->lang->name,
'url' => '/' . $url,
'state' => [ 'state' => [
'selected' => $updated->id == $level->id, 'selected' => $updated->id == $level->id,
'expanded' => true, 'expanded' => true,
...@@ -187,4 +188,34 @@ class DocList extends \yii\db\ActiveRecord ...@@ -187,4 +188,34 @@ class DocList extends \yii\db\ActiveRecord
return $list; return $list;
} }
public function getList($arr, &$open = '', $baseLevel = true)
{
$list = [];
foreach ($arr as $item) {
$ulClass = 'set_in';
if ($baseLevel) {
$ulClass = 'set';
$open = '';
}
$ch = '';
if (isset($item['nodes']) && is_array($item['nodes']))
$ch = $this->getList($item['nodes'], $open, false);
$active = '';
if ($item['url'] == yii::$app->request->url) {
$active = 'active';
}
$list[] = Html::tag('li', Html::a($item['text'], $item['url'], ['class' => $active]) . $ch, ['class' => $open]);
if ($item['url'] == yii::$app->request->url) {
$open = 'active';
}
}
return count($list) ? Html::tag('ul', implode('', $list), ['class' => $ulClass]) : '';
}
public function getFormatedCreatedAt()
{
Yii::$app->formatter->locale = Yii::$app->language;
return Yii::$app->formatter->asDate($this->created_at, "medium");
}
} }
...@@ -67,45 +67,8 @@ DocumentationAsset::register($this); ...@@ -67,45 +67,8 @@ DocumentationAsset::register($this);
<?= $form->field($model, 'priority')->textInput(['maxlength' => 3])->hint('Приоритетность URL относительно других URL на Вашем сайте. Допустимый диапазон значений — от 0.0 до 1.0. Это значение позволяет указать поисковым системам, какие страницы, по Вашему мнению, более важны для сканеров (позволяет задать порядок их обработки ПС). Приоритет страницы по умолчанию — 0.5.') ?> <?= $form->field($model, 'priority')->textInput(['maxlength' => 3])->hint('Приоритетность URL относительно других URL на Вашем сайте. Допустимый диапазон значений — от 0.0 до 1.0. Это значение позволяет указать поисковым системам, какие страницы, по Вашему мнению, более важны для сканеров (позволяет задать порядок их обработки ПС). Приоритет страницы по умолчанию — 0.5.') ?>
<div class="list_list_id"> <?= $form->field($model, 'list_id')->dropDownList($data = $modelDocList->getParentList($model->list,0, 0, true), ['class' => 'form-control', 'prompt'=>'Выберите родительский раздел']) ?>
<div class="hidden" style="display:none">
<?= $form->field($model, 'list_id')->textInput() ?>
</div>
<?php
$data = $modelDocList->getParentListForContent($model->list);
$onSelect = new JsExpression(<<<JS
function (undefined, item) {
$('#doccontent-list_id').val(item.id);
}
JS
);
$groupsContent = TreeView::widget([
'data' => $data,
'size' => TreeView::SIZE_SMALL,
'header' => 'Родитель',
'searchOptions' => [
'inputOptions' => [
'placeholder' => 'Выберите родителя'
],
],
'clientOptions' => [
'multiSelect' => false,
'showIcon' => true,
// 'showCheckbox' => true,
// 'showTags' => false,
'showBorder' => false,
'onNodeSelected' => $onSelect,
'selectedBackColor' => '#79C137',
'borderColor' => '#fff',
],
]);
echo $groupsContent;
?>
</div>
<div class="form-group"> <div class="form-group">
<?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?> <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
</div> </div>
......
...@@ -37,50 +37,15 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all(); ...@@ -37,50 +37,15 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all();
<?= $form->field($content, '[' . $lang_id . ']name')->textInput(['maxlength' => 250])->hint('Название пункта меню.') ?> <?= $form->field($content, '[' . $lang_id . ']name')->textInput(['maxlength' => 250])->hint('Название пункта меню.') ?>
<?= $form->field($content, '[' . $lang_id . ']hint')->textInput(['maxlength' => 250])->hint('Подсказка при наведение на пунтр меню.') ?> <div style="display: none" class="hidden">
<?= $form->field($content, '[' . $lang_id . ']hint')->textInput(['value' => '**', 'maxlength' => 250])->hint('Подсказка при наведение на пунтр меню.') ?>
</div>
</div> </div>
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>
<div class="list_parent_id"> <?= $form->field($model, 'parent_id')->dropDownList($model->getParentList($model), ['class' => 'form-control', 'prompt'=>'Выберите родительский раздел']) ?>
<div class="hidden" style="display:none">
<?= $form->field($model, 'parent_id')->textInput() ?>
</div>
<?php
$data = $model->getParentList($model);
$onSelect = new JsExpression(<<<JS
function (undefined, item) {
$('#doclist-parent_id').val(item.id);
}
JS
);
$groupsContent = TreeView::widget([
'data' => $data,
'size' => TreeView::SIZE_SMALL,
'header' => 'Родитель',
'searchOptions' => [
'inputOptions' => [
'placeholder' => 'Выберите родителя'
],
],
'clientOptions' => [
'multiSelect' => false,
'showIcon' => true,
// 'showCheckbox' => true,
// 'showTags' => false,
'showBorder' => false,
'onNodeSelected' => $onSelect,
'selectedBackColor' => '#79C137',
'borderColor' => '#fff',
],
]);
echo $groupsContent;
?>
</div>
<?= <?=
$form->field($model, 'active', [ $form->field($model, 'active', [
'template' => '{input}<a href="#" class="btn btn-xs btn-success m-l-5 disabled">Пункт меню скрыт от пользователя / Пункт меню виднен для пользователю</a>' 'template' => '{input}<a href="#" class="btn btn-xs btn-success m-l-5 disabled">Пункт меню скрыт от пользователя / Пункт меню виднен для пользователю</a>'
...@@ -97,21 +62,4 @@ JS ...@@ -97,21 +62,4 @@ JS
<?php ActiveForm::end(); ?> <?php ActiveForm::end(); ?>
</div> </div>
\ No newline at end of file
<?php
$js = <<<JS
$('.list_parent_id .list-group-item').click(function(){
if($(this).hasClass('node-disabled'))
return false;
if($(this).hasClass('node-selected')){
$('#doclist-parent_id').val('')
}else{
$('#doclist-parent_id').val($(this).attr('id'))
}
})
JS;
$this->registerJs($js);
?>
\ No newline at end of file
...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
use yii\widgets\Pjax; use yii\widgets\Pjax;
use common\modules\documentation\assets\DocumentationAsset; use common\modules\documentation\assets\DocumentationAsset;
use execut\widget\TreeView;
use yii\web\JsExpression;
use common\modules\documentation\models\DocList; use common\modules\documentation\models\DocList;
/* @var $this \yii\web\View */ /* @var $this \yii\web\View */
...@@ -50,82 +48,60 @@ $ml = $model->lang; ...@@ -50,82 +48,60 @@ $ml = $model->lang;
<div class="container padding-bottom-3x mb-2"> <div class="container padding-bottom-3x mb-2">
<div class="row"> <div class="row">
<!-- Content--> <!-- Content-->
<div class="col-xl-9 col-lg-8 order-lg-2"> <div class="col-xl-8 col-lg-7 order-lg-2">
<!-- Post--> <!-- Post-->
<h1><?= $ml->name ?></h1> <h1><?php echo $ml->name ?></h1>
<div class="single-post-meta"> <div class="single-post-meta">
<div class="meta-link"><i class="icon-clock"></i> 22 февраля 2019 г.</div> <div class="meta-link"><i class="icon-clock"></i><?= $model->list->getFormatedCreatedAt() ?> 22 февраля 2019 г.</div>
</div> </div>
<div> <?php echo $ml->html ?>
<?php echo $ml->html ?>
</div>
</div> </div>
<!-- Sidebar --> <!-- Sidebar -->
<div class="col-xl-3 col-lg-4 order-lg-1"> <div class="col-xl-4 col-lg-5 order-lg-1">
<button class="sidebar-toggle position-left" data-toggle="modal" data-target="#modalBlogSidebar"><i class="icon-layout"></i></button> <button class="sidebar-toggle position-left" data-toggle="modal" data-target="#modalBlogSidebar"><i class="icon-layout"></i></button>
<aside class="sidebar sidebar-offcanvas"> <aside class="sidebar sidebar-offcanvas">
<!-- Widget Categories--> <!-- Widget Categories-->
<section class="widget widget-categories"> <section class="widget widget-categories widget-categories_left">
<h3 class="widget-title text-muted">Разделы документации</h3> <h3 class="widget-title">Разделы документации</h3>
<?php <?php
$data = $modelDocList->getParentListForContent($model->list); $data = $modelDocList->getParentListForContent($model->list);
$onSelect = new JsExpression(<<<JS echo $modelDocList->getList($data);
function (undefined, item) {
$('#doccontent-list_id').val(item.id);
}
JS
);
$groupsContent = TreeView::widget([
'data' => $data,
'template' => TreeView::TEMPLATE_SIMPLE,
'size' => TreeView::SIZE_SMALL,
'header' => 'Родитель',
'clientOptions' => [
'multiSelect' => false,
'showIcon' => true,
'showBorder' => false,
'onNodeSelected' => $onSelect,
'selectedBackColor' => '#79C137',
'borderColor' => '#fff',
],
]);
echo $groupsContent;
?> ?>
<!-- <ul class="set">
<li class="active">
<a href="#">Что такое платформа Taskon</a>
<ul class="set_in" style="display: block;">
<li class="active"><a href="#">Используемые технологии в Taskon</a></li>
<li><a href="#">Что такое платформа Taskon? 0 0 1</a></li>
<li><a href="#">Требования к серверу</a></li>
<li><a href="#">Установка платформы Taskon</a></li>
</ul>
</li>
<li>
<a href="#">Используемые технологии в Taskon</a>
<ul class="set_in">
<li><a href="#">Используемые технологии в Taskon</a></li>
<li><a href="#">Что такое платформа Taskon? 0 0 1</a></li>
<li><a href="#">Требования к серверу</a></li>
<li><a href="#">Установка платформы Taskon</a></li>
</ul>
</li>
<li><a href="#">Что такое платформа Taskon? 0 0 1</a></li>
<li><a href="#">Требования к серверу</a></li>
<li><a href="#">Установка платформы Taskon</a></li>
</ul>-->
</section> </section>
<!-- Widget Featured Posts-->
<section class="widget widget-featured-posts">
<h3 class="widget-title text-muted">Популярные разделы справки</h3>
<!-- Entry-->
<div class="entry">
<div class="entry-thumb"><a href="blog-single-rs.html"><img src="/images/taskon.png" alt="Post"></a></div>
<div class="entry-content">
<h4 class="entry-title"><a href="blog-single-rs.html">Заказать разработку приложения на Taskon</a></h4>
</div>
</div>
<!-- Entry-->
<div class="entry">
<div class="entry-content">
<h4 class="entry-title"><a href="blog-single-rs.html">Как установить Taskon 2.0?</a></h4><span class="entry-meta">Инструкция по установке</span>
</div>
</div>
<!-- Entry-->
<div class="entry">
<div class="entry-thumb"><a href="blog-single-rs.html"><img src="/images/taskon.png" alt="Post"></a></div>
<div class="entry-content">
<h4 class="entry-title"><a href="blog-single-rs.html">Справка для пользователя</a></h4>
<span class="entry-meta">Руководство пользователя для клиентов</span>
</div>
</div>
</section>
<!-- Promo Banner--> <!-- Promo Banner-->
<section class="promo-box" style="background-color: #ccc;"> <section class="promo-box" style="background-image: url(img/banners/01.jpg);">
<!-- Choose between .overlay-dark (#000) or .overlay-light (#fff) with default opacity of 50%. You can overrride default color and opacity values via 'style' attribute.--><span class="overlay-dark" style="opacity: .35;"></span> <!-- Choose between .overlay-dark (#000) or .overlay-light (#fff) with default opacity of 50%. You can overrride default color and opacity values via 'style' attribute.--><span class="overlay-dark" style="opacity: .35;"></span>
<div class="promo-box-content text-center padding-top-1x padding-bottom-1x"> <div class="promo-box-content text-center padding-top-1x padding-bottom-1x">
<h4 class="text-bold text-light text-shadow">Заказать разработку на платформе <br> Taskon 2.0</h4> <h4 class="text-bold text-light text-shadow">Заказать разработку на платформе <br> Taskon 2.0</h4>
...@@ -138,5 +114,4 @@ JS ...@@ -138,5 +114,4 @@ JS
</div> </div>
</div> </div>
</div> </div>
<?= <?= $this->render('@app/views/layouts/footer') ?>
$this->render('@app/views/layouts/footer')?> \ No newline at end of file
\ No newline at end of file
...@@ -193,6 +193,7 @@ return [ ...@@ -193,6 +193,7 @@ return [
'logout' => 'site/logout', 'logout' => 'site/logout',
'activate/<code>' => 'users/user/activate', 'activate/<code>' => 'users/user/activate',
'<page:(/)>' => 'content/page/view', '<page:(/)>' => 'content/page/view',
'<document:(/)>' => 'documentation/page/view',
'<_m>/<_c>/<_a>/<id:\d+>' => '<_m>/<_c>/<_a>', '<_m>/<_c>/<_a>/<id:\d+>' => '<_m>/<_c>/<_a>',
'<_m>/<_c>/<_a>/<page>' => '<_m>/<_c>/<_a>', '<_m>/<_c>/<_a>/<page>' => '<_m>/<_c>/<_a>',
'<_m>/<_c>/<_a>' => '<_m>/<_c>/<_a>', '<_m>/<_c>/<_a>' => '<_m>/<_c>/<_a>',
......
...@@ -5,17 +5,17 @@ RewriteCond %{HTTP_HOST} ^www.task-on\.com$ [NC] ...@@ -5,17 +5,17 @@ RewriteCond %{HTTP_HOST} ^www.task-on\.com$ [NC]
RewriteRule ^(.*)$ http://task-on.com/$1 [R=301,L] RewriteRule ^(.*)$ http://task-on.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ https://task-on.com/ [R=301,L] RewriteRule ^index\.php$ http://task-on.com/ [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} off RewriteCond %{HTTP} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$ RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ https://task-on.com/$1 [R=301,L] RewriteRule ^(.+)/$ http://task-on.com/$1 [R=301,L]
Redirect 301 /portfolio/appl /portfolio Redirect 301 /portfolio/appl /portfolio
......
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