Joomla.it Forum
Non solo Joomla... => Sviluppo => : memo2014 21 Jan 2014, 10:29:46
-
Buongiorno a tutti e complimenti per il vostro fantastico impegno .
Sono un neofita alle prime armi con il mondo joomla e giusto per fare un pò di esperienza sto
provando a scrivere qualcosa da me.
Sono partito prima _non_ utilizzando il pattern mvc. Vorrei giusto capire un paio di cose di base e poi proseguire e progredire.
Detto questo vi espongo il mio piccolo problema:
ho la classica query che vorrei imparare a "paginare" :
$query = "SELECT id, nome, cognome FROM #tabella WHERE categoriaID = valore";
$db->setQuery($query);
$rows = $db->loadObjectList();
jimport('joomla.html.pagination');
<div class="someclass">
<div class="rowid"><?php echo $rows->id; ?><>
<div class="nome"><?php echo $rows->nome; ?><>
<div class="cognome"><?php echo $rows->cognome; ?><>
<?php
$navigazione = new JPagination($rows, 0, 10);
echo $navigazione->getListFooter(); ?>
?>
<>
Riesco a vedere il numero di pagine, ma non riesco a vedere il contenuto della lista,
cioè, non vedo i "records".
Mi dareste una mano ?
Grazie in anticipo.
Memo.
-
ciao e benvenuto sul forum ;D
in J2.5+ il primo parametro del costruttore è un intero, ovvero il numero delle righe. stai vedendo la doc di J1.5?
prova
$navigazione = new JPagination(count($rows), 0, 10);
ciao,
marco
-
$rows è una lista di elementi, non puoi stamparla in questo modo ma devi scorrere la lista stampando di volta in volta i dati che ti interessano.
Vedi qui: http://it2.php.net/manual/it/control-structures.foreach.php
-
[stavo scrivendo la stessa cosa]
guardando meglio il codice: non funziona!
rows è un array di oggetti, quindi non puoi scrivere $rows->id, al massimo $rows[0]->id
stai dimenticando il loop
ciao
-
Ok, prima di tutto grazie per aver risposto !!
Ho capito quindi che devo ciclare :
<?php
$query = "SELECT id, nome, cognome FROM #tabella WHERE categoriaID = valore";
$db->setQuery($query);$rows = $db->loadObjectList();
$navigazione = new JPagination(count($rows), 0, 10);?>
<?php foreach($rows as $row) : ?>
<div class="someclass">
<div class="rowid"><?php echo $row->id; ?><>
<div class="nome"><?php echo $row->nome; ?><>
<div class="cognome"><?php echo $row->cognome; ?><>
<?php endforeach; ?>
Solo che a questo punto non riesco a capire dove "piazzare" la paginazione
-
a naso direi dove vuoi, basta che sia fuori dal ciclo e dopo che hai riempito la variabile ;)
-
Allora... c'è qualcosa che mi sfugge:
se metto la "paginazione" prima del foreach, vedo il numero di pagine, ma mi stampa comunque tutte le righe.
se la metto dopo, ovviamente mi stampa sempre tutte le righe e alla fine (fuori dal foreach) la paginazione.
-
...come d'altronde è giusto che sia! Stampando la paginazione non stai limitando il numero di elementi da visualizzare ma solo stampando l'elenco delle pagine.. Che guida stai seguendo per creare la paginazione?
-
JPagination genera solo i links senza fare nient'altro. sta a te gestire opportunamente la query.
se ti aspettavi di trascinare sullo stage l'oggetto pagination ed indicargli il data source caschi male ;D ;D
scherzi a parte, dato che sei al di fuori del FW, devi gestire tutti i passaggi:
hai bisogno di :
1.
una query per il numero totale di records (se non lo salvi)
2.
una query con il "LIMIT" valorizzato dalle variabili trasmesse da JPagination per prendere la porzione di recordset
3.
passare i valori al costruttore usando variabili per indicargli il limit start così che possa riconoscere la pagina corrente
-
Ok, se prima ero confuso, ora è anche peggio :D
Capisco come prendere il totale dei records
[size=78%]$total = "SELECT count(*) FROM tabella"; //numero totale records[/size]
ma per il "limit" non ho capito :(
-
la clausola limit (in mysql) limita il numero delle righe restituite dalla query.
si mette in fondo alla select
$query = "SELECT id, nome, cognome FROM #tabella WHERE categoriaID = valore LIMIT {$start},{$numrows}";
e prende $numrows righe a partire da $start (parte da 0)
$numrows sarà una costante nel codice (a meno che tu non voglia cambiare il numero dei risultati per pagina), $start te lo passa la paginazione .
ciao
-
Ok, seguendo i vostri preziosi suggerimenti sono giunto a questo:
<?php
$total = 'SELECT COUNT(*) FROM tabella';
$numrows = 10;
jimport('joomla.html.pagination');
$pagination = new JPagination($total, 0, $numrows);
$query = 'SELECT id, nome, cognome FROM tabella WHERE bla = bla LIMIT 0, '.$numrows.'';
$db->setQuery($query);
$rows = $db->loadObjectList();
?>
<?php foreach($rows as $row) : ?>
<div class="blabla"><?php echo $row->bla; ?><>
<?php endforeach; ?>
Non ho ancora ben compreso come impostare il "limitstart".
Con il codice sopra, ovviamente non ho delle pagine perchè la query prende solo i primi dieci..
Grazie per il supporto.
-
non hai più le pagine perché $total è una stringa: hai dimenticato di eseguire la query!!
(int)$total è uguale a zero...
il valore per $start lo trovi nella query string della pagina, dovrebbe essere 'limitstart' (ma verifica)
(parliamo di url, non di db)
quindi
$start=JRequest::getInt('limitstart',0);
ciao,
marco
-
Wow, bel passo in avanti !! grazie !!
Supporto meraviglioso! non ho parole !
Grazie !
-
dimenticavo:
un [risolto] nel titolo del post di apertura aiuta anche gli altri, non dimenticarlo anche tu ;)
ciao,
marco
-
;)