From 376a557b3bec9660a690b106c375bc48de4a163c Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Thu, 11 Feb 2016 17:17:32 +0200 Subject: [PATCH] 09.02.16 --- common/behaviors/Slug.php | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ common/config/main.php | 1 + common/models/Blog.php | 7 +++++++ common/models/User.php | 5 +++++ common/models/UserInfo.php | 2 +- composer.json | 3 ++- composer.lock | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++-------- frontend/config/main.php | 2 ++ frontend/controllers/PerformerController.php | 37 ++++++++++++++++++++++++++++++++++--- frontend/views/accounts/_blog_form.php | 8 ++++---- frontend/views/accounts/employment.php | 39 +++++++++++++++------------------------ frontend/views/performer/_blog_list_view.php | 27 +++++++++++++++++++++++++++ frontend/views/performer/blog-list.php | 96 +++++++++++++++++++++++------------------------------------------------------------------------- frontend/views/performer/blog-view.php | 47 +++++++++-------------------------------------- frontend/views/performer/common.php | 25 ++++++++++++++----------- frontend/web/css/style.css | 4 ++-- 16 files changed, 272 insertions(+), 165 deletions(-) create mode 100644 common/behaviors/Slug.php create mode 100644 frontend/views/performer/_blog_list_view.php diff --git a/common/behaviors/Slug.php b/common/behaviors/Slug.php new file mode 100644 index 0000000..9f13615 --- /dev/null +++ b/common/behaviors/Slug.php @@ -0,0 +1,75 @@ + 'getSlug' + ]; + } + + public function getSlug( $event ) + { + if ( empty( $this->owner->{$this->out_attribute} ) ) { + $this->owner->{$this->out_attribute} = $this->generateSlug( $this->owner->{$this->in_attribute} ); + } else { + $this->owner->{$this->out_attribute} = $this->generateSlug( $this->owner->{$this->out_attribute} ); + } + } + + private function generateSlug( $slug ) + { + $slug = $this->slugify( $slug ); + if ( $this->checkUniqueSlug( $slug ) ) { + return $slug; + } else { + for ( $suffix = 2; !$this->checkUniqueSlug( $new_slug = $slug . '-' . $suffix ); $suffix++ ) {} + return $new_slug; + } + } + + private function slugify( $slug ) + { + if ( $this->translit ) { + return yii\helpers\Inflector::slug( TransliteratorHelper::process( $slug ), '-', true ); + } else { + return $this->slug( $slug, '-', true ); + } + } + + private function slug( $string, $replacement = '-', $lowercase = true ) + { + $string = preg_replace( '/[^\p{L}\p{Nd}]+/u', $replacement, $string ); + $string = trim( $string, $replacement ); + return $lowercase ? strtolower( $string ) : $string; + } + + private function checkUniqueSlug( $slug ) + { + $pk = $this->owner->primaryKey(); + $pk = $pk[0]; + + $condition = $this->out_attribute . ' = :out_attribute'; + $params = [ ':out_attribute' => $slug ]; + if ( !$this->owner->isNewRecord ) { + $condition .= ' and ' . $pk . ' != :pk'; + $params[':pk'] = $this->owner->{$pk}; + } + + return !$this->owner->find() + ->where( $condition, $params ) + ->one(); + } + +} \ No newline at end of file diff --git a/common/config/main.php b/common/config/main.php index 24cf3da..45372c9 100755 --- a/common/config/main.php +++ b/common/config/main.php @@ -1,5 +1,6 @@ 'Europe/Kiev', 'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', 'controllerMap' => [ 'elfinder' => [ diff --git a/common/models/Blog.php b/common/models/Blog.php index e504045..907d542 100644 --- a/common/models/Blog.php +++ b/common/models/Blog.php @@ -30,6 +30,7 @@ return 'blog'; } + /** * @inheritdoc */ @@ -47,6 +48,12 @@ 'updatedAtAttribute' => false, 'value' => new Expression('NOW()'), ], + 'slug' => [ + 'class' => 'common\behaviors\Slug', + 'in_attribute' => 'name', + 'out_attribute' => 'link', + 'translit' => true + ] ]; } diff --git a/common/models/User.php b/common/models/User.php index 189c139..7eba55f 100755 --- a/common/models/User.php +++ b/common/models/User.php @@ -380,6 +380,11 @@ ->viaTable('user_specialization', [ 'user_id' => 'id' ]); } + public function getBlog() + { + return $this->hasMany(Blog::className(), [ 'user_id' => 'id' ]); + } + public function getSpecializationInput() { return $this->getSpecializations() diff --git a/common/models/UserInfo.php b/common/models/UserInfo.php index 286c0b6..9d9dd1b 100755 --- a/common/models/UserInfo.php +++ b/common/models/UserInfo.php @@ -79,7 +79,7 @@ class UserInfo extends \yii\db\ActiveRecord public function getLastVisit(){ - return \Yii::$app->formatter->asRelativeTime(date('Y-m-d h:m:s',strtotime($this->date_visit))); + return \Yii::$app->formatter->asRelativeTime(new \DateTime($this->date_visit)); } diff --git a/composer.json b/composer.json index 5b7014e..f30dab2 100755 --- a/composer.json +++ b/composer.json @@ -26,7 +26,8 @@ "nodge/yii2-eauth": "*", "yiisoft/yii2-imagine": "^2.0", "mihaildev/yii2-elfinder": "^1.1", - "kartik-v/yii2-widget-colorinput": "*" + "kartik-v/yii2-widget-colorinput": "*", + "2amigos/yii2-transliterator-helper": "*" }, "require-dev": { "yiisoft/yii2-codeception": "*", diff --git a/composer.lock b/composer.lock index 32647d9..8209c4d 100755 --- a/composer.lock +++ b/composer.lock @@ -4,10 +4,53 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "f958ed2e8b3c8028fd675954db6672d5", - "content-hash": "d6ebcd3630219974938579b63b419fdd", + "hash": "ccb155d1fc69bc6d276c50f0990fa1d7", + "content-hash": "ec129e7be083837c52b871f4c8ec7f56", "packages": [ { + "name": "2amigos/yii2-transliterator-helper", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/2amigos/yii2-transliterator-helper.git", + "reference": "1e4284351f4250a8f2ce553ea4f420fcbb424309" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/2amigos/yii2-transliterator-helper/zipball/1e4284351f4250a8f2ce553ea4f420fcbb424309", + "reference": "1e4284351f4250a8f2ce553ea4f420fcbb424309", + "shasum": "" + }, + "require": { + "yiisoft/yii2": "*" + }, + "type": "yii2-extension", + "autoload": { + "psr-4": { + "dosamigos\\transliterator\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Antonio Ramirez", + "email": "ramirez.cobos@gmail.com", + "homepage": "http://www.ramirezcobos.com" + } + ], + "description": "Transliterator Helper for Yii2.", + "keywords": [ + "extension", + "helper", + "transliterator", + "yii" + ], + "time": "2014-06-23 14:01:30" + }, + { "name": "almasaeed2010/adminlte", "version": "v2.3.2", "source": { @@ -324,7 +367,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cebe/markdown/zipball/35d47fe727a453a8aa5c6be7e627caad8f16d586", + "url": "https://api.github.com/repos/cebe/markdown/zipball/e4499350d8a94c4c693a7e784295eff7a717ae67", "reference": "d7b6f46cd423174c8a86c7f816dea45008dbf454", "shasum": "" }, @@ -1138,7 +1181,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/7ccbfdf4cfb0ce025e27455dc3e516af23eb2800", + "url": "https://api.github.com/repos/yiisoft/yii2-framework/zipball/1800d3840b098fc6e936852fa84b8c1b1a0a2e57", "reference": "7ccbfdf4cfb0ce025e27455dc3e516af23eb2800", "shasum": "" }, @@ -1278,12 +1321,12 @@ "source": { "type": "git", "url": "https://github.com/yiisoft/yii2-composer.git", - "reference": "574dcb1d101ae55be230e0c00a2428af6ec4c5c1" + "reference": "d33d1046a5951f2f7823fe343f28ddc58b3421a4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/yiisoft/yii2-composer/zipball/d33d1046a5951f2f7823fe343f28ddc58b3421a4", - "reference": "574dcb1d101ae55be230e0c00a2428af6ec4c5c1", + "reference": "d33d1046a5951f2f7823fe343f28ddc58b3421a4", "shasum": "" }, "require": { @@ -1317,7 +1360,7 @@ "extension installer", "yii2" ], - "time": "2015-12-01 20:06:03" + "time": "2016-02-06 01:03:32" }, { "name": "yiisoft/yii2-imagine", @@ -1506,7 +1549,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/8d8e0e1a6151a46ea5cda344e2234b7225c61e7a", + "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/ff1d463edb2c74e39f4ec76f7eb99fd47b237507", "reference": "b312ab9d0c446971069e22a524fec01c7cddc75e", "shasum": "" }, diff --git a/frontend/config/main.php b/frontend/config/main.php index e3f8bad..ef5c9c8 100755 --- a/frontend/config/main.php +++ b/frontend/config/main.php @@ -64,7 +64,9 @@ return [ 'showScriptName' => false, 'rules' => [ 'landing/' => 'landing/view', + 'performer/blog-view//' => 'performer/blog-view', 'performer//' => 'performer/', + ] ], ], diff --git a/frontend/controllers/PerformerController.php b/frontend/controllers/PerformerController.php index 0452da5..551a2ec 100755 --- a/frontend/controllers/PerformerController.php +++ b/frontend/controllers/PerformerController.php @@ -1,8 +1,11 @@ $performer_id]); + + $countQuery = clone $query; + + $pagination = new Pagination(['totalCount' => $countQuery->count(), + 'pageSize' => 5, + ]); + + $article = $query->offset($pagination->offset) + ->limit($pagination->limit) + ->all(); + + $blog = new ArrayDataProvider([ + 'allModels' => $article, + ]); + + return $this->render('blog-list',[ - 'user' => $user + 'user' => $user, + 'blog' => $blog, + 'pagination' => $pagination ]); } - public function actionBlogView(/*$performer_id, $article_id*/) + public function actionBlogView($performer_id, $link) { - return $this->render('blog-view'); + $user = User::findOne($performer_id); + $article = Blog::findOne(['link'=>$link,'user_id'=>$performer_id]); + + + return $this->render('blog-view',[ + 'user' => $user, + 'article' =>$article, + + ]); } public function actionReview($performer_id) diff --git a/frontend/views/accounts/_blog_form.php b/frontend/views/accounts/_blog_form.php index 157d6c8..0bd4c20 100644 --- a/frontend/views/accounts/_blog_form.php +++ b/frontend/views/accounts/_blog_form.php @@ -43,18 +43,18 @@ - $blog, 'field'=>'cover', - 'width'=>100, - 'height'=>100, + 'width'=>340, + 'height'=>260, 'multi'=>false, 'gallery' =>$blog->cover, 'name' => 'Загрузить главное фото' ]); ?> - */ ?> +
'input-blocks-wrapper button']) ?> diff --git a/frontend/views/accounts/employment.php b/frontend/views/accounts/employment.php index 864c9d5..d358fc2 100755 --- a/frontend/views/accounts/employment.php +++ b/frontend/views/accounts/employment.php @@ -6,7 +6,7 @@ use common\models\Job; use yii\helpers\Html; use yii\jui\DatePicker; use yii\widgets\ActiveForm; -//HUUIISAODASIDSIA + $this->title = 'Трудовой стаж'; $this->params['breadcrumbs'][] = $this->title; ?> @@ -144,7 +144,7 @@ $current = array_shift ($job); ?>
- 'remove_job_button']) ?> + @@ -154,26 +154,17 @@ $current = array_shift ($job); echo Html::submitButton('Обновить'); $form->end (); ?> - + diff --git a/frontend/views/performer/_blog_list_view.php b/frontend/views/performer/_blog_list_view.php new file mode 100644 index 0000000..c4b046b --- /dev/null +++ b/frontend/views/performer/_blog_list_view.php @@ -0,0 +1,27 @@ + +
+
+ name, Url::toRoute(['performer/blog-view','performer_id'=>$this->params['user']->id,'link'=>$model->link]),['class'=>'blog-new-link']);?> +
+
+ +
+

view_count?>

+
+
+

view_count?>

+
+
+
+ cover), Url::toRoute(['/performer/blog-view','performer_id'=>$this->params['user']->id,'link'=>$model->link]));?> + description, 0, 1500)?> +
+ Подробнее', Url::toRoute(['performer/blog-view','performer_id'=>$this->params['user']->id,'link'=>$model->link]),['class'=>'blog-post-see-all style']);?> +
\ No newline at end of file diff --git a/frontend/views/performer/blog-list.php b/frontend/views/performer/blog-list.php index b961b01..8f02720 100755 --- a/frontend/views/performer/blog-list.php +++ b/frontend/views/performer/blog-list.php @@ -1,87 +1,37 @@ params['user'] = $user; $this->title = 'My Yii Application'; ?>
-
-

Как обшить балкон вагонкой своими руками: пошаговая инструкция

-
- -
-

240

-
-
-

12

-
-
-
- -

Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

-

Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно

-

Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ. Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.

-
- Подробнее -
-
-

Как обшить балкон вагонкой своими руками: пошаговая инструкция

-
- -
-

240

-
-
-

12

-
-
-
- -

Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

-

Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно

-

Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ. Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.

-
- Подробнее -
- -
-

Как обшить балкон вагонкой своими руками: пошаговая инструкция

-
- -
-

240

-
-
-

12

-
-
-
- -

Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ.

-

Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно

-

Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне возможно выполнить своими силами — достаточно иметь в распоряжении необходимые инструменты и владеть базовыми навыками строительно-ремонтных работ. Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.

-
- Подробнее -
+ $blog, + 'itemView'=>'_blog_list_view', + 'summary'=>'', + ] ); + ?>
diff --git a/frontend/views/performer/blog-view.php b/frontend/views/performer/blog-view.php index 26ade94..9c69a35 100755 --- a/frontend/views/performer/blog-view.php +++ b/frontend/views/performer/blog-view.php @@ -2,58 +2,29 @@ use \yii\helpers\Html; /* @var $this yii\web\View */ -$this->params['user'] = $user; - $this->title = 'My Yii Application'; + $this->params['user'] = $user; + + $this->title = $article->name ; ?>
-

Как обшить балкон вагонкой своими руками: пошаговая - инструкция

+

name ?>

-

240

+

view_count?>

-

12

+

view_count?>

- -

Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне - возможно выполнить своими силами — достаточно иметь в распоряжении необходимые - инструменты и владеть базовыми навыками строительно-ремонтных работ.

-

Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из - плотно пригнанных элементов с качественно обработанной поверхностью. Толщина - евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 - мм.Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки - вполне возможно выполнить своими силами — достаточно

-

Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне - возможно выполнить своими силами — достаточно иметь в распоряжении необходимые - инструменты и владеть базовыми навыками строительно-ремонтных работ. Евровагонка — - удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно - пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки - составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.

- -

Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне - возможно выполнить своими силами — достаточно иметь в распоряжении необходимые - инструменты и владеть базовыми навыками строительно-ремонтных работ.

-

Евровагонка — удобная в монтаже фасонная доска, которая позволяет создать обшивку из - плотно пригнанных элементов с качественно обработанной поверхностью. Толщина - евровагонки составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 - мм.Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки - вполне возможно выполнить своими силами — достаточно

-

Балкон, обшитый вагонкой, выглядит аккуратно, стильно и уютно. Монтаж обшивки вполне - возможно выполнить своими силами — достаточно иметь в распоряжении необходимые - инструменты и владеть базовыми навыками строительно-ремонтных работ. Евровагонка — - удобная в монтаже фасонная доска, которая позволяет создать обшивку из плотно - пригнанных элементов с качественно обработанной поверхностью. Толщина евровагонки - составляет 125 мм, общая ширина (с гребнем) 960 мм, рабочая ширина 880 мм.

+ description ?>
-
\ No newline at end of file + diff --git a/frontend/views/performer/common.php b/frontend/views/performer/common.php index 838e0fb..77d0d74 100755 --- a/frontend/views/performer/common.php +++ b/frontend/views/performer/common.php @@ -131,22 +131,25 @@ $this->title = 'My Yii Application';
-
+ -
- - -
+
+
+ + +
+
-
-
+ -
- - Сайт +
+
+ + Сайт +
-
+
    diff --git a/frontend/web/css/style.css b/frontend/web/css/style.css index 03e58e3..d6f6a10 100755 --- a/frontend/web/css/style.css +++ b/frontend/web/css/style.css @@ -1937,7 +1937,7 @@ input[type=file]::-webkit-file-upload-button { margin-top: 9px; } .blog-post-date { - width: 97px; + width: 140px; height: 100%; float: left; } @@ -5492,4 +5492,4 @@ ul.menu-admin li.logout-li, ul.menu-admin li.logout-li a, ul.menu-admin li:last- } .line-btn-fix button{line-height: normal !important;} a.blog-new-link{font-size: 18px !important; color: inherit !important; text-decoration: none!important;} -a.blog-new-link:hover{text-decoration: underline !important;} \ No newline at end of file +a.blog-new-link:hover{text-decoration: underline !important;} -- libgit2 0.21.4