public function beforeSave($insert) { $redirectLink = new Redirect(['from' => $this->fullLink]); if (!$this->link) { $this->link = TranslitHelper::to($this->title); } if ($this->isAttributeChanged('parent') || $this->isAttributeChanged('link')) { $this->fullLink = ''; if ($parent = $this->getParentCategory()) { $linkParts = [$parent->link]; while ($parent = $parent->getParentCategory()) { $linkParts[] = $parent->getRelativeLink(); } $this->fullLink = implode('/', $linkParts) . '/'; } $this->fullLink .= $this->link; if ($childs = $this->getChildCategories()) { foreach ($childs as $childCategory) { $childCategory->fullLink = $this->fullLink . '/' . $childCategory->link; $childCategory->save(false); } } $redirectLink->to = $this->fullLink; } if ($redirectLink->to) { $redirectLink->save(); } return parent::beforeSave($insert); // TODO: Change the autogenerated stub }
public function actionCategory($link) { $category = Category::findOne(['fullLink' => $link]); if (!$category) { if ($redirect = Redirect::findOne(['from' => $link])) { return \Yii::$app->response->redirect(yii\helpers\Url::to($redirect->to, true), 301)->send(); } throw new NotFoundHttpException(); } if (!empty($category->parentCategory)) { $this->getView()->params['breadcrumbs'][] = ['label' => $category->parentCategory->title, 'url' => yii\helpers\Url::toRoute(['/' . $category->parentCategory->fullLink], true)]; } return $this->render('category', ['category' => $category, 'dataProvider' => new ActiveDataProvider(['query' => $category->getNews()->with('category'), 'sort' => ['defaultOrder' => ['publishDate' => SORT_DESC]], 'pagination' => ['pageSize' => 5]])]); }