🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.php
3 messages
3 total messages Started by marcin Tue, 17 Nov 2015 10:41
php i xajax z klasy
#231184
Author: marcin
Date: Tue, 17 Nov 2015 10:41
73 lines
3678 bytes
Witam
Piszę mały dodatek do projektu lms (https://github.com/lmsgit/lms) w postaci pluginu, który jest rejestrowany za pomocą hook'ów. podczas wykonywania index.php łapie "moduł" z modules i są tam hooki które mogę zarejestrować własne klasy. mogę również stworzyć pliki swoich modułów.
Jeśli wczutuje swój cały moduł bez wykorzystania hooków z core (?m=mojmodul) to moduł mój pisze do smarty, rejestruję w nim funkcje xajax i to działa. Generalnie funkcja dla xajaxa jest napisana bezpośrednio w pliku modułu, który odapalany jest bezpośrednio.
problem jest jeśli rejestruję funkcję dla xajaxa w wywoływanej klasie z hooka. docelowo w kodzie html pojawia się wpis xajaxowy o zarejestrowanej funkcji, wywołanie skutkuje postem ale nie ma żadnej odpowiedzi :/
fragmenty kodu:

wywoływany hook z defaultowego modułu customerinfo
#v+
$hook_data = $LMS->executeHook(
	'customerinfo_before_display',
	array(
		'customerinfo' => $customerinfo,
		'smarty' => $SMARTY,
	)
);
$customerinfo = $hook_data['customerinfo'];
#v-

Ja w swoim pluginie przechwytuję i rejestruję swoją funkcję:
#v+
'customerinfo_before_display' => array(
'class' => 'EvioCustomerList',
'method' => 'stbCustomerInfo')
#v-

teraz clasa ta wygląda tak:
#v+
class EvioCustomerList {
    protected $stb;

    public function __construct() {    
        $this->stb = Evio::get_conn();
    }
   
    public function doAdd($a, $b)
{
    $response = new xajaxResponse();
    $response->assign('infotag', 'innerHTML', $a + $b);
    return $response;
}
    public function stbCustomerInfo(array $hook_data) {
        global $SMARTY, $LMS;

        try {
            $res = $this->stb->getUserStb($hook_data['customerinfo']['id']);
            $LMS->InitXajax();
            $LMS->RegisterXajaxFunction(array('doAdd'));

            $SMARTY->assign('xajax', $LMS->RunXajax());
                
            
            $SMARTY->assign('stb',$res);
        } catch (Exception $e) {
            error_log($e);
            die();
        }    
        return $hook_data;
    }
}
#v-

specjalnie rejestruje prostą funkcję dla xajaxa tylko po to by sprawdzić odpowiedzi.

w kodzie html funkcję tą wywołuję:
#v+
... onclick="xajax_doAdd(1,4);" ...
#v-

niestety nie działa. firebug pokazuje, że funkcja odpytuje się ?m=customerinfo&id=321 ale nie ma żadnej odpowiedzi.

podpowiedzcie jak rozwiązać ten problem, bo męczę się już kolejny dzień i nie działa. w module odpalanym bezpośrednio działa od kliknięcia a z klas niestety nie?

z góry dzieki za pomoc
Re: php i xajax z klasy
#231185
Author: Borys Pogoreło
Date: Wed, 18 Nov 2015 02:03
17 lines
1701 bytes
Dnia Tue, 17 Nov 2015 02:41:19 -0800 (PST), marcin@nicram.net napisał(a):

> niestety nie działa. firebug pokazuje, że funkcja odpytuje się ?m=customerinfo&id=321 ale nie ma żadnej odpowiedzi.
> 
> podpowiedzcie jak rozwiązać ten problem, bo męczę się już kolejny dzień i nie działa. w module odpalanym bezpośrednio działa od kliknięcia a z klas niestety nie?

Wprawdzie nie mam bladego pojęcia jak działa ten lms, ale z tego co widzę,
to tylko dodajesz zmienną do Smarty, a reszta dzieje się gdzieś w środku.
Podejrzewam, że framework rozpoznaje wywołanie AJAX po nagłówkach i wtedy
inaczej obsługuje odpowiedź do przeglądarki, bo z reguły wtedy spodziewany
jest JSON na wyjściu. Przejrzyj kod i dokumentację, czy nie ma jakiegoś
wyjątku dla takiej sytuacji i nie trzeba ręcznie ustawić jakiegoś
Content-Type.

-- 
Borys Pogoreło
borys(#)leszno,edu,pl
Re: php i xajax z klasy
#231186
Author: marcin
Date: Wed, 18 Nov 2015 07:33
23 lines
2377 bytes
W dniu środa, 18 listopada 2015 03:03:37 UTC+1 użytkownik Borys Pogoreło napisał:
> Dnia Tue, 17 Nov 2015 02:41:19 -0800 (PST), marcin@nicram.net napisał(a):
> 
> > niestety nie działa. firebug pokazuje, że funkcja odpytuje się ?m=customerinfo&id=321 ale nie ma żadnej odpowiedzi.
> > 
> > podpowiedzcie jak rozwiązać ten problem, bo męczę się już kolejny dzień i nie działa. w module odpalanym bezpośrednio działa od kliknięcia a z klas niestety nie?
> 
> Wprawdzie nie mam bladego pojęcia jak działa ten lms, ale z tego co widzę,
> to tylko dodajesz zmienną do Smarty, a reszta dzieje się gdzieś w środku.
> Podejrzewam, że framework rozpoznaje wywołanie AJAX po nagłówkach i wtedy
> inaczej obsługuje odpowiedź do przeglądarki, bo z reguły wtedy spodziewany
> jest JSON na wyjściu. Przejrzyj kod i dokumentację, czy nie ma jakiegoś
> wyjątku dla takiej sytuacji i nie trzeba ręcznie ustawić jakiegoś
> Content-Type.
> 
> -- 
> Borys Pogoreło
> borys(#)leszno,edu,pl

Hej
Tak, zgadza się. Lms sprawdza POST i wtedy routing rejestruje funkcjie itd.

Pozdrawiam.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads