🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.php
Article #231184

php i xajax z klasy

#231184
From: 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
Technical Details
Message-ID: <bbd417cc-5df5-4486-a3e2-48b732137f81@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!i2no4279442igv.0!news-out.google.com!l1ni371igd.0!nntp.google.com!i2no4177136igv.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 10.182.68.113 with SMTP id v17mr1528094obt.2.1447756880035;        Tue, 17 Nov 2015 02:41:20 -0800 (PST)
X-Received: by 10.50.98.67 with SMTP id eg3mr28272igb.1.1447756879979; Tue, 17 Nov 2015 02:41:19 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!i2no4279442igv.0!news-out.google.com!l1ni371igd.0!nntp.google.com!i2no4177136igv.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.php
Date: Tue, 17 Nov 2015 02:41:19 -0800 (PST)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=193.59.33.10; posting-account=vC6_ewoAAADzmxr7l9tz-2nMlykNkrb2
NNTP-Posting-Host: 193.59.33.10
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <bbd417cc-5df5-4486-a3e2-48b732137f81@googlegroups.com>
Subject: php i xajax z klasy
From: marcin@nicram.net
Injection-Date: Tue, 17 Nov 2015 10:41:19 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit