AliasableTrait.php 2.21 KB
<?php

namespace backend\traits;

/**
 * =====================================================================================================================
 * Трейт, созданный потому что в админке при нескольких языках в SEO блоке языки выбирались не сортированными,
 * и получалась ситуация, когда в основном блоке информация записывалась в УКР, а в SEO был английский блок
 *
 * @see https://artweb.worksection.ua/project/217415/7120237/
 * Прикрепил фото для наглядности
 * =====================================================================================================================
 */


use artbox\core\models\Alias;
use artbox\core\models\Language;

trait AliasableTrait
{

 

	public function getAliases()
	{
		return $this->hasMany(Alias::className(), ['route' => 'route'])->orderBy(['id' => SORT_ASC]);
	}
    
    /**
     * @return \yii\db\ActiveQuery
     */
    public function getAlias()
    {
        return $this->hasOne(Alias::className(), [ 'route' => 'route' ])
                    ->where(
                        [
                            'language_id' => Language::getCurrent()->id,
                        ]
                    );
    }
    
    /**
     * @return array|\yii\db\ActiveRecord[]
     */
    public function loadAliases()
    {
        $langs = Language::find()
                         ->where(
                             [
                                 'status' => true,
                             ]
                         )
                         ->asArray()
                         ->all();
        
        if ($this->isNewRecord) {
            $aliases = [];
            foreach ($langs as $lang) {
                $aliases[] = new Alias(
                    [
                        'language_id' => $lang['id'],
                    ]
                );
            }
            return $aliases;
        } else {
            return $this->getAliases()
                        ->all();
        }
    }
    
    /**
     * @return string
     */
    abstract public function getRoute();

}