Back to top

Autore Topic: [RISOLTO] interrogare database attraverso modulo  (Letto 8339 volte)

Offline rosadeiventi

  • Esploratore
  • **
  • Post: 82
    • Mostra profilo
[RISOLTO] interrogare database attraverso modulo
« il: 08 Feb 2013, 19:03:38 »
vorrei incominciare a creare moduli per joomla ed ho iniziato col fare un modulo strandard con il quale poi divertirmi a creare tutto quello di cui ho bisogno e magari aiutare la comunità joomla!

sto usando joomla! versione 2.5

il modulo standard si è installato bene... ora vorrei mettere inserire un metodo che interrogasse il database...

sono andato nel file helper.php del modulo ed ho inserito:

Codice: [Seleziona]
    public function getFollexEx_readarticles($posizione) {
        $sql = "SELECT title FROM #__content WHERE id = ".$posizione ;

                $this->_db->setQuery($sql);
                $titolo_articolo = $this->_db->LoadResult();
                return $titolo_articolo;
    }

in questo modo vorrei che mi dicesse il titolo dell'articolo che ha quel detterminato id...

Purtroppo  mi da errore:
Citazione
Fatal error:  Using $this when not in object context in /membri/miosito/sito/modules/mod_example_follex/helper.php on line 30

evidentemente non è così che si interroga il database in joomla..  dove sbaglio?
« Ultima modifica: 09 Feb 2013, 17:42:14 da rosadeiventi »

Offline rosadeiventi

  • Esploratore
  • **
  • Post: 82
    • Mostra profilo
Re:interrogare database attraverso modulo
« Risposta #1 il: 08 Feb 2013, 19:30:42 »
allora...

ho trovato questo sistema:

Codice: [Seleziona]
    public function getFollexEx_readarticles($posizione) {
               
        // Get a db connection.
        $db = JFactory::getDbo();
         
        // Create a new query object.
        $query = $db->getQuery(true);
         
        // Select all records from the user profile table where key begins with "custom.".
        // Order it by the ordering field.
        $query->select(array('title', 'introtext', 'fulltext'));
        $query->from('#__content');
        $query->where('id = $posizione');
       
         
        // Reset the query using our newly populated query object.
        $db->setQuery($query);
         
        // Load the results as a list of stdClass objects.
        $results = $db->loadObjectList();
         return $results;     
               
               
    }

non sono sicuro di come inserire una variabile nel punto:
Codice: [Seleziona]
        $query->where('id = $posizione');
Ora nel sito non mi da più errore...

ma come richiamare i dati estrapolati?


favvio inserire i dati della posizione e richiamo il metodo nel file principale  mod_example_follex.php

Codice: [Seleziona]
$posizione = $params->get( 'posizione' );
$dati_articolo = modExampleFollexHelper::getFollexEx_readarticles($posizione);

poi vado nel file tmpl/default.php e richiamo:

Codice: [Seleziona]
<?php echo $dati_articolo->title?>
ma niente... riamane vuoto...

dove sbaglio ora?
« Ultima modifica: 08 Feb 2013, 20:03:09 da rosadeiventi »

mau_develop

  • Visitatore
Re:interrogare database attraverso modulo
« Risposta #2 il: 08 Feb 2013, 21:47:55 »
l'helper viene chiamato staticamente, quella deve essere public static.

$this->_db
------------------
da dove viene? ... dov'è che hai creato l'oggetto ($this) database?

dai un'occhiata quì http://docs.joomla.org/Accessing_the_database_using_JDatabase/2.5

Offline rosadeiventi

  • Esploratore
  • **
  • Post: 82
    • Mostra profilo
Re:interrogare database attraverso modulo
« Risposta #3 il: 09 Feb 2013, 00:56:44 »
l'helper viene chiamato staticamente, quella deve essere public static.

$this->_db
------------------
da dove viene? ... dov'è che hai creato l'oggetto ($this) database?

dai un'occhiata quì http://docs.joomla.org/Accessing_the_database_using_JDatabase/2.5

grazie mwc...

Se leggi il secondo post vedrai che avevo già preso in considerazione la guida che tu hai linkato...
Ora partiamo dall'ultima modifica che ho fatto:

Codice: [Seleziona]
    public static function getFollexEx_readarticles($posizione) {
               
        // Get a db connection.
        $db = JFactory::getDbo();
         
        // Create a new query object.
        $query = $db->getQuery(true);
         
        // Select all records from the user profile table where key begins with "custom.".
        // Order it by the ordering field.
        $query->select(array('title', 'introtext', 'fulltext'));
        $query->from('#__content');
        $query->where('id = $posizione');
       
         
        // Reset the query using our newly populated query object.
        $db->setQuery($query);
         
        // Load the results as a list of stdClass objects.
        $results = $db->loadObjectList();
         return $results;     
               
               
    }

nel file tmpl/default.php npn mi compare nulla quando richiamo l'oggetto... come mai?

mau_develop

  • Visitatore
Re:interrogare database attraverso modulo
« Risposta #4 il: 09 Feb 2013, 13:03:26 »
cosa vuol dire?
--------------
 $query->select(array('title', 'introtext', 'fulltext'));
-----------------
...perchè è un array?

... ma stai copiando o conosci php oop e mysql query language?

Offline rosadeiventi

  • Esploratore
  • **
  • Post: 82
    • Mostra profilo
Re:interrogare database attraverso modulo
« Risposta #5 il: 09 Feb 2013, 15:18:00 »
allora... faccio un breve riassunto sperando che a qualcuno sia utile:

nel file helper ho messo il seguente metodo:
Codice: [Seleziona]
    public function getFollexEx_readarticles($posizione) {
               
        // connessione al db.
        $db = JFactory::getDbo();
         
        // creare un nuovo query object.
        $query = $db->getQuery(true);
         
        // Seleziono tutti i record della tabella content che abbia id fornito dal bannello di amministrazione
        $query->select('*');
        $query->from('#__content');
        $query->where('id = '.$posizione);
       
         
        //
        $db->setQuery($query);
         
        // Carico la lista dei risultati stdClass objects.
        $results = $db->loadObjectList();
        return $results;                           
               
               
    }

poi nel file principale del modulo ho messo:
Codice: [Seleziona]
$dati_articolo = modExampleFollexHelper::getFollexEx_readarticles($posizione);

poi richiamo la veriabile nel file tmpl/default.php ... cioè quello che comparirà a schermo nel frontend
Codice: [Seleziona]
<div class="example_follex_articolo">
 <?php echo $dati_articolo[0]->title ?>
</div>
in questo modo abbiamo il titolo della prima riga dei records, in questo caso le linee erano 1 sola visto che ho richiesto unicamente l'id voluto.



Offline simone83

  • Appassionato
  • ***
  • Post: 362
  • Sesso: Maschio
    • Mostra profilo
Re:interrogare database attraverso modulo
« Risposta #6 il: 09 Feb 2013, 16:20:08 »
Allora a cosa serve fare un loadObjectList se fai una query su una chiave primaria? Basta un semplicissimo loadObject che ti ritorna un oggetto e non un array di oggetti. Inoltre e sempre buona norma fare un cast ad intero quando si effettuano query su campi numerici per evitare qualsiasi problema
BRAINCODE
Da Psd a Joomla - Sviluppo componenti joomla - SEO con Joomla
x-brain

Offline rosadeiventi

  • Esploratore
  • **
  • Post: 82
    • Mostra profilo
Re:interrogare database attraverso modulo
« Risposta #7 il: 09 Feb 2013, 16:28:44 »
Allora a cosa serve fare un loadObjectList se fai una query su una chiave primaria? Basta un semplicissimo loadObject che ti ritorna un oggetto e non un array di oggetti. Inoltre e sempre buona norma fare un cast ad intero quando si effettuano query su campi numerici per evitare qualsiasi problema

hai ragione... non serve!
graize delle tue precisazioni, sono state utili e mirate! :)

Offline rosadeiventi

  • Esploratore
  • **
  • Post: 82
    • Mostra profilo
Re:interrogare database attraverso modulo
« Risposta #8 il: 09 Feb 2013, 16:41:06 »
quindi
Codice: [Seleziona]
$query->where('id = '.(int)$posizione);
e poi
Codice: [Seleziona]
        $results = $db->loadObject();
mentre enl tmpl/default.php
Codice: [Seleziona]
<?php echo $dati_articolo->title ?>

grazie simone!
hai altri consigli?



 



Web Design Bolzano Kreatif