LanguageMarkupWidget.php 2.72 KB
<?php
    /**
     * Created by PhpStorm.
     * User: timur
     * Date: 04.12.17
     * Time: 14:52
     */
    
    namespace frontend\widgets;
    use artbox\core\models\Language;
    use yii\base\InvalidConfigException;
    use yii\base\Widget;
    use yii\helpers\VarDumper;

    class LanguageMarkupWidget extends Widget
    {
        /**
         * @var $model \artbox\core\models\Page
         */
        public $model;
        /**
         * @var $aliases \artbox\core\models\Alias[]
         */
        public $aliases;
        
        public $languages = ['en', 'ru', 'ua']; // use in all languages that we have
        
        private $renderLinks = [];
        
        public function init()
        {
            
            if (!isset($this->model)){
                
                if ( !isset($this->aliases) ){
                    throw new InvalidConfigException("need model with lang or array of aliases to same page with different langs");
                }
                else{
                    
                    $languages = Language::find()->indexBy('id')->all();
                    //VarDumper::dump($languages[1]->url,10,1);die();
                    foreach ($this->aliases as $alias){
                        if ( in_array($languages[$alias->language_id]->url, $this->languages) ){
                            $this->languageMarkup($alias);
                        }
                    }
                }
            }
            else{
                foreach ($this->model->langs as $pageLang){
                    if (in_array($pageLang->language->url, $this->languages)){
                        $this->languageMarkup($pageLang->alias);
                    }
                }
            }
            
        }
    
        /**
         * @param $alias \artbox\core\models\Alias
         */
        private function languageMarkup($alias){
            $route = json_decode($alias->route)->{'0'};
            
            $url = \yii\helpers\Url::toRoute(
                [
                    $route,
                    'alias' => $alias,
                    'language_id' => $alias->language_id
                ]
            );
            $locale = '';
            if ( $alias->language_id === 2 ){
                $locale = 'ru-UA';
            }
            elseif ($alias->language_id === 3){
                $locale = 'uk-UA';
            }
            elseif ($alias->language_id === 1){
                $locale = 'en-UA';
            }
    
            $this->renderLinks[] = "<link rel=\"alternate\" hreflang=\"$locale\" href=\"$url\" />";
        }
        
        public function run()
        {
            foreach ($this->renderLinks as $renderLink){
                echo $renderLink;
            }
        }
    }