Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Własne pluginy, Zend
tomazzi
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 14.09.2012

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


  1. $plugin = new App_Plugin_XYZ();
  2. $plugin -> metoda();


Jak widzisz lekka lipa smile.gif
Go to the top of the page
+Quote Post
tomazzi
post
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 14.09.2012

Ostrzeżenie: (0%)
-----


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. }



Ten post edytował tomazzi 22.05.2013, 08:18:08
Go to the top of the page
+Quote Post
CuteOne
post
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


Ź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
Go to the top of the page
+Quote Post
tomazzi
post
Post #5





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 14.09.2012

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
CuteOne
post
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 12:35