this->entryList->getObjects(); aanroepen

  • Ik heb eens een vraagje over PHP.
    Zoals jullie wel weten, kan ik wel een beetje programmeren, maar ben ik geen expert :rolleyes:


    Probleem: Ik haal nu forum berichten op, maar wil ze inkorten omdat ze anders te lang zijn in het menu.
    Ik kort ze in tot 200 tekens.


    Eerst haal ik de forum berichten op:
    $this->entries = $this->entryList->getObjects();


    In de template roep ik de korte inhoud aan met:
    {@$entry->getExcerpt()}


    Hoe kan ik StringUtil::substring($HierDeVariableOmInTeKorten, 0, 200) toepassen op deze "entries"?


    Heb al vanalles geprobeerd, maar ik krijg steeds de melding undefined index als ik probeer variabelen in te vullen in de plaats van $HierDeVariableOmInTeKorten


    Alvast bedankt!

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Hallo,


    Welke variabele is undefined? En kunnen we de code ontvangen van waar die undefined is?
    Gaat meestal om een schoonheidsfout binnen PHP.


    Binnen talen als Java is dit uit den boze. Betekent dat de variabele niet geïnitialiseerd is.
    Het gaat er namelijk om dat bijv. $_GET['test'] gebruikt kan worden. Maar je weet niet of deze wel gevuld is. Het oplossen zit hem er dus in met dat je moet kijken of de variabele wel gevuld is.


    Edit:
    Minimalistisch antwoord:
    http://www.dmxzone.com/go/1381…g-notice-undefined-index/


    Mvg,
    Tim

  • Waar worden de waarden in de template getopt? Wat is de template engine, kan dat daar wel? En sterker nog, wil je dat daar wel?


    Hallo,


    @laatste zinnetje;


    Naar mijn mening niet. Goeie opmerking. Koen, inderdaad dat je dit mogelijk ergens anders wilt doen (Model?)


    Mvg,
    Tim

  • Tim: In Java staat de ArrayIndexOutOfBoundsExceptit het dichts bij de undefined index in PHP. Het compileert dan dus wel. Ook in Java kun je dit soort dingen flikken als je bijvoorbeeld JSP gebruikt, maar dat is niet helemaal relevant.


    Het aanpassen van de tekst naar een bepaalde lengte zou ik ook zeker niet in het model doen. Dat moet naar mijn mening gedaan worden in de controller of equivalent.

  • Tim: In Java staat de ArrayIndexOutOfBoundsExceptit het dichts bij de undefined index in PHP. Het compileert dan dus wel. Ook in Java kun je dit soort dingen flikken als je bijvoorbeeld JSP gebruikt, maar dat is niet helemaal relevant.


    Het aanpassen van de tekst naar een bepaalde lengte zou ik ook zeker niet in het model doen. Dat moet naar mijn mening gedaan worden in de controller of equivalent.


    Hallo,


    Maar als je het op meerdere plekken wilt gebruiken is het toch handiger om het in de model op te nemen dan in verschillende controllers? (Indien MVC natuurlijk)


    Mvg,
    Tim

  • Nou, ik stel me even een nieuwssysteem voor. Daarin wil je een samengevat bericht weergeven in het overzicht, en een compleet bericht als er om een enkel bericht wordt gevraagd.


    Dat zijn verschillende pagina's, REST of SOAP calls of wat dan ook. Ik zie niet wat het kortere bericht dan in het model moet. Sowieso, al gebruik je het vaker, zal er toch een soort van helper voor ontstaan. De verkorte tekst is geen data dat je op slaat, en daarom zou ik het ook uit het model willen houden.

  • Ok, focus je aub niet op de undefined, dat is omdat ik duidelijk dingen fout doe ;)


    Dit is de dataset, hierin zitten de forum berichten die ik wil tonen:
    $this->entries = $this->entryList->getObjects();


    De fout zit hem hierin:
    return StringUtil::substring($this->entries['message'], 0, 200);


    De waarde $this->entries['message'] bestaat niet en geeft undefined.


    Als ik gewoon dit doe:
    print_r($this->entries);
    Krijg ik volgende output:
    Array ( [0] => ViewableForumEntry Object ( [user:protected] => UserProfile Object ( [avatar:protected] => Gravatar Object ( [gravatar] =>...
    Op het einde van die print_r zegt hij dan uiteindelijk ook de 'message', waarin het bericht zit dat ik wil kort weergeven, afknippen na 200 tekens.

  • Ik weet gewoon niet hoe ik de variabele in die functie StringUtil::substring() moet zetten.
    De inhoud wordt in een array in een object in een array of zo iets gezet.


    De gegevens haal ik uit de database en steek ik hierin:
    $this->entryList->readObjects();
    // read entries
    $this->entries = $this->entryList->getObjects();


    Dus alle gegevens zitten in $this->entries, maar ik weet niet hoe ik deze gegevens hierin kan bewerken.
    Ik wil namelijk dat de 'message' wordt afgeknipt na 200 tekens, met de functie in de eerste lijn van dit bericht.


    Ik ben nooit een kei geweest in het aanspreken van classes in objects in arrays etc.
    Heel verwarrend... :whistling:

  • Hoe ziet je object structure eruit?
    Gewoon een ['message'] en ['function'] data member?


    Zitten op dat moment niet meerdere objecten in je $this->entries array, moet je dan niet deze indexeren ofzo?
    Ik heb alleen niet echt een idee hoe dit allemaal moet in php, ook het gebrek aan types is behoorlijk verwarrend voor iemand die c++ code gewend is :D

  • In je template kan je dit voor elkaar krijgen,
    Je template parser is zo geconfigureerd dat hij alle helpers ook mee kan pakken (waaronder dus StringUtil)
    In je template zelf staat daar wss een optie die hij uitleest doormiddel van {foreach} {/foreach}.


    Kijk daar is in, daarnaast kan je er vanuit gaan dat hij ook nog eens hem cached en dat hij het daarin doet. (In je cache class)
    daar kan je ook waarschijnlijk wel je util string in kwijt.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!