Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

Lista utenti registrati con impaginazione wordpress

Cerchi consigli per migliorare il tuo sito? Vuoi aprire un sito in poco tempo?
Discuti con altri webmaster, chiedi chiarimenti ed opinioni in tutta libertà.
Lo spam verrà cancellato.

Lista utenti registrati con impaginazione wordpress

Messaggioda Niper » lun mar 14, 2011 4:27 pm

Ciao ragazzi sono un paio di giorni che mi sono cimentato nella creazione di una directory, o meglio una lista di tutti gli utenti registrati compresi di avatar e link che punta alla pagina autore (author.php). Come prima cosa ho aggiunto un paio di custom field alla pagina profilo di wordpress aggiungendo questo breve codice al mio functions.php (poi in seguito capirete il perché):

Codice: Seleziona tutto
add_filter('user_contactmethods','hide_profile_fields',10,1);

function hide_profile_fields( $contactmethods ) {
unset($contactmethods['aim']);
unset($contactmethods['jabber']);
unset($contactmethods['yim']);
return $contactmethods;
}

function my_new_contactmethods( $contactmethods ) {

$contactmethods['twitter'] = 'Twitter <em>(nome senza @)</em>';
$contactmethods['facebook'] = 'Facebook <em>(nome contatto)</em>';
$contactmethods['linkedin'] = 'LinkedIn <br /><em>(nome profilo pubblico)</em>';

return $contactmethods;
}
add_filter('user_contactmethods','my_new_contactmethods',10,1);


In questo modo ho eliminato Jabber, Yim e aim e aggiunto Twitter, Facebook e linkedin:

Successivamente ho aggiunto questa funzione:

Codice: Seleziona tutto
function contributors() {
global $wpdb;

$authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users WHERE display_name <> 'admin' ORDER BY display_name");

foreach ($authors as $author ) {

echo "<li>";
echo "<a href=\"".get_bloginfo('url')."/author/";
the_author_meta('user_nicename', $author->ID);
echo "/\">";
echo get_avatar($author->ID);
echo "</a>";
echo '<div>';
echo "<a href=\"".get_bloginfo('url')."/author/";
the_author_meta('user_nicename', $author->ID);
echo "/\">";
the_author_meta('display_name', $author->ID);
echo "</a>";
echo "<br />";
echo "SitoWeb: <a href=\"";
the_author_meta('user_url', $author->ID);
echo "/\" target='_blank'>";
the_author_meta('user_url', $author->ID);
echo "</a>";
echo "<br />";
echo "Twitter: <a href=\"http://twitter.com/";
the_author_meta('twitter', $author->ID);
echo "\" target='_blank'>";
the_author_meta('twitter', $author->ID);
echo "</a>";
echo "<br />";
echo "<a href=\"".get_bloginfo('url')."/author/";
the_author_meta('user_nicename', $author->ID);
echo "/\">Visita il Profilo di ";
the_author_meta('display_name', $author->ID);
echo "</a>";
echo "</div>";
echo "</li>";
}
}]


Ho creato una nuova pagina e richiamato la funzione in questo modo:

Codice: Seleziona tutto
<?php
/*
Template Name: Iscritti
*/
get_header(); ?>

<div id="content" class="narrowcolumn">

<div class="post page" id="post-<?php the_ID(); ?>">
<h2 class="title"><?php the_title(); ?></h2>
<div class="entry">

<div id="authorlist"><ul><?php contributors(); ?></ul></div>

</div>
</div>
</div>

<?php get_sidebar('iscritti'); ?>
<?php get_footer('iscritti'); ?>


E fin qui tutto bene, il problema emerge quando tento di impaginare la lista. In pratica vorrei 10 utenti per pagina ma non so proprio da che parte farmi ..... qualcuno può aiutarmi ?

Girando in rete ci sono poche soluzione e spiegate male ma penso che la strada giusta sia lavorare con <strong>$wpdb->get_results()</strong>. Una cosa tipo questa:

Codice: Seleziona tutto
$authors_per_page = 10;
$page = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1;

echo paginate_links( array(
    'base' => add_query_arg( 'cpage', '%#%' ),
    'format' => '',
    'prev_text' => __('«'),
    'next_text' => __('»'),
    'total' => ceil($total / $authors_per_page),
    'current' => $page
));


Ma poi come si richiama la funzione ? spero in un vostro aiuto .....
Avatar utente
Niper
Aficionado
Aficionado
 
Messaggi: 26
Iscritto il: ven ott 15, 2010 9:32 am

Re: Lista utenti registrati con impaginazione wordpress

Messaggioda Niper » lun mar 14, 2011 4:37 pm

Per darvi un idea di come si presenta il progetto ecco un immagine:

Immagine
Avatar utente
Niper
Aficionado
Aficionado
 
Messaggi: 26
Iscritto il: ven ott 15, 2010 9:32 am

Re: Lista utenti registrati con impaginazione wordpress

Messaggioda Boo » sab giu 04, 2011 4:15 pm

Cambia
Codice: Seleziona tutto
$authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users WHERE display_name <> 'admin' ORDER BY display_name");

in
Codice: Seleziona tutto
$start = 0;
$end = 10;
$authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users WHERE display_name <> 'admin' ORDER BY display_name LIMIT $start, $end");

Lascio a te il modo di cambiare dinamicamente $start ed $end.
Avatar utente
Boo
Silver Member
Silver Member
 
Messaggi: 1276
Iscritto il: sab dic 04, 2004 3:41 pm


Re: Lista utenti registrati con impaginazione wordpress

Messaggioda Niper » sab giu 04, 2011 7:48 pm

finalmente Boo ti aspettavo con ansia .... grazie millllleeeeeeee ... ho provato in questo momento e tutto funziona come previsto .... tuttavia vorrei dare la possibilità agli iscritti di navigare nella pagina quindi vorrei applicare un impaginazione (con un link avanti e indietro o 1,2,3 ecc... ) questo pensi sia possibile ? perché il metodo da te descritto è perfetto ma non svolge la funzione sopra elencata
Avatar utente
Niper
Aficionado
Aficionado
 
Messaggi: 26
Iscritto il: ven ott 15, 2010 9:32 am

Re: Lista utenti registrati con impaginazione wordpress

Messaggioda Boo » dom giu 05, 2011 8:57 am

Quando dicevo che avrei lasciato a te il modo di cambiare dinamicamente $start ed $end intendevo proprio l'impaginazione.
Andando per gradi, ci sono due modi di ottenere un risultato del genere.

1) Puoi creare un link per la pagina precedente ed uno per la pagina successiva.
2) Puoi creare un elenco di pagine totali partendo dal numero totale di risultati.

Metodo n. 1
Innanzitutto il nome della variabile $end può trarre in inganno, perché in realtà è il numero di risultati che si desiderano (non l'ultimo risultato che si chiede); quindi utilizzando LIMIT 0, 10 si prendono dal database i primi dieci risultati; utilizzando LIMIT 10,10 si prendono i secondi dieci (da 11 a 20).

Non so come è strutturato Wordpress quindi ti illustro il metodo che utilizzo più frequentemente per generare le pagine. Tieni presente che questo è un metodo e non il metodo.
Per prima cosa utilizzo semplici variabili di tipo $_GET per non dover usare form HTML (ma la seconda soluzione è altrettanto valida).
Quindi genero il link calcolando il valore corrente di $start ed addizionando quello di $end in modo da ottenere il primo risultato successivo all'ultimo visualizzato.
Nel tuo caso, ad esempio si farebbe così
Codice: Seleziona tutto
$start = $_GET['start'] ? $_GET['start'] : 0; //se start non è definito partiamo dall'inizio
$end = $_GET['end'] ? $_GET['end'] : 10; //se end non è definito utilizziamo 10 di default.
$next = $start + $end;
$prev = $start - $end;
$authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users WHERE display_name <> 'admin' ORDER BY display_name LIMIT $start, $end");

Il link alla pagina successiva sarà
Codice: Seleziona tutto
<a href="pagina.php?start=<?php echo $next;?>&end=<?php echo $end;?>">Pagina Successiva</a>

Mentre il link alla pagina precedente sarà
Codice: Seleziona tutto
<a href="pagina.php?start=<?php echo $prev;?>&end=<?php echo $end;?>">Pagina Precedente</a>

Con questa tecnica l'utente dovrà andare avanti pagina per pagina fino al risultato desiderato, il che diventa seccante quando hai una grossa mole di dati

Metodo n. 2
Per ottenere il numero totale di pagine visualizzabile devi dividere il numero totale dei record per $end, ossia la quantità di risultati da richiamare dal database.
In questo caso farai.
Codice: Seleziona tutto
$num_pagine = $wpdb->get_results("SELECT COUNT(ID)/$end, user_nicename from $wpdb->users WHERE display_name <> 'admin'");

Come vedi in questo caso non hai bisogno di ORDER od i LIMIT in quanto la query ti darà un unico risultato che è il numero totale di pagine
a questo punto puoi generare le pagine con un ciclo for, in questo modo:
Codice: Seleziona tutto
$end = $_GET['end'] ? $_GET['end'] : 10; //se end non è definito utilizziamo 10 di default.
for($i = 1; $i <= $num_pagine; $i++)
   echo '<a href="pagina.php?start='.$i+$end.'&end='.$end.'">[Pagina '.$i.']</a> ';

Tieni presente che rischi facilmente di otteenre un $num_pagine con decimali, quindi dovrai arrontondarlo con round(), lasciando però fuori i risultati al quoziente della divisione, per questo motivo, vien da sé che il metodo migliore da utilizzare è la combinazione dei due descritti in modo che l'utente possa saltare da una pagina all'altra o semplicemente andare avanti o indietro con i due link che hai predisposto.
Avatar utente
Boo
Silver Member
Silver Member
 
Messaggi: 1276
Iscritto il: sab dic 04, 2004 3:41 pm

Re: Lista utenti registrati con impaginazione wordpress

Messaggioda Niper » dom giu 05, 2011 9:35 am

buongionro Boo, immaginavo che le impostazioni dinamiche si riferissero propro all'impaginazione ma non sono proprio una cima (un esperto) è per quello che ho chiesto aiuto. Bene ho provato in questo momento col metodo 1 in questo modo:

Codice: Seleziona tutto
function contributors() {
global $wpdb;

$start = $_GET['start'] ? $_GET['start'] : 0; //se start non è definito partiamo dall'inizio
$end = $_GET['end'] ? $_GET['end'] : 50; //se end non è definito utilizziamo 10 di default.
$next = $start + $end;
$prev = $start - $end;
$authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users WHERE display_name <> 'admin' ORDER BY display_name LIMIT $start, $end");

foreach ($authors as $author ) {

echo "<li>";
echo "<a href=\"".get_bloginfo('url')."/author/";
the_author_meta('user_nicename', $author->ID);
echo "/\">";
echo get_avatar($author->ID);
echo "</a>";
echo '<div>';
echo "<a href=\"".get_bloginfo('url')."/author/";
the_author_meta('user_nicename', $author->ID);
echo "/\">";
the_author_meta('display_name', $author->ID);
echo "</a>";
echo "<br />";
echo "SitoWeb: <a href=\"";
the_author_meta('user_url', $author->ID);
echo "/\" target='_blank'>";
the_author_meta('user_url', $author->ID);
echo "</a>";
echo "<br />";
echo "Twitter: <a href=\"http://twitter.com/";
the_author_meta('twitter', $author->ID);
echo "\" target='_blank'>";
the_author_meta('twitter', $author->ID);
echo "</a>";
echo "<br />";
echo "<a href=\"".get_bloginfo('url')."/author/";
the_author_meta('user_nicename', $author->ID);
echo "/\">Visita il Profilo di ";
the_author_meta('display_name', $author->ID);
echo "</a>";
echo "</div>";
echo "</li>";
}
}


e richiamato la funzione in questo modo:

Codice: Seleziona tutto
<a href="http://www.mio-sito.com/iscritti?start=<?php echo $next;?>&end=<?php echo $end;?>">Pagina Successiva</a>
<a href="http://www.mio-sito.com/iscritti?start=<?php echo $prev;?>&end=<?php echo $end;?>">Pagina Precedente</a>


Sicuramente cè un passaggio che mi sfugge perché l'URL non restituisce il risultato sperato. Si presenta in questo modo:
Codice: Seleziona tutto
http://www.mio-sito.com/iscritti?start=&end=


Come vedi non passa la variabili di tipo $_GET, o meglio passa ma non restituisce il numero di pagina
Avatar utente
Niper
Aficionado
Aficionado
 
Messaggi: 26
Iscritto il: ven ott 15, 2010 9:32 am

Re: Lista utenti registrati con impaginazione wordpress

Messaggioda Niper » mar giu 07, 2011 9:23 am

Ok penso di aver trovato una video guida (meglio vedere la procedura per i meno esperti come me) che forse può essere una buona soluzione, appena torna su il mio server provo a metterla in atto: http://www.youtube.com/watch?v=R-AQ_HBY ... ure=relmfu
Avatar utente
Niper
Aficionado
Aficionado
 
Messaggi: 26
Iscritto il: ven ott 15, 2010 9:32 am

Re: Lista utenti registrati con impaginazione wordpress

Messaggioda Boo » mar giu 07, 2011 6:08 pm

Posta il codice di tutta la pagina
Niper ha scritto:appena torna su il mio server provo a metterla

Puoi installare un webserver sul tuo computer per fare tutte le prove che vuoi.
Avatar utente
Boo
Silver Member
Silver Member
 
Messaggi: 1276
Iscritto il: sab dic 04, 2004 3:41 pm

Re: Lista utenti registrati con impaginazione wordpress

Messaggioda Niper » sab giu 11, 2011 8:21 am

Ciao Boo, eccomi di nuovo a chiedere il tuo aiuto. Sono veramente un somaro in materia di sviluppo web e nonostante tutti i tuoi consigli e i video youtube che spiegano in maniera minuziosa il procedimento sono veramente in difficoltà e non riesco ad impaginare la lista.

Con la piattaforma wordpress gli utenti registrati vengono salvati nella tabella wp-users:

Immagine

Puoi aiutarmi a risovere questo problema ? se vuoi sono disposto anche a pagare il tuo tempo purchè risolva l'inconveniente .... ciao
Avatar utente
Niper
Aficionado
Aficionado
 
Messaggi: 26
Iscritto il: ven ott 15, 2010 9:32 am

Re: Lista utenti registrati con impaginazione wordpress

Messaggioda da1989 » gio set 01, 2011 9:52 am

Niper ha scritto:
.............}
[/code]

e richiamato la funzione in questo modo:

Codice: Seleziona tutto
<a href="http://www.mio-sito.com/iscritti?start=<?php echo $next;?>&end=<?php echo $end;?>">Pagina Successiva</a>
<a href="http://www.mio-sito.com/iscritti?start=<?php echo $prev;?>&end=<?php echo $end;?>">Pagina Precedente</a>


Sicuramente cè un passaggio che mi sfugge perché l'URL non restituisce il risultato sperato. Si presenta in questo modo:
Codice: Seleziona tutto
http://www.mio-sito.com/iscritti?start=&end=


Come vedi non passa la variabili di tipo $_GET, o meglio passa ma non restituisce il numero di pagina



buon giorno a tutti.. sono giorni che sto cercado di capire come fare a paginare l'elenco delgi utenti del mio blog ma non riesco.. ho trovato cercando questo argomento.. sembrava funzionasse ma invece mi capita la stessa cosa.. quando deve richiamare la pagina non funziona.. mi da sempre errore.. qualcuno sa rispondermi??
Avatar utente
da1989
Neo Iscritto
Neo Iscritto
 
Messaggi: 1
Iscritto il: ven ago 26, 2011 3:23 pm


Torna a Sviluppo Web

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron
Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising