Ga Terug  
     


Notities

Extensie ontwikkeling (2.5) Plaats hier je vragen en opmerking met betrekking tot de ontwikkeling van extensies.

Antwoord
 
Onderwerpopties Weergavemodus
Oud 20 mei 2016, 13:21   #11
mafamy00
 
Geregistreerd op: 13 november 2008
Berichten: 15
Bedankjes gegeven: 1
Bedankjes ontvangen: 1
Standaard Re: velden uit DB weergeven in artikel.

Goedenmiddag,

Ik heb bovenstaande aandachtig doorgelezen, maar wil eigenlijk de datum van vandaag met het bijbehorende evenement hebben.
Ik kan de gegevens uit de database halen maar geen twee gegevens.
Al van alles geprobeerd maar het wil maar niet lukken misschien kunnen jullie mij een goede hint geven.

Gerben
mafamy00 is offline   Met citaat antwoorden
Oud 20 mei 2016, 14:12   #12
HermanPeeren
Gebruikersgroep Rotterdam
 
HermanPeeren's Avatar
 
Geregistreerd op: 17 april 2009
Locatie: Rotterdam
Leeftijd: 60
Berichten: 635
Bedankjes gegeven: 59
Bedankjes ontvangen: 214
Standaard Re: velden uit DB weergeven in artikel.

Hoe ziet je code waarmee je de gegevens uit de database haalt er nu uit, wat is precies het resultaat en wat zou het moeten zijn?

Als je maar 1 evenement krijgt, heb je dan misschien ergens $db->loadObject() of iets dergelijks staan i.p.v. $db->loadObjectList()?

Herman Peeren
Yepr: web - ontwerp - applicaties - illustraties - maatwerk
www.yepr.nl
KvK 58029443
HermanPeeren is offline   Met citaat antwoorden
Oud 20 mei 2016, 16:48   #13
mafamy00
 
Geregistreerd op: 13 november 2008
Berichten: 15
Bedankjes gegeven: 1
Bedankjes ontvangen: 1
Standaard Re: velden uit DB weergeven in artikel.

Ik heb dezelde code gebruikt als hierboven namelijk:
Code:
<?php 
$db = JFactory::getDBO(); 
$query = $db->getQuery(true); 
$query->select ('title'); 
$query->from ('#__icagenda_events'); 
$query->order ('next DESC'); 
$db->setQuery ($query); 
$row = $db->loadResult(); 
echo $row; 
?>

Ik zou graag het evenement met datum en titel willen hebben waarbij de datum kijkt naar de dag vandaag.
dus alles wat ouder is moet niet opkomen.

Laatst aangepast door MartijnM : 21 mei 2016 om 13:34. Reden: code-tags geplaatst
mafamy00 is offline   Met citaat antwoorden
Oud 20 mei 2016, 17:50   #14
HermanPeeren
Gebruikersgroep Rotterdam
 
HermanPeeren's Avatar
 
Geregistreerd op: 17 april 2009
Locatie: Rotterdam
Leeftijd: 60
Berichten: 635
Bedankjes gegeven: 59
Bedankjes ontvangen: 214
Standaard Re: velden uit DB weergeven in artikel.

Je moet 2 dingen veranderen:

1. selecteer de juiste datum
Volgens mij gebruikt ICagenda 2 datetime-kolommen voor een evenement: startdate en enddate. Je moet zorgen dat de datum van vandaag groter of gelijk is aan de startdate en kleiner of gelijk aan de enddate. Ben nu even snel uit mijn hoofd aan het typen en de computer gaat zo uit, maar zal er vanavond nog even precies nar kijken. Komt neer op iets als:

PHP Code:
$query->where("`startdate`<='"date("Y-m-d"
"' AND `enddate`>='" date("Y-m-d") . "'" 
2. En dan meerdere records selecteren.
Je gebruikt nu $db-> loadRerult(); dat laadt maar één waarde. Je wil een aantal evenement-objecten laden die aan de cirteria voldoen. dat doe je met $db->loadObjectList; Door dat resultaat loop je dan met een for-loopje:

PHP Code:
$evenementen $db->loadObjectList();
foreach (
$evenementen as $evenement)
{
    echo 
$evenement->titel "<br />";

De overige informatie zit nu ook in dat $evenement-object, dus als je nog andere informatie wil hebben dan alleen die titel, dan kan dat ook. Als je alleen die titelswil hebben, dan kun je natuurlijk ook doen:

PHP Code:
$titels $db->loadResultList(); 
en dan door die array van titels heen lopen.

Helaas moet ik nu even de computer sluiten, maar zal vanavond weer even kijken voor de puntjes op de i.

Herman Peeren
Yepr: web - ontwerp - applicaties - illustraties - maatwerk
www.yepr.nl
KvK 58029443
HermanPeeren is offline   Met citaat antwoorden
Oud 20 mei 2016, 19:57   #15
mafamy00
 
Geregistreerd op: 13 november 2008
Berichten: 15
Bedankjes gegeven: 1
Bedankjes ontvangen: 1
Standaard Re: velden uit DB weergeven in artikel.

ok ik wil je alvast bedanken
mafamy00 is offline   Met citaat antwoorden
Oud 20 mei 2016, 22:04   #16
HermanPeeren
Gebruikersgroep Rotterdam
 
HermanPeeren's Avatar
 
Geregistreerd op: 17 april 2009
Locatie: Rotterdam
Leeftijd: 60
Berichten: 635
Bedankjes gegeven: 59
Bedankjes ontvangen: 214
Standaard Re: velden uit DB weergeven in artikel.

Correctie: loadResultList() bestaat niet, dat is loadColumn().

Alle methods op een rijtje:
  • loadResult(): 1 enkele waarde van 1 rij
  • loadObject(): meerdere waarden van 1 rij in een object
  • loadAssoc(): meerdere waarden van 1 rij in een associatieve array
  • loadRow(): meerdere waarden van 1 rij in een geďndiceerde array
En van al deze bovenstaande zijn de respectievelijke methodes om meerdere rijen terug te kunnen krijgen:
  • loadColumn()
  • loadObjectList()
  • loadAssocList()
  • loadRowList()
Zie https://docs.joomla.org/Selecting_data_using_JDatabase

---------- Bericht toegevoegd op 20 mei 2016 om 21:05 ---------- Vorige bericht was op 20 mei 2016 om 20:50 ----------

Ik snap nu pas dat je bedoelt dat je alle evenementen van vandaag of later wil hebben. Dus niet startdate <= vandaag <= enddate, maar alle evenementen waarbij enddate >= vandaag is. Als dat klopt, dan wil je in ieder geval de datum en de titel van het betreffende evenement hebben. Dus bij de select wil je zowel startdate en title hebben:
PHP Code:
$query->select('startdate''title'); 
En je wilt dus ook niet 1 enkele kolom hebben (loadResult() of loadColumn()), maar meerdere waarden van meerdere rijen. Dus:

PHP Code:
$evenementen $db->loadObjectList() 
Ik kijk nog even de precieze formulering van de where() na.

---------- Bericht toegevoegd op 20 mei 2016 om 21:51 ---------- Vorige bericht was op 20 mei 2016 om 21:05 ----------

De where(): het eenvoudigste is om dat helemaal in MySql te houden (behalve als je dit ook wil gebruiken met andere databases). Dan krijg je:
PHP Code:
$query->where('enddate >= DATE(NOW())'); 
Anders moet je inderdaad de datum in PHP maken en krijg je dus iets met:
PHP Code:
$query->where("enddate >= '" date("Y-m-d") . "'"); 
maar dat is alleen nodig als je het meer algemeen voor verschillende databases wil maken.

Je zou het nog mooier kunnen maken door de kolomnamen tussen backticks (`, achteroverliggende aanhalingstekens) te zetten, of dat nog algemener te doen met $db->qn('kolomnaam'); qn() is een afkorting van quoteName(). Maar omdat de betreffende kolomnamen geen gereserveerde woorden zijn in MySql hoeft dat allemaal niet.

Als je een algemeen bruikbare extensie wil maken, dan ga je dat soort meer algemene dingen eerder gebruiken, dan wanneer je iets voor jezelf in elkaar zet.

---------- Bericht toegevoegd op 20 mei 2016 om 22:04 ---------- Vorige bericht was op 20 mei 2016 om 21:51 ----------

Nog even het hele zaakje op een rijtje:
PHP Code:
 <?php 
$db 
JFactory::getDBO(); 
$query $db->getQuery(true); 

$query->select('startdate''title'); 
$query->from ('#__icagenda_events'); 
$query->where('enddate >= DATE(NOW())');  
$query->order ('startdate ASC'); 

$db->setQuery ($query); 
$evenementen $db->loadObjectList();

foreach (
$evenementen as $evenement)
{
    echo 
$evenement->startdate->format('Y-m-d')
         . 
" " .$evenement->titel "<br />";
}  
?>
Ik heb de (start)data van de evenementen nu oplopend gesorteerd.
De evenementen staan nu steeds met datum + spatie + titel evenement, maar dat kun je natuurlijk vormgeven hoe je dat maar wil.

Herman Peeren
Yepr: web - ontwerp - applicaties - illustraties - maatwerk
www.yepr.nl
KvK 58029443
HermanPeeren is offline   Met citaat antwoorden
Oud 20 mei 2016, 22:20   #17
mafamy00
 
Geregistreerd op: 13 november 2008
Berichten: 15
Bedankjes gegeven: 1
Bedankjes ontvangen: 1
Standaard Re: velden uit DB weergeven in artikel.

Ik krijg nu een fatal error:
Fatal error: Call to a member function format() on a non-object in : eval()'d code on line 14
Je denkwiijze brengt me in ieder geval wel verder maar ik moet even kijken waar nu de fout zit.

---------- Bericht toegevoegd op 20 mei 2016 om 22:17 ---------- Vorige bericht was op 20 mei 2016 om 22:12 ----------

Code:
<?php
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->('startdate', 'title');
$query->from ('#__icagenda_events');
$query->order ('startdate ASC');
$db->setQuery ($query);
$row = $db->loadResult();
echo $row;
?>
Ik heb het even in de oude gezet en ook daar gaat het niet lekker:
syntax error, unexpected '(', expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in xxxxx: eval()'d code on line 3
Ik heb het adres er even tussen uit gehaald

---------- Bericht toegevoegd op 20 mei 2016 om 22:20 ---------- Vorige bericht was op 20 mei 2016 om 22:17 ----------

Ik ga er morgen nog eens naar kijken maar op deze manier zit er ergens iets.

Laatst aangepast door MartijnM : 21 mei 2016 om 13:34. Reden: code-tags geplaatst
mafamy00 is offline   Met citaat antwoorden
Oud 21 mei 2016, 10:01   #18
HermanPeeren
Gebruikersgroep Rotterdam
 
HermanPeeren's Avatar
 
Geregistreerd op: 17 april 2009
Locatie: Rotterdam
Leeftijd: 60
Berichten: 635
Bedankjes gegeven: 59
Bedankjes ontvangen: 214
Standaard Re: velden uit DB weergeven in artikel.

Ja, zijn wat kleine dingetjes die je altijd hebt met code zo opschrijven. Komt er vanzelf uit; de betreffende foutmeldingen zeggen precies wat er aan de hand is en dat moet je even verbeteren.

De eerste fout is omdat de DateTime vanuit MySql niet automatisch naar een DateTime in PHP omgezet wordt. Waarschijnlijk is het gewoon een string en kun je dus het '->format(...)'-gedeelte weglaten. Of juist eerst omzetten naar een DateTime in PHP met
PHP Code:
$datum = new DateTime($evenement->startdate); 
Daarna kun je op die $datum wel een format() loslaten.

Als je wil kijken wat het betreffende object precies bevat, doe dan een print_r() of var_dump(), dan zie je precies wat er allemaal in zit. Dus i.p.v. de foreach-loop eerst even:
PHP Code:
print_r($evenementen); 
De tweede fout die je rapporteert is omdat je 'select' vergeten bent in
PHP Code:
$query->select('startdate''title'); 
Zo zal het wel lukken denk ik. Anders horen we het wel!

---------- Bericht toegevoegd op 21 mei 2016 om 10:01 ---------- Vorige bericht was op 21 mei 2016 om 09:52 ----------

Het heeft in ieder geval geen zin om loadResult() te gebruiken als je meerdere kolommen (startdate en title) wil hebben van meer dan 1 rij (meerdere evenementen). Dat is om 1 waarde uit 1 rij van de database te halen.

Herman Peeren
Yepr: web - ontwerp - applicaties - illustraties - maatwerk
www.yepr.nl
KvK 58029443
HermanPeeren is offline   Met citaat antwoorden
Antwoord

Onderwerpopties
Weergavemodus

Berichting Regels
Je mag niet nieuwe onderwerpen maken
Je mag niet reageren op berichten
Je mag niet bijlagen posten
Je mag niet je berichten bewerken

BB code is Aan
Smilies zijn Aan
[IMG] code is Aan
HTML code is Uit

Forumnavigatie


Alle tijden zijn GMT +1. De tijd is nu 12:41.