Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> jQuery $.get wyświetla jeszcze raz layout i akcję kontrolera.
callwith
post 20.11.2011, 13:16:56
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.11.2011

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


Mam taki problem, w prostym frameworku PHP MVC, gdy za pomocą funkcji jQuery w widoku pobieram dane z kontrolera to oprócz tych danych wyświetla się jeszcze raz layout i akcja, problem wynika pewnie z tego że za pomocą URL w rzeczonej funkcji jQuery uruchamiam jeszcze raz tę funkcję krórej wywołanie jest w pliku php inicjujacym działanie frameworku;
  1. public function run($action, $params = array())
  2. {
  3. $this->setParams($params);
  4. $this->_templateName = $action;
  5. $this->setContext('title', ucfirst($this->_getControllerShortName()) . ' - ' . $action);
  6. $methodName = $action . 'Action';
  7. if (method_exists($this, $methodName)) {
  8. $this->$methodName();
  9. extract($this->_context);
  10. // tu jest require dla layout'u, może ktoś wie jak powiedzieć php żeby ponownie nie uruchamiać tego require'a, domyślam się ze trzeba zastosować odpowiednią instrukcję warunkową, ale jak ma wyglądac to niestety nie wiem, dlatego proszę o pomoc
  11. require_once PROJECT_DIRECTORY . DIRECTORY_SEPARATOR . 'views' .
  12. DIRECTORY_SEPARATOR . 'layouts' . DIRECTORY_SEPARATOR .
  13. $this->_layoutName . '.phtml';
  14. } else {
  15. $controller->run('notfound', $this->getParams());
  16. }
  17. }


może będzie ktoś w stanie mi doradzić jak sobie z tym poradzić;
Go to the top of the page
+Quote Post
mortus
post 20.11.2011, 13:36:27
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Trzeba zastosować instrukcję warunkową, która sprawdzi, czy żądanie jest żądaniem AJAX-owym:
  1. if($this->getRequest()->isXmlHttpRequest()) {
  2. // wyłączamy renderowanie widoku
  3. $this->getHelper('viewRenderer')->setNoRender();
  4. // zwracamy tylko dane, metoda realizacji dowolna, np.
  5. $this->getResponse()->setBody('Hello World!');
  6. } else {
  7. // renderujemy layout i widok
  8. require_once PROJECT_DIRECTORY . DIRECTORY_SEPARATOR . 'views' .
  9. DIRECTORY_SEPARATOR . 'layouts' . DIRECTORY_SEPARATOR .
  10. $this->_layoutName . '.phtml';
  11. }

Metoda isXmlHttpRequest() działa z bibliotekami JS:
- Prototype and Scriptaculous (and libraries derived from Prototype),
- Yahoo! UI Library,
- jQuery,
- MochiKit.
Go to the top of the page
+Quote Post
callwith
post 20.11.2011, 14:10:21
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.11.2011

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


dzięki mortus, rozjaśniło mi to trochę sprawę , ale ta metoda jest dla Zend Frameworka, a ja się bawię z takim custom framewokiem którego znalazłem w sieci i trochę przebudowałem i rozbudowałem, ale zatrzymałem się własnie w momecie jak chciałem zaimplementować ajaxowe ładowanie danych, mój poblem jest podobny do opisanego tu

Ten post edytował callwith 20.11.2011, 14:23:06
Go to the top of the page
+Quote Post
mortus
post 20.11.2011, 14:28:37
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


ZF-owa metoda isXmlHttpRequest() to nic innego jak sprawdzenie zawartości superglobalnej tablicy $_SERVER pod kątem obecności odpowiedniego nagłówka. Jeśli ten framework nie implementuje odpowiedniej metody, to w PHP robisz tak:
  1. if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  2. // zwracamy dane w odpowiadającej nam formie i zatrzymujemy działanie skryptu, żeby nie dopytywał się o layout i widok
  3. die();
  4. } else {
  5. // renderujemy layout i widok
  6. }
Go to the top of the page
+Quote Post
callwith
post 20.11.2011, 15:32:16
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 1.11.2011

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


mortus jesteś wielki, serdecznie dziękuje za pomoc, o to właśnie chodziło, działa prawidłowo, ten kawałek kodu który mi podsunąłeś:


  1. if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  2. // zwracamy dane w odpowiadającej nam formie i zatrzymujemy działanie skryptu, żeby nie dopytywał się o layout i widok
  3. die();
  4. } else {
  5. // renderujemy layout i widok
  6. }


wystarczyło umieścić w akcji kontrolera wywołującej widok z użyciem ajaxu, na pewno nie tylko mi ale i innym początkującym przyda się ta rada, wielki szacunek dla Ciebie ze jako bardziej zaawansowany programista chciałeś się pochylić na problemami początkującego, cieszę się tym bardziej ze od dłuższego czasu próbowałem sobie z problemem ładowań ajaxowych w php mvc poradzić ale niestety bezskuteczne; tak ze postanowiłem szukać porady na tym forum, dzięki jeszcze raz mortus,
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 Wersja Lo-Fi Aktualny czas: 8.08.2025 - 06:00