Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.lang.php > #14941
| 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 |
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 | Next — Next in thread | Find similar
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