Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Własne pluginy
Forum PHP.pl > Forum > PHP
tomazzi
Mam problem, pewnie banalny, ale nie wiem jak wywołać funkcję w stworzonym przez siebie pluginie. Nie chcę korzystać z funkcji dostępnych Zend_Controller_Plugin_Abstract. Chcę sam zdefiniować kiedy funkcja ma być użyta. Jak można to zrobić?
CuteOne
  1. $plugin = new App_Plugin_XYZ();
  2. $plugin -> metoda();


Jak widzisz lekka lipa smile.gif
tomazzi
No rzyczywiście kłopotliwe smile.gif Teraz jeszcze jest kwestia zmuszenia pluginu do działania. Chodzi o to żeby ustawić język na stronie po kliknięciu na link. Mam coś takiego:
Akcja która pobiera parametr języka i ustawia jako lokalny (z tym że język się nie zmienia):
  1. public function indexAction()
  2. {
  3. $this -> _helper->layout()->disableLayout();
  4. if($this->getRequest()->getParam('lan')){
  5. $language = new Tomasz_Controller_Plugin_Language();
  6. $language->SetLanguage($this->getRequest()->getParam('lan'));
  7.  
  8. $this->_helper->redirector('index','workers');
  9. }
  10. }

Plugin:
  1. class Tomasz_Controller_Plugin_Language extends Zend_Controller_Plugin_Abstract
  2. {
  3. public function SetLanguage($language)
  4. {
  5. $translate = Zend_Registry::get('Zend_Translate');
  6. $translate->setLocale($language);
  7. }
  8.  
  9. }

Bootstrap:
  1. public function _initTranslate()
  2. {
  3. $translate = new Zend_Translate(
  4. 'adapter'=>'tmx',
  5. 'content'=>APPLICATION_PATH . DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'languages'.DIRECTORY_SEPARATOR.'tlumaczenia.tmx',
  6. )
  7. );
  8. Zend_Registry::set('Zend_Translate', $translate);
  9. }

CuteOne
Źle podchodzi do tego problemu. Dane, które zapisujesz do rejestru przy następnym requeście przestają istnieć.
Polecam:
- dodać wartość języku (np. en,pl,de) do sesji i z niej pobierać w bootstrapie zapisane wartości
- jako subdomene np. http://en.strona.pl/
- jako prefix routera:
-- normalny url http://strona.pl/index/index/login
-- url z prefixem http://strona.pl/en/index/index/login

Polecam rozwiązanie z sesją/cookie
tomazzi
Nie bardzo wiem jak to zrobić przy użyciu sesji. Najpierw w controllerze robie coś takiego:

  1. class LanguageController extends Zend_Controller_Action
  2. {
  3. private $_session;
  4.  
  5. public function init()
  6. {
  7. $this->_session = new Zend_Session_Namespace("language");
  8. }
  9.  
  10. public function indexAction()
  11. {
  12. $this -> _helper->layout()->disableLayout();
  13. if($this->getRequest()->getParam('lan')!=''){
  14. $this->_session->__set('lan', $this->_getParam('lan'));
  15. $this->_helper->redirector('index','workers');
  16. }
  17. }
  18. }


Jak później mogę odwołać się do tego pola w Bootstrapie?

Ok juz zrobiłem dzięki za pomoc smile.gif
CuteOne
  1. public function _initLangague() {
  2.  
  3. $session = new Zend_Session_Namespace("language");
  4.  
  5. $lan = 'pl'; //domyslny jezyk
  6. if(!empty($session->lan)) {
  7. $lang = $session->lan;
  8. }
  9.  
  10. // Tu twoj plugin, ktory jako parametr metody/konstruktora przyjmie $lang
  11. }


ps. lepiej to wywalić do pluginu (tego zendowskiego smile.gif ) i zarejestrować go w bootstrapie. W ten sposób oczyścisz bootstrapa z niepożądanych śmieci
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.