Symfony - функция lint_to() в view'ах

i.chernyshev

Новичок
Symfony - функция link_to() в view'ах

Здравствуйте!

Позавчера на работе посадили писать проект на основе фреймворка symfony (до этого около 2-х лет я писал на Zend Framework'е). Все вроде бы идет спокойно, благо есть документация. Но сейчас столкнулся с некоторой необходимостью... а как удовлетворить эту необходимость в документации не сказано.

А именно сейчас реализовываю локализацию приложения. Все нормально... все понятно. Однако при попытке создать переключатель между языками (ну вы понимаете о чем я: "Выберите язык: en | ru") я не нашел варианта, как оставить пользователся на той же странице, но передать еще параметр language.

Например пользователь находится на странице /articles/show/article/newyear. И вдруг ему захотелось сменить язык интерфейса (прошу заметить, не язык статьи, а именно интерфейса). Встала необходимость создать ссылку напрявляющую на эту же страницу, но передающую дополнительный параметр, например /articles/show/article/newyaer/language/en/.

По совету из документации я строю все ссылки с помощью link_to('link text', 'module/action/'), но в данный момент я не в курсе в каком модуле находится пользователь. Конечно это можно выдрать из $request'a, но нет ли другого - более изящного варианта?
 

findnext

Новичок
скачай готовый плугин и посмотри как он работает, называется sfLanguageSwitchPlugin, если не поймёшь то можешь писать сюда, попробую объяснить.

-~{}~ 07.11.08 19:29:

версия symfony какая?

-~{}~ 07.11.08 19:33:

PHP:
 foreach($sf_data->getRaw('languages') as $language => $information): 
 echo link_to(image_tag($information['image'], array('alt' => $information['title'], 'border' => '0')), $current_module . '/' . $current_action . $information['query'])."   ";
 endforeach;
 

i.chernyshev

Новичок
Автор оригинала: findnext
скачай готовый плугин и посмотри как он работает, называется sfLanguageSwitchPlugin, если не поймёшь то можешь писать сюда, попробую объяснить.

-~{}~ 07.11.08 19:29:

версия symfony какая?

-~{}~ 07.11.08 19:33:

PHP:
 foreach($sf_data->getRaw('languages') as $language => $information): 
 echo link_to(image_tag($information['image'], array('alt' => $information['title'], 'border' => '0')), $current_module . '/' . $current_action . $information['query'])."   ";
 endforeach;
Вся проблема в том, что прописываю я это в layout'e. И когда нахожусь на главной странице, $current_module естественно не доступен.
 

findnext

Новичок
:D а как он у тебя будет доступен если в классе $this->current_module отсутствует....


конечно всё это необходимо унаследовать от класса sfComponents

PHP:
$pathinfo = $this->routing->parse($this->request->getPathInfo());

$this->current_module = $pathinfo['module'];
unset($pathinfo['module']);

$this->current_action = $pathinfo['action'];
unset($pathinfo['action']);

$this->pathinfo = $pathinfo;
-~{}~ 07.11.08 19:54:

а вообще лучше читать API чтобы не гадать, там всё есть. SfComponents::getModuleName ()
или так

sfContext::getInstance()->getModuleName()

sfContext доступен везде...
 

i.chernyshev

Новичок
Прошу прощения... совсем не понял сути... ведь в layout'e не доступно $this->routing. Или уже просто голова забита от переизбытка информации... вы не серчайте, просто действительно устал очень, да и перенасышен уде новой информацией о симфони. Если не трудно, можно поподробнее? С объяснениями?

-~{}~ 07.11.08 19:59:

Не заметил ваших апдейтов... завтра же почитаю на эту тему.
 

findnext

Новичок
i.chernyshev
слишком многое придётся объяснять, в symfony существует гибкая система использования модулей. Мой совет - нужно использовать эту функциональность оптимально иначе получится простой говнокод который можно написать и без symfony.

http://svn.symfony-project.com/plugins/sfLanguageSwitchPlugin/trunk/

вот тут из svn репозитория установите это в качестве модуля и это решит все проблемы.
 
Сверху