Newsgroup: it.comp.www.php
Titolo: paginazione particolare di 2 cicli nidificati

Salve a tutti,
ho un problema che sta diventando un vero nodo da sciogliere; ho la
necessita' di avere una paginazione particolare in cui ci sono 2 cicli for
.. while nidificati. Mi spego meglio:
1) Devo stampare un documento tipo fattura in cui , dopo aver stampato la
testata, mi peschi da una tabella ddt il numero e la data del ddt e da una
tabella dettaglifatture le righe di fattura collegate a quel determinato
ddt.
Ora, normalmente, la paginazione tiene conto delle righe di una tabella e,
fissando un limite di 30 righe per pagina, riuscivo a paginare. Il
problema sorge perche' non riesco a calcolarmi il totale di righi (non
sapendolo a priori) in questo modo:
numero ddt
numero righe collegate a quel ddt
Come faccio a fare in modo che, arrivato a una determinata lunghezza di
pagina,, mi vada a pagina successiva magari indipendentemente dalle righe,
cioe' calcolando lo spazio della lunghezza pagina.
Sper di essermi spiegato altrimenti cerchero' di dettagliarmi meglio a
chi, ringraziandolo anticipatamente, dara' uno sguardo a quesa richiesta.
Grazie a tutti e buon lavoro
Giovanni
---------------------------------------------------------------------------
Messaggio inviato attraverso 
http://www.trucchiperpc.it
 - sezione newsgroup

 chi, ringraziandolo anticipatamente, dara' uno sguardo a quesa richiesta.
Cerca di essere più preciso e vedremo cosa si può fare.
-- 
Domenico Testa - Studente

ddt.
Cioe', diciamo che se hai due DDT di 15 righe l'uno, li vuoi in una
sola pagina, ma se sono uno di 20 e uno di 15, li vuoi come?
	a) Una pagina con il primo, 20 righe
	   Una col secondo
	b) Una pagina col primo, e le prime 10 righe del secondo
	   Una con le 5 righe rimanenti
Credo che tu voglia il primo caso.
Ti basta salvarti l'HTML di ogni fattura in un oggetto $HTML, cioe'
invece di fare
	print "FATTURA<br/>";
fai
	$HTML .= "FATTURA<br/>";
e cosi' via. E nel frattempo conti le righe.
Quando sei a fine fattura, decidi cosa fare:
	if (condizione)
		saltopagina();
	print $HTML;
Leonardo

Forse non mi sono spiegato molto bene...
Allora:
1) ho un database Mysql con 2 tabelle: la prima di nome ddt contiene
idddt - nddt - dataddt ... 
la seconda di nome dettaglivendite contiene
iddettagliovendita - idvendita - idddt (il rif. al ddt della tabella
precedente) ... ecc.
Devo stampare una fattrua che e' fatta cosi':
------------------------------------------------------------
ZONA HEADER dove stampo la testata della fattura
------------------------------------------------------------
Contenuto delle righe di fattura:
qui apro un primo ciclo for ... while per pescare i riferimenti ai ddt
---------------------
DDt n. 444 del 03/03/03  (pesco i dati dalla tabella ddt ... WHERE idddt =
$idddt ... group by idddt
----------------------
qui c'e' il secondo ciclo for ... while dove pesco i dati dei dettagli
anche in base al n. di ddt
tiga n. 1 ....
riga n. 2 ...
riga n. 3 ...
----------------------
DDt n. 445 del 04/03/03  (pesco i dati dalla tabella ddt
----------------------
tiga n. 1 ....
riga n. 2 ...
riga n. 3 ...
e cosi' via...
siccome la pagina (formato A4) non e' infinita, devo ovviamente paginare.
Il problema nasche dal fatto che ci sono 2 cicli nidificati. 
Non so quindi come fare in modo di leggere le righe dei 2 cicli, o meglio
ci riesco ma non mi funziona la paginazione ...
Ecco, spero, stavolta di essere stato piu' chiaro.
Grazie a chiunque volesse e/o potesse rispondermi.


ci riesco ma non mi funziona la paginazione...
Be', ogni volta che spari fuori una riga (e lo sai: print "...<br/>"),
incrementi un contatore di riga.
Se vuoi raggruppare i DDT, in modo che nessuno finisca a meta' pagina,
e meta' per la successiva (widow/orphan control), "stampali" dentro ad
una variabile $DDT_HTML di cui conti le righe. E quando il DDT finisce
vedi se ti conviene prima stamparlo e poi paginare, o prima paginare e
poi stamparlo a pagina nuova.
Se non ti funziona la paginazione... ma tu come la fai la paginazione?
Ho il dubbio che tu usi delle tabelle. Se e' cosi', ricordati che devi
chiudere la tabella e riaprirla quando pagini. Nulla di complicato, e'
sufficiente proprio un brutale </TABLE> seguito dalla paginazione e da
<TABLE $parametri>.
Leonardo

 Leonardo
---------------------------------------------------------------------------
