pager_query con D7

12 contenuti / 0 new
Ultimo contenuto
pager_query con D7

scusatemi, stò cercando di capire D7 ma credetemi, per uno che ha sempre lavorato con D6 è dura acquisire
le nuove funzioni, stò leggendo la documentazione, ma mi blocco anche sulle cose elementari
ad esempio, so che pager_query non esiste più e bisogna usare
$query->extend('PagerDefault');
ma non ci riesco proprio, potreste darmi una mano?

ad esempio, avevo queste righe di codice che usavo con D6, come faccio a convertirle in D7?

$numero_per_page = 20;
$query = "SELECT COUNT(id) AS conta from scheda where posizione = 4";
$result = pager_query($query, $numero_per_page, 0, $count_query);
$output .= theme('pager', NULL, $per_page, 0);
print $output;

Questa pagina è molto interessante sulla conversione del codice di Drupal. Dice che Il pager_query function () è stata sostituita dal PagerDefault query cosiddetto Extender. Per usarlo, è necessaria una query dinamica.

A quanto pare le query di D7 sono un pò complesse... basti vedere la funzione function taxonomy_select_nodes alla riga 205 di taxonomy.module

Ti dò il link che ho trovato sul web
http://blog.worldempire.ch/story/howto-convert-module-dbtng

Ciao

Grazie danzisiweb, sei gentilissima,
....ma la parte relativa a pager_query non ho capito come usarla per convertire il mio script che ho scritto sopra
qualcuno potrebbe spiegarmelo con un esempio.

Ok reck,
ti dà la torta con la ciliegina, ci provo:

IL TUO CODICE IN D6

$numero_per_page = 20;
$query = "SELECT COUNT(id) AS conta from scheda where posizione = 4";
$result = pager_query($query, $numero_per_page, 0, $count_query);
$output .= theme('pager', NULL, $per_page, 0);
print $output;

IL CODICE IN D7

$posizione = 4
$query = db_select('scheda', 's')->extend('PagerDefault')->extend('TableSort');
$count_query->condition('s.posizione', $posizione);
$count_query->addExpression('COUNT(id)');
$result = $query->execute();
print theme('pager');

Assolutamente da testare e leggere la documentazione su api.drupal.org (non ho approfondito la funzione theme('pager') come impagina)
Ripeto il codice sopra è DA TESTARE, ma chi avesse delle drittè può postarle che mi interessano particolarmente.

C i a o

ho provato a sostituire il tuo codice, ma niente, pagina bianca, premetto che la tabella 'scheda' non inizia come le altre tabelle di drupal "drupal_scheda" ma semplicemente "scheda"

ho provato anche a sostituire in questo altro modo:

$query = db_query('SELECT COUNT(id_scheda) AS conta from scheda WHERE posizione = 4')->extend('PagerDefault');
$result = $query->execute();
print theme('pager');

ma la risposta è sempre la stessa = pagina bianca

Scusami, per adesso la dritta che ti posso dare è che probabilmente print theme('pager'); è errato infatti il $result dove lo stampa?

In D7 la funzione theme viene usata in diversi modi ad esempio:
theme('search_result', array('result' => $result, 'module' => $variables['module']));

In drupal.api c'è la spiegazione:
theme($hook, $variables = array());

Non voglio sembrare che ne so tanto solo che osservo il codice di D7 e se qualcuno della community dasse un consiglio sarebbe il benvenuto. :)

http://api.drupal.org/api/drupal/includes--pager.inc/function/theme_pager/7
qui addirittura parla di theme_pager($variables)

il mio problema è che ho delle pagine php che usano query a tabelle di dati esterni a drupal (anche se sono nello stesso database)
con D6 usavo tranquillamente:
$result = pager_query($query, 20, 0, $count_query);

...nonostante la lettura della documentazione e i vari tentativi fatti non riesco a printare la paginazione con D7.

forse se fossero state tabelle di dati interni a drupal la cosa sarebbe stata più semplice
ma nel mio caso proprio non ci riesco.

qualcuno mi può aiutare con un esempio?

Dai così faccio un pò di pratica anche con D7. Questo codice è testato e mi risulta 0 perché non ho pagine, testato e funzionante:

<?php
function nome_della_tua_funzione() {
$posizione = 4;
$header = array();
$query = db_select('node', 'n')->extend('PagerDefault')->extend('TableSort');
$query->condition('n.nid', $posizione);
$query->addExpression('COUNT(n.nid)', 'nid');
$result = $query->execute();
foreach (
$result as $row) {
   
$rows[] = array($row->nid);
}
$build['top_pages_table'] = array(
   
'#theme' => 'table',
   
'#header' => $header,
   
'#rows' => $rows,
   
'#empty' => t('No statistics available.'),
  );
 
$build['top_pages_pager'] = array('#theme' => 'pager');
  return
$build;
}
 
?>

Il concetto ora dovrebbe essere chiaro in quanto in db_select va messo il nome della tabella e nelle espressioni il nome dei campi, infine nome_della_tua_funzione è palese che va il nome che fa al caso tuo. Scusa per il codice che ti ho postato sopra (preso da D7) ma non l'avevo testato....

Ciao

ciao Danzisiweb
ho provato il tuo suggerimento, e questo nuovo sistema vuole che le tabelle abbiano necessariamente
lo stesso "prefisso" di drupal, quindi se inserisco db_select('scheda', 'n') mi dice che la tabella
"_drupal.scheda" non esiste, ho provato quindi a fare una copia della tabella chiamandola _drupal.scheda
e scrivendo questo codice

function paginazione() {
$posizione = 4;
$header = array();
$query = db_select('scheda', 'n')->extend('PagerDefault')->extend('TableSort');
$query->condition('n.posizione', $posizione);
$query->addExpression('COUNT(n.id_scheda)', 'id_scheda');
$result = $query->execute();
foreach ($result as $row) {
    $rows[] = array($row->id_scheda);
}
$build['top_pages_table'] = array(
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#empty' => t('No statistics available.'),
  );
  $build['top_pages_pager'] = array('#theme' => 'pager');
  return $build;
}

e poi nel punto dove vorrei far apparire la paginazione inserisco

<?php
print paginazione();
?>

non vedo più la pagina bianca, ma nemmeno la paginazione
ma la scritta:
Notice: Undefined variable: rows

Ciao reck, vedi, in programmazione, cioè nel linguaggio php, non si può inventare nulla:

10. Sintassi Fondamentale 11. Tipi di dati 12. Variabili 13. Costanti 14. Expressioni 15. Operatori 16. Strutture di controllo 17. Funzioni 18. Classi e Oggetti (PHP 4) 20. Namespaces21. Exceptions 2. Riferimenti

E soprattutto con Drupal che ha un framework a cui sottostare, quindi ad una sintassi ben definita che non si può appunto inventare. Te lo dico perchè non voglio passare per quella che sa tutto su Drupal. Posso solo osservare il codice già scritto e farmi un'idea di come lavora e darti delle dritte volentieri. L'importante che comprendi questo concetto: Drupal ridefinisce con il suo framework la struttura del linguaggio php.

Ora, serve a poco, secondo me, che ci postiamo il codice svariate volte per scovare gli errori, piuttosto

Quote:
osserva la funzione function system_ip_blocking($default_ip = '') nel file system.admin.inc in D7 naturalmente, alla riga 1345.
Semplicemente le funzioni in D7 si scrivono anche così ma tu hai bisogno ordinamento e paginazione ecco perchè ho cercato un codice simile e te l'ho postato.

Ciao

grazie per la pasienza danzisiweb.
comunque, mi arrendo.

La programmazione in php (quella pulita che non si appoggia a classi personalizzate) la uso da anni
e stare ad impazzire per cercare di capire come l'hanno riscritta gli altri francamente mi snerva

Per ora lascio stare D7 ne riparliamo tra un anno.

La paginazione che ho fatto usando le api di D6 ed inserita in centinaia di pagine e perfettamente funzionante
me la tengo così com'è.

ti ringrazio di tutto