Temat nie aktualny, rozwiązałem to w inny sposób. Nie długo będzie publiczne i może Tomek zaakceptuje pull requesta :) w sumie plugin nie będzie dotykał nic co w core :)
W dniu 12 kwietnia 2018 12:30 użytkownik Marcin marcin@nicram.net napisał:
Napotkałem inny problem. Generanie robię tak, że po xajaxie odpalam funkcję pobierającą listę faktur i ta zwraca mi wywyłanie funkcji javascriptowej i jako argument podaje tablicę faktur.
w templejtece: var stop = false;
function *stopPrinting()* { console.log('stopPrinting executed') stop = true }
function *printInvoice(ids)*{ console.log('dostalem dane', ids)
if (ids.length < 1) { alert('No invoices found.') return }
ids.forEach(function (id) { if (stop === true) { console.log('jest zatrzymane'); return; } console.log('sprawdzam stop:', stop) xajax_printInvoice(id) }) stop = true;
}
function *fiscalize()* { if ($('form[name="fiscalizeinvoices"] select[name="division"]').val() == '0') { alert('{trans("Division not selected!")}'); return; } stop = false xajax_getInvoices(JSON.stringify($('form[name="fiscalizeinvoices"]'). serializeArray())); }
funkcję fiscalize() odpalam z "przycisku" po wybraniu wartości z formularza teraz w php mam :
function *getInvoices($form)*{ $obj = new xajaxResponse();
$formArray = json_decode($form, true); $data = []; foreach ($formArray as $item){ // item['name] $item['value'] $data[$item['name']] = $item['value']; } //to wyliczenia dat itp
$invoices = LMSHelper::getInvoices($date['from'], $date['to'], htmlspecialchars($data['customer_type']), (int)$data['customer'], (int)$data['division'], (int)$data['group'], (isset($data['groupexclude']) ? true : false));
*$obj->call('printInvoice', $invoices);*
return $obj; }
function *printInvoice($id)*{ $obj = new xajaxResponse(); if ($id == '277333'){ $obj->call('stopPrinting'); } else { $obj->append('novitusLog', 'innerHTML', '<p>Wydrukowana faktura: '.$id.'</p>'); } return $obj; }
w funkcji printInvoice robię testowe i jeśli id faktury, docelowo w tym miejscu błąd, i jeśli pojawi się błąd chce przestać drukować resztę faktur.
problem mój polega, że jak zwracam $obj->call('printInvoice', $invoices) to przeglądarka wywołuje tę funkcję tyle razy ile jest faktur a zwrotki przychodzą po jakimś czasie. chciałbym aby funkcja w javascript printInvoice() zaczekała na to co zwróci xajax_printInvoice(id) i dopiero wtedy szła dalej, czyli by ta funkcja była synchroniczna. Jak to osiągnąć?
W dniu 12 kwietnia 2018 10:36 użytkownik Marcin marcin@nicram.net napisał:
Ok, nie za tym "ifem" robiłem przypisanie do zmiennej 'xajax' :)
W dniu 12 kwietnia 2018 09:59 użytkownik Marcin marcin@nicram.net napisał:
Witam Może ktoś podpowie. Jestem na ukończeniu pisania pluginu do drukarki fiskalnej i zostało tylko drukowanie wybranych faktur a chcę to zrobić asynchronicznie z wykorzystaniem xajax by w div z logiem były na bieżąco printowane statusy komunikacji z drukarką.
w module robię funkcję function printInvoice(){ $obj = new xajaxResponse();
$html = '<p>Sukcess</p>';
$obj->assign('novitusLog', 'innerHTML', $html);
return $obj; }
na razie by zwracała mi po prostu statyczny tag htmlowy. w templejtce mam div o id="novitusLog" i do niego chcę pisać logi.
dalej w module rejestruję funkcję i wrzucam do smarty global $LMS; $LMS->InitXajax(); $LMS->RegisterXajaxFunction('printInvoice');
$SMARTY->assign('xajax', $LMS->RunXajax());
w templejtce na samym początku mam {$xajax} ale niestety w tym miejscu czysto, żadne dane javascriptowe są nie drukowane :/
Jak poprawnie to zrobić w LMSie? pomoże ktoś?
-- Pozdrawiam Marcin / nicraM
-- Pozdrawiam Marcin / nicraM
-- Pozdrawiam Marcin / nicraM