Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.lang.php > #14941

php i xajax z klasy

Newsgroups pl.comp.lang.php
Date 2015-11-17 02:41 -0800
Message-ID <bbd417cc-5df5-4486-a3e2-48b732137f81@googlegroups.com> (permalink)
Subject php i xajax z klasy
From marcin@nicram.net

Show all headers | View raw


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

Back to pl.comp.lang.php | Previous | NextNext in thread | Find similar


Thread

php i xajax z klasy marcin@nicram.net - 2015-11-17 02:41 -0800
  Re: php i xajax z klasy Borys Pogoreło <borys@pl.edu.leszno> - 2015-11-18 03:03 +0100
    Re: php i xajax z klasy marcin@nicram.net - 2015-11-17 23:33 -0800

csiph-web