Joomla.it Forum
Non solo Joomla... => Sviluppo => : rosadeiventi 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:
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:
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?
-
allora...
ho trovato questo sistema:
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:
$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
$posizione = $params->get( 'posizione' );
$dati_articolo = modExampleFollexHelper::getFollexEx_readarticles($posizione);
poi vado nel file tmpl/default.php e richiamo:
<?php echo $dati_articolo->title; ?>
ma niente... riamane vuoto...
dove sbaglio ora?
-
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
-
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 (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:
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?
-
cosa vuol dire?
--------------
$query->select(array('title', 'introtext', 'fulltext'));
-----------------
...perchè è un array?
... ma stai copiando o conosci php oop e mysql query language?
-
allora... faccio un breve riassunto sperando che a qualcuno sia utile:
nel file helper ho messo il seguente metodo:
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:
$dati_articolo = modExampleFollexHelper::getFollexEx_readarticles($posizione);
poi richiamo la veriabile nel file tmpl/default.php ... cioè quello che comparirà a schermo nel frontend
<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.
-
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
-
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! :)
-
quindi
$query->where('id = '.(int)$posizione);
e poi
$results = $db->loadObject();
mentre enl tmpl/default.php
<?php echo $dati_articolo->title ?>
grazie simone!
hai altri consigli?