Joomla.it Forum

Non solo Joomla... => Sviluppo => : raoul_benneth 15 Feb 2013, 12:43:35

: [joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 15 Feb 2013, 12:43:35
Buongiorno a tutti :)
Nuova giornata...  nuovi problemi !! :)


in breve:


:
//funzione che mi restituisce il giorno corrente

function dWeek($numberofday) {
   $days = array("domenica", "lunedi", "martedi", "mercoledi", "giovedi", "venerdi", "sabato");
   $nameofday=$days[$numberofday];
   return $nameofday;
}



$date = date('Y-m-d');
list($yyyy, $mm, $dd) = explode('-', $date);
$numberofday = date("w",mktime(0,0,0,$mm, $dd, $yyyy));


$currentDay = dWeek($numberofday);


//effettuo una query per ricavare i dati presenti nel giorno che mi interessa

$db = JFactory::getDbo();
                   
          $query = "SELECT a.id , a.eventid, substring_index('$dayweek', a.giorno, 3) as giorno,
                                                a.start, a.end, b.*
                                                FROM #__testcomponent_prg as a
                                                LEFT JOIN #__testcomponent_prgevent as b
                                                ON a.eventid = b.id";
                                               
                               
           $db->setQuery($query);
           $tresults = $db->loadObjectList();


Ora avrei necessità di linkare al giorno della settimana i vari eventi presenti.
In pratica visualizzare sulla pagina:


lunedi martedi mercoledi giovedi venerdi sabato domenica


ed associare al click sul giorno gli eventi presenti.


Per capirne in linea di massima il funzionamento ho fatto così:


:


$days = array("lunedi", "martedi", "mercoledi", "giovedi", "venerdi", "sabato", "domenica");

<?php foreach($days as $giorno) : ?>
                                <td><h4>
                                <a href="<?php echo JRoute::_('/index.php?option=com_testcomponent&view=prgs&id=' $tresults[0]->id); ?>">
                                <?php echo $giorno?></h4></a></td>
                                <?php endforeach; ?>




Si avvicina molto a ciò che vorrei soltanto che, come potete notare,
ovviamente $tresults[0]->id mi da sempre lo stesso id.


Grazie in anticipo per l'aiuto.


RaouL.

: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 15 Feb 2013, 12:57:18
ovviamente $tresults[0]->id mi da sempre lo stesso id.
---------------------------------------------------------------------

chiami sempre lei nel ciclo...   ;)

: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 15 Feb 2013, 13:01:07
PS: la query così come l'hai scritta secondo me va maluccio...

Riprova con questo suggerimento:
http://docs.joomla.org/JDatabaseQuery/11.1 (http://docs.joomla.org/JDatabaseQuery/11.1)

 ;)
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 15 Feb 2013, 13:41:50
Ciao e grazie per il supporto !


Come notavi, chiamo sempre il primo risultato disponibile e ovviamente
avrò sempre lo stesso id.


Facendo in questo modo:
:

<?php foreach($tresults as $giorno) : ?>
                                <td><h4>
                                <a href="<?php echo JRoute::_('/index.php?option=com_testcomponent&view=prgs&id=' $giorno->id); ?>">
                                <?php echo $giorno->giorno?></h4></a></td>
                                <?php endforeach; ?>


ottengo il link al giusto 'id' ma ovviamente
come 'giorno' stampo soltanto il giorno corrente, nel caso di oggi: venerdi
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 15 Feb 2013, 13:50:59
$giorno->giorno è il risultato dell'operazione che fai nella query...

bisognerebbe controllare li ora se c'è qualcosa che non va...

 ;)
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 15 Feb 2013, 18:10:10
Ok, ho fatto qualche passo in avanti:


la query l'ho modificata così:


:

$db = JFactory::getDbo();
                   
$query = "SELECT a.id as id, a.eventid, a.start, a.end, b.*
        FROM #__testcomponent_prg as a
LEFT JOIN #__testcomponent_event as b
ON a.eventid = b.id
where locate('$dayweek', a.giorno) > 0";
                                               
 $db->setQuery($query);
 $results = $db->loadObjectList();


e mi funziona perfettamente, nel senso che vedo
adesso correttamente gli eventi presenti per il giorno in questione
ad esempio, quelli di oggi, venerdì.


Ora, diciamo che sulla pagina metto una table che ha come
headers i giorni della settimana, come faccio a fare in modo
che al click sul giorno corrispondente mi visualizzi gli eventi relativi ?

: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 15 Feb 2013, 18:55:25
:
$db = JFactory::getDbo();
                   
$query = "SELECT a.id as id, a.eventid, a.start, a.end, b.*
           FROM #__testcomponent_prg as a
      LEFT JOIN #__testcomponent_event as b
      ON a.eventid = b.id
      where locate('$dayweek', a.giorno) > 0";
                                               
 $db->setQuery($query);
 $results = $db->loadObjectList();

aggiusta sta query che se ti vede il team di sviluppo di J! ti ammazza (come minimo)!
:
$query->select( <campi da selezionare> );
$query->from( <da quale tabella> );
$query->join ( <con quale tabella è in relazione> );
$query->where( <che soddisfa quali vincoli> );
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 15 Feb 2013, 18:59:50
Ora, diciamo che sulla pagina metto una table che ha come
headers i giorni della settimana, come faccio a fare in modo
che al click sul giorno corrispondente mi visualizzi gli eventi relativi ?

per table intendi tabella giusto? (le table sono un'altra cosa se parli di J!)

ad ogni giorno, nella vista che ti mostra i dati in forma tabellare, metti un link ad un'altra view del tipo

?option=<com_tuocomponente>&view=<vista di dettaglio>&id=<id del giorno che vuoi mostrare>

inutile che ti dica che - come ogni vista che si rispetti - deve avere il suo model ed il suo controller associato ;)

EDIT
-------

puoi sempre prendere spunto dal componente iCagenda  ;)
http://extensions.joomla.org/extensions/calendars-a-events/events/events-management/22013 (http://extensions.joomla.org/extensions/calendars-a-events/events/events-management/22013)
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 15 Feb 2013, 22:11:54
aggiusta sta query che se ti vede il team di sviluppo di J! ti ammazza (come minimo)!
:
$query->select( <campi da selezionare> );
$query->from( <da quale tabella> );
$query->join ( <con quale tabella è in relazione> );
$query->where( <che soddisfa quali vincoli> );


Ok, fatto come suggerito da te ma non mi funziona più come prima:
:

$query
->select('a.id', 'a.eventid', 'a.start', 'a.end', 'b.*')
->from('#__testcomponent_prg as a')
->join('LEFT', '#__testcomponent_event as b ON (a.eventid = b.id)')
->where('locate($dayweek, a.giorno= > 0') ;
$db->setQuery($query);
$tresults = $db->loadObjectList();


Facendo in questo modo, non mi trovo più nulla in 'loadObjectList'

: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 15 Feb 2013, 22:17:34
http://docs.joomla.org/JDatabaseQuery::select/11.1 (http://docs.joomla.org/JDatabaseQuery::select/11.1)

non credo che come hai fatto tu la select piaccia a J!

il parametro della select - come riportato dalla documentazione - deve essere

A string or an array of field names.

quindi o fai un

$query->select( array( 'a.id', 'a.eventid', ... ) );

oppure

$query->select( 'a.id as id, a.eventid, a.start, a.end, b.*');

sinceramente non avevo mai fatto come nel tuo codice... potrebbe essere quello che non gli piace.
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 15 Feb 2013, 22:19:48
http://docs.joomla.org/JDatabaseQuery::select/11.1 (http://docs.joomla.org/JDatabaseQuery::select/11.1)

non credo che come hai fatto tu la select piaccia a J!

il parametro della select - come riportato dalla documentazione - deve essere

A string or an array of field names.

quindi o fai un

$query->select( array( 'a.id', 'a.eventid', ... ) );

oppure

$query->select( 'a.id as id, a.eventid, a.start, a.end, b.*');

sinceramente non avevo mai fatto come nel tuo codice... potrebbe essere quello che non gli piace.


Per la select l'ho letto un secondo dopo aver postato ed in effetti mi è bastato
passare l'array.


Non funziona comunque perchè non riesce ad 'interpretare' la funzione 'LOCATE' di mysql
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: mau_develop 15 Feb 2013, 22:25:00
->where('locate($dayweek, a.giorno= > 0') ;
-----------------------------------------------------------------
... e manca una parentesi, ... e c'è uno spazio tra = e >, ... e se è una funzione perchè è quotata...

spero anche che davanti ad ogni -> ci sia il $query...
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 15 Feb 2013, 22:28:30
Non funziona comunque perchè non riesce ad 'interpretare' la funzione 'LOCATE' di mysql

http://docs.joomla.org/JDatabase::nameQuote/11.1 (http://docs.joomla.org/JDatabase::nameQuote/11.1)

questo metodo dovrebbe aiutarti a bypassare l'errata interpretazione della funzione  ;)
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 15 Feb 2013, 22:34:37
->where('locate($dayweek, a.giorno= > 0') ;
-----------------------------------------------------------------
... e manca una parentesi, ... e c'è uno spazio tra = e >, ... e se è una funzione perchè è quotata...

spero anche che davanti ad ogni -> ci sia il $query...


O_o


mmm.. questo si che è strano...


ho fatto copia incolla del codice e nel codice non c'è nessun "="
scrivendo direttamente:


:
//
->where('locate($dayweek, a.giorno, 3) > 0');


con questo non funziona.
Se invece scrivo:


:
->where('locate("venerdi", a.giorno, 3) > 0');


funziona...

: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 16 Feb 2013, 16:28:08
vi chiedo ancora una cosa:


ma se facessi una cosa del genere:
:

<td id="lunedi">Lunedi</td>
<td id="martedi">Martedi</td>
<td id="mercoledi">Mercoledi</td>
<td id="giovedi">Giovedi</td>
<td id="venerdi">Venerdi</td>
<td id="sabato">Sabato</td>
<td id="domenica">Domenica</td>


1) Avrei modo di associare un evento "click" a ciascuno di questi <td> ?
2) Potrei passare l'id del <td> alla query ?


:

$db = JFactory::getDbo();
$query = $db->getQuery(true);               
$query->select(array('a.id', 'a.eventid', 'a.start', 'a.end', 'b.*'));
$query->from('#__testcomponent_prg as a');
$query->join('LEFT', '#__testcomponent_event as b ON (a.eventid = b.id)');
$query->where('LOCATE([b]miotdID[/b], a.giorno, 3) > 0');
$db->setQuery($query);
$tresults = $db->loadObjectList();




??
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: mau_develop 16 Feb 2013, 18:12:28
$dayweek da dove viene? se fai print_r($dayweek); cosa stampa?

... ma poi mi spieghi cosa ti serve trovare la prima occorrenza di qualcosa in una query?
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 16 Feb 2013, 18:56:36
:
//
->where('locate($dayweek, a.giorno, 3) > 0');
con questo non funziona.

Se invece scrivo:
:
->where('locate("venerdi", a.giorno, 3) > 0');
funziona...

ma $dayweek non è una variabile dichiarata in php???
mysql mica capisce il php...

->where('locate(' . $dayweek. ', a.giorno, 3) > 0');
potrebbe essere una soluzione ad esempio (ma molto a rischio SQL injection)
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 16 Feb 2013, 19:19:33
vi chiedo ancora una cosa:

Raoul posso permettermi di darti un consiglio?

credo che la progettazione che stai facendo vada un pochino rivista... soprattutto nella logica.
I problemi legati al codice si superano in poco o nulla... quelli legati alla logica potrebbero non essere mai risolti (a meno di stranezze varie).

1) Avrei modo di associare un evento "click" a ciascuno di questi <td> ?
2) Potrei passare l'id del <td> alla query ?

:
<td id="lunedi"><a href="?id=lunedi">Lunedi</a></td>

PS. sempre con il tuo permesso vorrei ricordarti che per Joomla "Lunedì" è solo la traduzione di una variabile... potresti renderti conto che è più facile giocare con i numeri piuttosto che con le stringhe e che per come stai programmando il tuo codice non potrà essere localizzato ed utilizzato in altri paesi...
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 16 Feb 2013, 20:08:48
Non preoccupatevi di andarci giù duro !! Anzi .. per qualsiasi possa servire a farmi crescere in questo percorso ve ne sarò sempre grato. Sono veramente agli inizi ..


Per rispondere alle vostre domande:


$dayweek: è una variabile che mi restituisce il giorno corrente mediante una funzione.


In sostanza, ciò che vorrei fare in questa pagina è:


1) all'apertura della pagina, mostrare gli eventi presenti nella giornata (il mio $dayweek)


2) Se l'utente sceglie il giorno, mostrargli gli eventi presenti in quel giorno della settimana.




Per quanto riguarda invece il senso di trovare la prima occorenza all'interno di una stringa:


sul db (ma non è che ne sono costretto, è voluto solo a scopo didattico) la stringa può essere:


["lunedi", "martedi",etc..]


o anche
["gennaio", "febbraio", etc...]



: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 16 Feb 2013, 20:20:55
In sostanza, ciò che vorrei fare in questa pagina è:
1) all'apertura della pagina, mostrare gli eventi presenti nella giornata (il mio $dayweek)
2) Se l'utente sceglie il giorno, mostrargli gli eventi presenti in quel giorno della settimana.

con queste due righe mi hai fatto capire che quello che stavi facendo va in tutt'altra direzione...  ;D

ti faccio un esempio:

sab 09/02/13 : caffè con Raoul a Pincopallino
sab 23/02/13 : caffè con Mau a Milano
sab xx/yy/15  : eccheneso!

se oggi (sab 16/02/13) vado sulla pagina del componente mi restituirebbe tutti gli eventi che si fanno sabato... non solo quelli di oggi perchè tutti matchano con il "sab" ma anche quelli futuri e passati!

fai una cosa... scarica iCagenda: smontalo, analizzalo, documentati anche tramite l'utente Giusebos che è in stretto contatto con lo sviluppatore se hai dubbi e dopo prova a ricostruirlo tu!

happy coding!  ;)
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: mau_develop 16 Feb 2013, 20:40:36
ma $dayweek non è una variabile dichiarata in php???
--------------------------------------------------------
php non dichiarerà mai nessuna variabile.
Ha funzioni e costanti per cui al massimo potrebbe essere DAYWEEK o dayweek() ... ma non esistono.

l'unica cosa che può assomigliargli è la funzione mysql dayofweek:
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 16 Feb 2013, 20:45:01
con queste due righe mi hai fatto capire che quello che stavi facendo va in tutt'altra direzione...  ;D

ti faccio un esempio:

sab 09/02/13 : caffè con Raoul a Pincopallino
sab 23/02/13 : caffè con Mau a Milano
sab xx/yy/15  : eccheneso!

se oggi (sab 16/02/13) vado sulla pagina del componente mi restituirebbe tutti gli eventi che si fanno sabato... non solo quelli di oggi perchè tutti matchano con il "sab" ma anche quelli futuri e passati!

fai una cosa... scarica iCagenda: smontalo, analizzalo, documentati anche tramite l'utente Giusebos che è in stretto contatto con lo sviluppatore se hai dubbi e dopo prova a ricostruirlo tu!

happy coding!  ;)


No no!! aspetta !! :D


Le date (intese come calendario) non hanno nessuna importanza !!


sono inizialmente eventi fissi:


tutti i "sabato" ci sono 5 eventi
tutte le "domenica" 8 eventi






e così via...



: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 16 Feb 2013, 20:45:57
ma $dayweek non è una variabile dichiarata in php???
--------------------------------------------------------
php non dichiarerà mai nessuna variabile.
Ha funzioni e costanti per cui al massimo potrebbe essere DAYWEEK o dayweek() ... ma non esistono.

l'ha dichiarata Raoul con una banalissima assegnazione

$dayweek = <qualcosa>;

: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 16 Feb 2013, 20:55:20
ma $dayweek non è una variabile dichiarata in php???
--------------------------------------------------------
php non dichiarerà mai nessuna variabile.
Ha funzioni e costanti per cui al massimo potrebbe essere DAYWEEK o dayweek() ... ma non esistono.

l'unica cosa che può assomigliargli è la funzione mysql dayofweek:
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html (https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html)


eccola qui:


:

<?php
$date 
date('Y-m-d');
list(
$yyyy$mm$dd) = explode('-'$date);
$numberofday date("w",mktime(0,0,0,$mm$dd$yyyy));
$dayweek dWeek($numberofday);






function 
dWeek($numberofday) {
   
$days = array("domenica""lunedi""martedi""mercoledi""giovedi""venerdi""sabato");
   
$nameofday=$days[$numberofday];
   return 
$nameofday;
}
?>

: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 18 Feb 2013, 03:36:28
Allora... ho scaricato alcuni componenti per cercare di capire qualcosa in più.


In effetti il mio problema si potrebbe ridurre a passare soltanto una
variabile dalla "vista" al "modello".


Sto vedendo che alcuni componenti nei "models" hanno più funzioni.


In uno di essi in particolare ho visto che c'è una funzione (nel modello)
che vuole un argomento, es.:


:
public function someFoo($date) {
   //blabla query->where('$date' between bla and foo);
$rows = db->loadObjectList();
}


La cosa che però non sono riuscito a capire nei file .html.php e nel default.php
di questo componente, è come faccia a darmi il risultato (corretto), nel senso che
non riesco a capire come passa l'argomento $date al modello e mi restituisca la view.


Quando punto con il mouse sul "submit" mi indica solo:
index.php?option=com_dkuevent&view=events


plz......  ::)
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: skyline81 18 Feb 2013, 08:39:56
ricordati che il pattern usato da J! è MVC

Model
Viev
Controller

i primi due li hai visti... ti manca il terzo  ;)
: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 18 Feb 2013, 11:20:17
Ok, nel controller ho questa funzione:


:
public function getModel($name = 'Prgs', $prefix='TestcomponentModel') {
    $model = parent::getModel($name, $prefix, array('ignore_request' => true));
    return $model;
}




Devo aggiungere un'altra funzione al controller o modificare quella che ho ?



: Re:[joomla 2.5]problemi nel ricavare l'id da una query
: raoul_benneth 19 Feb 2013, 03:58:14
...faccio un ultimo tentativo e poi lascio perdere dato che mi sono perso..


sul model ho aggiunto una funzione:


:
getViewByDay($day)


ora sulla vista (default.php) ho:


:
$model = $this->getModel();


<?php foreach($model->getViewByDay('martedi') as $item ?>
//popolo la mia pagina con i dati
//e tutto funziona, nel senso che i dati sono quelli che mi aspetto
//di vedere per quel particolare giorno


Vi chiedo quindi:
c'è qualcosa che posso fare per lasciar scegliere all'utente che giorno visualizzare ?
mi sono accorto che non ho detto che tutto sto casino mi interessa lato sito e non lato admin.


Grazie di cuore.. buona notte.


RaouL.