[Yii 1] Allineamento Orizzontale Dei Risultati In Una Cdetailview

Salve, ho un problema con l’ allineamento nella CDetailView.

Non riesco ad allineare orizzontalmente i dati che mi stampa nella CDetailView.

Si allineano solo verticalmente. Qualcuno sà dirmi come procedere?

Mi serve allinearli orizzontalmente perchè poi dovrò stampare un file pdf della vista stessa.

Oppure se qualcuno è più esperto sarebbe cosi gentile da dirmi come posso creare una vista tramite delle query che mi stampino i dati che mi servono in maniera tale che poi tramite il css riesco a disporli come voglio.

Meglio la seconda opzione se qualcuno sa indirizzarmi.

La CDetailView non va bene perchè, mi sono reso conto, che contiene dei dati che non devo visualizzare nel pdf.

Allego il file della vista Normale di CDetailView e il file di come vorrei si vedesse al momento di generare il pdf.

Grazia a chiunque possa darmi una dritta.

mi viene spontaneo creare una vista ad hoc, usando le tabelle e, cella per cella, esplicitare l’allineamento.

In questo modo le librerie di stampa in pdf dovrebbero essere agevolate nel lavoro.

Se ho capito male la domanda, ti chiedo scusa in anticipo

Anche io seguirei la stessa strada… inutile usare la CDetail che è nata per stampare una tabella ‘predefinita’.

una cosa tipo




<table border = "1">

    <tr>

        <td width="50%"><?php echo $model->clienti->Descrizione; ?></td>

        <td width="50%"><?php echo $model->clienti->PartitaIva; ?></td>

    </tr>

    <tr>

        <td colspan="2" align="center"><?php echo $model->clienti->Localita; ?></td>

    </tr>

</table>



Il problema e che io devo prelevare solo i dati riguardanti un id specifico.

Un po come quando si clicca sull’ id nella vista index e ci viene renderizzato solo quella determinata query.

Nella index devo inserire un pulsante stampa a fianco di ogni singolo id.

Il tasto stampa ha la funzione di puntare alla vista che devo creare per stampare il tutto in pdf come illustrato nell’ allegato “Come lo vorrei vedere”.

Nella CDetailView non riesco a disporre i campi come vorrei che apparissero perchè dispone solo in verticale.

Usando ciò che dice ettolo come posso fare la query in base all’ id??

<td width="50%"><?php echo $model->clienti->Descrizione; ?></td> = mi stampa tutte le descrizioni che ho nella tabella.

A me serve stampare (al click sul pulsante) il singolo contenuto in base al suo ID.

Oddio non so se mi sto spiegando bene.

Praticamente dovrei implementare una Action come l’ actionView che però mi permetta di disporre i dati nella maniera da me desiderata.

Puoi usare la stessa actionView e corrispondente vista view.php se non ti serve ad altro, oppure copiarne il codice per usarlo in una altra action e un’altra view.

Il codice che ti ho scritto l’ho provato nella mia view.php scrivendolo sopra la CDetailView, quindi anche a me riporta i dati di un id specifico

ettolo grazie mille, sbagliavo io. Ora provo l’ implementazione completa ma credo no ci dovrebbero essere problemi.

PS: Sto proponendo un po a tutti di inserire nel titolo [Yii 1] o [Yii 2] così teniamo piu ‘chiaro’ l’elenco thread.

perfetto il tuo codice funziona anche se non riesco ancora ad allineare il tutto come voglio. Ma già ho fatto un passo avanti, piano piano mi risolvo gli allineamenti delle tabelle e sono a cavallo. Grazie

Domandone!!!..se volessi far apparire una valore preso da una tabella esterna alla vista che sto renderizzando per la creazione del pdf come posso fare???

Nel pdf per esempio sto renderizzando i dati provenienti dalla tabella 1, ma se volessi includere nel pdf dei dati che provengono dalla tabella 2 come faccio. Posso recuperare una variabile come recuper l’ username su qualsiasi pagina con <?php echo CHtml::encode(Yii::app()->user->name);?> ?? Come posso fare per far si che al posto dello username mi appaia un altro campo che voglio prelevare da una tabella???

Grazia ancora per le indicazioni che mi fornite.

Puoi usare una cosa tipo:


$cliente = Clienti::model()->findByPk($model->getIdClienti());

Avendo $cliente puoi accedere a tutto, ad esempio:


$descrizione = $cliente->eventualeRelazione->Descrizione;

Questo funziona solo se i modelli sono già correlati… se non lo sono devi caricare il modello di cui vuoi visualizzare qualcosa nel metodo afterFind() del primo modello

puoi fare tutti i render o renderPartial che vuoi, e volendo puoi anche eseguire controller/action diversi da quello in cui ti trovi.

esempio: io ho una app che fa tre report tabellari.

in fase di stampa, faccio 3 renderPartial, tenendo l’output in una variabile, e uso la concatenazione dei tre output per generare un unica pagina a4 pdf…

Vi ringrazio per i preziosi consigli :) ma non dimenticate (non so se ettolo lo sa) che io sono in fase di apprendistato con yii ;D perchè mi sono affacciato a yii circa un mese e mezzo fà!!!

Allora ho la tabella user relazionata BELONGS_TO con un altra tabella e nella tabella user (grazie alla relazione tra le 2) ho il campo che vorrei prelevare in fase di stampa.

In questo caso come dovrei agire? Premetto che la view che sto renderizzando non c’ entra nulla con le due tabelle.

Non so se dico una cazzata (e non me ne vogliate perfavore)…ma mi chiedevo se fosse possibile creare una funzione nella classe CWebUser o RWebUser (che estende CWebUser) che mi permetta di recuperare quel campo come faccio con l’ username dell’ utente, visto che il campo stesso e collegato all’ utente tramite la relations tra le 2 tabelle.

realtebo tu sei troppo avanti in confronto a me :)

Io non so neppure da dove partire per fare 3 renderPartial tenendo l’ output in una variabile e poi concatenarli in fase di stampa °___°

Scusami, in realtà quello ti ho proposto è davvero entry-level.

Quando fa un render/renderPartial, c’è un parametro boolean che dice ad Yii invece di fare l’echo della view, la resituisce

quindi





$view1 = $this->renderPartial(....)

$view2 = $this->renderPartial(....)

$view3 = $this->renderPartial(....)


$out = $view1. "<BR>" . $view2 . "<BR>" . $view3;


$libreria_pdf->output($out);



L’altra domanda:

Se user BELONGS_TO (appartiene a) ‘AltraClasse’ (cioè uno user ha uno ed una solo AltraClasse), allora avendo in User la relazione ‘altraClasse’ poi fare per esempio




$user = User::model()->findByPk(... id utente ... )

$altraClasse = $user->altraClasse; // il nome della relazione

// ... o anche 

$attributo_altra_classe =  $user->altraClasse->attributo_altra_classe

// .. esempio reale di una mia app


$group_name = $user->group->name; // cioè dall'utente leggo a che gruppo appartiene [belongs_to], e da questo accedo all'attributo name del gruppo



Intanto grazie, comem sempre a tutti e due.

realtebo ho provato a fare come fai tu col renderPartial ma se aggiungo le viste mi da errori di sintassi.

Io nell actionStampa ho questo:

public function actionStampa($id)

{

   &#036;dataProvider=new CActiveDataProvider('Telegramma');


   &#036;this-&gt;layout=&quot;//layout/pdf-telegramma&quot;;


   &#036;mPDF1 = Yii::app()-&gt;ePdf-&gt;mpdf();


   &#036;mPDF1-&gt;WriteHTML(&#036;this-&gt;render('stampa',array('model'=&gt;&#036;this-&gt;loadModel(&#036;id)),true));


   &#036;mPDF1-&gt;Output();

}

Se sopra a

$mPDF1->WriteHTML($this->render(‘stampa’,array(‘model’=>$this->loadModel($id)),true));

aggiungo una vista mi da errori.

So che stò sbagliando io, questo è chiaro, potresti solo dirmi come implementare una seconda renderPartial in questa action? Tieni conto che la vista ‘stampa’ la devo renderizzare intera per la stampa, quindi sarebbe l’ output finale.

Nonostante io abbia una relations che lega i 2 model non riesco a stampare l’ attributo che mi serve.

Es:

Ho la relation (in Agenzia model) ‘telegramma’=>array(self::BELONGS_TO, ‘Telegramma’, ‘id’),

e nella view di "Telegramma" dovrei stampare un attributo che risiede nella tabella agenzia.

Scusami, ma a ‘naso’ Agenzia NON può appartenere ad un telegramma, bensì il contrario …

Il motivo per cui non stampa nulla in questo caso è che, secondo me, la relazione relale è che una agenzia ha N telegrammi, per cui per stampare gli attributi dei telegrammi dei fare un foreach su $agenzia->telegrammi as $t e poi usare gli attributi di $t (model ‘Telegramma’)

Per gli errori di sintassi… beh, buon segno, vuole dire che NON è un errore di logica, se mi scrive che errore da ti aiuto

Buondì realtebo, a me serve stampare il nome dell’ agenzia mittente sul telegramma che metto in stampa (la relation è User e Agenzia e nella tabella user ho l’ id dell’ agenzia) che risiede nella tabella agenzia nel campo nome_completo. Ora alla vista user riesco a stampare il nome dell’ agenzia con questo:

_view (user):




<b><?php echo CHtml::encode($data->getAttributeLabel('agenzia_id')); ?>:</b>

	<?php echo CHtml::encode($data->agenzia->nome_completo); ?>

	<br />



Nella view (user) invece per ottenre il nome completo dell’ agenzia:




<?php $this->widget('zii.widgets.CDetailView', array(

	'data'=>$model,

	'attributes'=>array(

        array(

        'label' => 'Agenzia',

         'value' => $model->agenzia->nome_completo

         ),

 )); ?>



Questa è la relazione che ho nel model User:




'agenzia' => array(self::BELONGS_TO, 'Agenzia', 'agenzia_id'),



Cosi nella vista mi stampo il nome dell’ agenzia.

Ora devo far si che alla stampa pdf del telegramma, in alto appaia il nome dell’ agenzia mittente (fatto questo proverò anche per l’ agenzia destinataria - sempre legata a User e a Cap) questo perchè il telegramma è come una raccomandata, solo che non vi è la firma di chi riceve.

Come un defficiente sono incappato in un’ errore del cavolo sbagliando il model nel quale inserire la relation.

Quindi devo inserire nel Model Telegramma:




'agenzia'=>array(self::BELONGS_TO, 'Agenzia', 'agenzia_id')



.

Ora come faccio a far si che questo campo si autocompleti (inserendo automaticamente il nome dell’ agenzia che sta inviando il telegramma) rimanendo “hidden” e che poi venga stampato nel pdf?? Questo è ciò che devo riuscire a fare. Capisco che se non posto codice non puoi aiutarmi più di tanto … se ti serve vedere le relation dei model posso postarle. Conta che ogni user è all’ agenzia di appartenenza e che quindi in base all’ user loggato dovrei riuscire in qualche modo a prelevare il nome dell’ agenzia di appartenenza. Ma ancora non arrivo a capire come.

Cerco di capire i tuoi dubbi, ma per favore quando posti codice racchiudilo tra gli appositi tag




  [code] ... [ /code]



Quindi ci ho preso? Telegramma ha una ed una sola Agenzia ora ?

Per stampare sul pdf il nome dell’agenzia mittente devi fare appunto




echo "Agenzia mittente: ";

echo $model->agenzia->nome_completo;



Questo va inserito nella view "stampa" che avrai di certo sotto la cartella view\telegramma, se ho capito bene il tuo codice di alcuni post fa

Grazie realtebo per la celere risposta.

Il problema è che cosi (avevo già provato) non mi stampa niente nonostante io abbia la relations nel model Telegramma.

Relation:


 'agenzia'=>array(self::BELONGS_TO, 'Agenzia', 'id'), 

Forse non riconosce che l’ utente che in quel momento è connesso, è anche legato a quella agenzia?

Credo che io debba inserire un campo “hidden” autocomplete (all’ interno della tabella telegramma…non so “agenzia_mitt”) che si autocompleta con il nome dell’ agenzia che in quel momento sta postalizzando il telegramma e che questo campo “hidden” venga recuperato al momento della stampa. Per fare questo come devo fare?