You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.3 KiB
126 lines
3.3 KiB
<?php |
|
|
|
namespace common\modules\pages\entities; |
|
|
|
use common\modules\pages\entities\queries\PageQuery; |
|
use core\behaviors\LanguageBehavior; |
|
use core\behaviors\SluggableRelationBehavior; |
|
use paulzi\nestedsets\NestedSetsBehavior; |
|
use yii\behaviors\TimestampBehavior; |
|
use common\behaviors\WidgetContentBehavior; |
|
use yii\db\ActiveRecord; |
|
use Yii; |
|
|
|
/** |
|
* @property int $id |
|
* @property string $slug |
|
* @property int $created_at |
|
* @property int $updated_at |
|
* @property int $tree |
|
* @property int $lft |
|
* @property int $rgt |
|
* @property int $depth |
|
* @property int $type |
|
* @property int $revision_at |
|
* @property int $revision_id |
|
* |
|
* @method ActiveRecord findTranslation(string $language) |
|
* @method void saveTranslations($translations) |
|
* |
|
* @property ActiveRecord[] translations |
|
* @property ActiveRecord[] translation |
|
* |
|
* @property Page $parent |
|
* @property Page[] $parents |
|
* @property Page[] $children |
|
* @property Page $prev |
|
* @property Page $next |
|
* @mixin NestedSetsBehavior |
|
*/ |
|
class Page extends ActiveRecord |
|
{ |
|
const TYPE_PUBLIC = 0; |
|
const TYPE_REVISION = 1; |
|
const TYPE_PREVIEW = 2; |
|
|
|
public $_form; |
|
|
|
public static function create($form, $slug, $type = Page::TYPE_PUBLIC): self |
|
{ |
|
$page = new static(); |
|
$page->slug = $slug; |
|
$page->type = $type; |
|
|
|
$page->_form = $form; |
|
return $page; |
|
} |
|
|
|
public function edit($form, $slug, $type = Page::TYPE_PUBLIC): void |
|
{ |
|
$this->slug = $slug; |
|
$this->type = $type; |
|
|
|
$this->_form = $form; |
|
} |
|
|
|
public function getSeoTitle(): string |
|
{ |
|
return $this->translation->meta_title ?: $this->translation->title; |
|
} |
|
|
|
public static function tableName(): string |
|
{ |
|
return '{{%pages}}'; |
|
} |
|
|
|
public function behaviors(): array |
|
{ |
|
return [ |
|
[ |
|
'class' => NestedSetsBehavior::class, |
|
'treeAttribute' => 'tree', |
|
], |
|
TimestampBehavior::class, |
|
WidgetContentBehavior::class, |
|
[ |
|
'class' => LanguageBehavior::class, |
|
'virtualClassName' => 'PagesVirtualTranslate', |
|
'translatedLanguages' => \Yii::$app->params['translatedLanguages'], |
|
'relativeField' => 'page_id', |
|
'tableName' => "{{%pages_lng}}", |
|
'attributes' => ['title', 'content', 'meta_title', 'meta_description', 'meta_keywords'], |
|
'defaultLanguage' => \Yii::$app->params['defaultLanguage'], |
|
//'defaultLanguage' => basename(Yii::$app->getBasePath()) === 'backend' ? Yii::$app->language : Yii::$app->params['defaultLanguage'], |
|
], |
|
[ |
|
//'class' => SluggableBehavior::class, |
|
'class' => SluggableRelationBehavior::class, |
|
'attribute' => 'title', |
|
'relation' => 'translation', |
|
//'ensureUnique' => true, |
|
//'preserveNonEmptyValues' => true, |
|
], |
|
]; |
|
} |
|
|
|
public function transactions(): array |
|
{ |
|
return [ |
|
self::SCENARIO_DEFAULT => self::OP_ALL, |
|
]; |
|
} |
|
|
|
public function attributeLabels() { |
|
return [ |
|
'title' => Yii::t('pages', 'Title'), |
|
'slug' => Yii::t('pages', 'Slug'), |
|
'id' => Yii::t('pages', 'ID'), |
|
'content' => Yii::t('pages', 'Content'), |
|
]; |
|
} |
|
|
|
public static function find(): PageQuery |
|
{ |
|
return new PageQuery(static::class); |
|
} |
|
} |