Сразу просьба не пинать тк с Yii около недели только. Вопрос, вероятно, уже с бородой, но все же...
ПРИНЦИПИАЛЬНЫМ условием явлеется ВОЗВРАТ НА ТУ ЖЕ на страницу после переключения языка на другой
Проблема (точнее непонимание) с переключениями языков в контроллере
URLs сайта:
Код: Выделить всё
http://site.com/en/controller/action/...
http://site.com/ru/controller/action/...
http://site.com/uk/controller/action/...
Код: Выделить всё
'urlManager'=>array(
'class'=>'application.extensions.CLangUrlManager',
'urlFormat'=>'path',
'showScriptName'=>false,
'rules'=>array(
'locale/<lang:\w+>'=>'locale/change',
'<lang:(en|ru|uk)>/<_c:\w+>/<id:\d+>'=>'<_c>/view',
'<lang:(en|ru|uk)>/<_c:\w+>/<_a:\w+>/<id:\d+>'=>'<_c>/<_a>',
'<lang:(en|ru|uk)>/<_c:\w+>/<_a:\w+>'=>'<_c>/<_a>',
'<lang:(en|ru|uk)>'=>'site/index',
),
),
Код: Выделить всё
class Controller extends CController
{
public $layout='//layouts/column1';
public $menu=array();
public $breadcrumbs=array();
public function __construct($id, $module = null)
{
parent::__construct($id, $module);
if (isset($_GET['lang']))
Yii::app()->language = $_GET['lang'];
}
public function redirect($url,$terminate=true,$statusCode=302)
{
if (is_array($url))
{
if(isset ($_GET['lang']))
$url['lang'] = $_GET['lang'];
$route = isset($url[0]) ?: '';
$url = $this->createUrl($route, array_splice($url,1));
}
Yii::app()->getRequest()->redirect($url,$terminate,$statusCode);
}
}
Код: Выделить всё
class Html extends CHtml
{
public static function link($text, $url = '#', $htmlOptions = array())
{
if(is_array($url))
{
if(isset ($_GET['lang']))
{
$url['lang'] = $_GET['lang'];
}
}
if($url !== '')
$htmlOptions['href'] = self::normalizeUrl($url);
self::clientChange('click',$htmlOptions);
return self::tag('a',$htmlOptions,$text);
}
}
Код: Выделить всё
class CLangUrlManager extends CUrlManager
{
public function createUrl($route, $params=array(), $ampersand='&')
{
$params['lang'] = Yii::app()->language;
return parent::createUrl($route,$params,$ampersand);
}
}
Код: Выделить всё
class LocaleController extends Controller
{
public function actionChange($lang)
{
$lang = (isset($lang)) ?: 'en';
Yii::app()->language = $lang;
$referrer = Yii::app()->getRequest()->urlReferrer;
$urlManager = Yii::app()->getUrlManager();
// ВОТ КОНКРЕТНЫЕ ГРАБЛИ тк urlManager ТРЕБУЕТ Object Request, а не строку
Yii::app()->request->redirect(Yii::app()->createUrl($urlManager->parseUrl($referrer)));
Yii::app()->request->redirect($referrer);
}
}
Код: Выделить всё
...
<div class='langs-bar'>
<ul>
<li><?php echo Html::link('Eng', '/locale/en') ?></li>
<li><?php echo Html::link('Rus', '/locale/ru') ?></li>
<li><?php echo Html::link('Ukr', '/locale/uk') ?></li>
</ul>
</div>
...
Заранее спс.