Even een paar puntjes:
- met loadObjectList() krijg je een array van objecten terug. Meervoud dus. Daarom handig om die variabele $rows ook meervoud te maken.
- vervolgens, als je die array doorloopt, dan ga je ieder element van die $rows (in meervoud) een naam geven = $row (in enkelvoud):
PHP Code:
foreach ($rows as $row)
Bij de eerste geposte code had die array dezelfde naam ($row in enkelvoud) als het element.
- zoals "goslingcools" terecht opmerkt, hoef je zelf die prefix voor de db-tabel niet op te geven, maar gebruik je daar #_ voor.
- in de code van "goslingcools" staat een & voor de JFactory::getDBO(): dat was nodig in PHP4, omdat objecten daar standaard niet by reference werden doorgegeven. Joomla! 2.5 draait echter op PHP5 en het is dus netter om die overbodige & weg te laten. Dit staat ook in veel Joomla!-documentatie nog niet goed.
- in MySql worden namen van velden en tabellen optioneel met een achterwaards aanhalingsteken (`) omringd en de waarden (ook numerieke) met "gewone" aanhalingstekens. Dat is ook ter preventie van SQL-injectie. De funties om dat te doen zitten in het JDatabase-object: respectievelijk $db->nameQuote() en $db->quote().
- nog netter zou zijn om voor het bouwen van een query van het JDatabaseQuery-object gebruik te maken, dat we sinds Joomla 1.6 hebben: om er alvast aan te wennen, dat we Joomla! ook met andere databases kunnen gebruiken. Dan loopt het niet mis als je specifieke MySql-dingen in je query stopt (zoals die escapes van namen en numerieke waarden en Limit).
---------- Bericht toegevoegd op 9 april 2012 om 13:58 ---------- Vorige bericht was op 9 april 2012 om 09:09 ----------
Het is natuurlijk niet netjes als een woord halverwege afgebroken wordt. Bij de afgekapte string moet je dus een
onaf woord weglaten. Zo'n laatste stukje is met de volgende regular expresion (regexp) te selecteren: /\s+?(\S+)?$/. Hier staat: selecteer de laatste niet-spaties die na 1-of-meer spaties staan (inclusief die spaties). Dat stukje vervang je vervolgens door een lege string. Omdat er na die karakters die je wil selecteren nog een spatie kan staan, moet je de substring 1 langer maken (in jouw geval dus 21). Als die lengte bijvoorbeeld $length zou heten, dan krijg je zoiets voor die substring-regel:
PHP Code:
$truncatedtext = preg_replace('/\s+?(\S+)?$/', '', substr($introtext, 0, $length+1));
Als het heel precies moet is het wel oppassen met substr en
UTF8 in teksten: dan kan een letterteken meerdere bytes in beslag nemen en komt je telling in de war. In dat geval kun je beter
mb_substr gebruiken. Verder gaan we nu wel uit van tekst die van links naar rechts (ltr) gaat en niet andersom (rtl) zoals Arabisch en Hebreeuws. Ook gaan we bij bovenstaande regexp uit van spaties tussen de woorden (wat bij Chinees en Japans niet zomaar het geval is). Maar dat is alleen van belang als je een algemeen bruikbare extensie wil maken voor Joomla!.
Meer info over de
query builder (JDatabaseQuery):
Die jimport is met de nieuwe autoloader in 2.5 niet eens meer nodig.