21 berichten aan het bekijken - 1 tot 21 (van in totaal 21)
  • Q:
    Bijdrager
    jeroeng21

    Cijfers laten vervangen door bijbehorende plaatje [Opgelost]

    Goedenavond,

    Ik zit met het volgende probleem: Ik heb een bepaald getal, en dat wil ik grafisch weergeven.
    Dus bijvoorbeeld het getal 4012, dan moeten er dus 4 bestanden worden aangeroepen (namelijk 4.png, 0.png, 1.png en 2.png) Zodat het resultaat er zo uitziet: link

    Weet iemand hoe dit te bereiken is? Alvast bedankt!

    Met vriendelijke groet,
    Jeroen Goedhart

    Bijdrager
    MacMartino

    Voor welk gebruik? Op internet, in een presentatie, een film..?

    Bijdrager
    MacMartino

    En voor een eenmalig getal, of steeds een onbekend getal (dus een actie op basis van een uitkomst)?
    In dat laatste geval kan je bijv. een Java script maken op basis van een uitkomst.

    Bijdrager
    jeroeng21

    Het is voor op het internet, en het is een variabel getal opgehaald uit een database met PHP

    Bijdrager
    MacMartino

    Pff, ik weet de Engelse omschrijving zo snel niet. Iets met Scrolling Number Javascript Database,
    ongeveer daar op zoeken dan moet je wel wat tegenkomen.

    Bijdrager
    sturb

    Als het toch uit php komt zou ik ook in php de plaatjes laten tonen.

    $plaatjes = array();<br />
    $plaatjes[1] = "plaatje1.png";<br />
    //..<br />
    //...<br />
    //...etc<br />
    $cijfer = 6789;<br />
    for($i=0; $i < strlen($cijfer);$i++){<br />
    $thj = substr($cijfer, $i, 1);<br />
    echo "<img src='".$plaatjes[$thj]."' alt='".$thj."' />";<br />
    }<br />
     
    Bijdrager
    jeroeng21

    Dat ziet er goed uit, zal er morgen naar gaan kijken, alvast bedankt

    Bijdrager
    arri

    makkelijlst is denk ik om een ‘sprite-image’
    te gebruiken in combinatie met CSS
    background-position ..

    dus 1 plaatje met daarin de getallen 0…9 op
    regelmatige afstand, zodat bijvoorbeeld elk
    cijfer precies 100 pixels breed is.
    dit plaatje als background-image van een
    div van 100 pixels breed. door het varieren
    van de background-position bepaal je welk
    cijfer zichtbaar is.

    en dat dan 4x als je het getal 4012 wilt tonen.

    Bijdrager
    johnkeates

    arri, je oplossing is correct en ook een van de beste, maar gezien het niveau van de TS is het net iets te hoog gegrepen ben ik bang:) (no offence @ TS)

    Bijdrager
    jeroeng21

    De oplossing van sturb heeft de kwestie opgelost, harstikke bedank!

    Bijdrager
    sturb

    Op het moment dat je weet hoe de PHP werkt, kun je de code zo aanpassen dat ipv het plaatje te laten veranderen, de class veranderd. Een class die idd de background-sprite veranderd.

    De basis blijft dan gelijk;
    dit

    echo "<img src='".$plaatjes[$thj]."' alt='".$thj."' />";

    word dit:

    <br />
    echo "<img src='blank.png' class='sprite num".$thj."' alt='".$thj."' />";<br />
     
    Bijdrager
    Jakko Westerbeke
    sturb op 11 april 2011
    $plaatjes = array();<br />
    $plaatjes[1] = "plaatje1.png";<br />
    //..<br />
    //...<br />
    //...etc<br />
    echo "<img src='".$plaatjes[$thj]."' alt='".$thj."' />";

    Een heel stuk daarvan is een beetje overbodig … veel makkelijker is om het zo te doen:

    echo "<img src='plaatje$thj.png' alt='$thj' />";

    dus zonder die hele array ervoor — gewoon rechtstreeks de waarde van de variabele in de string plakken.

    Bijdrager
    johnkeates

    Ik denk niet dat je view code met controller code moet mixen, en het is al helemaal niet de bedoeling dit soort praktijken server-side te doen. Maar daar ging het niet om, het is opgelost en andere ‘oplossingen’ maken het niet beter:)

    Bijdrager
    Jakko Westerbeke

    View code? Controller code? En kun je uitleggen waarom je dit niet server-side “moet” doen? Afgaande op de gestelde vraag lijkt mij dat de handigere manier dan om het bijvoorbeeld met JavaScript in de browser zelf te regelen …

    Bijdrager
    johnkeates

    Als je iets in een programmeer- of scripttaal op zet is het gebruikelijk om bewezen bestaande structuren te gebruiken, zoals MVC; Model-View-Controller, waarbij je die individueel ook nog kan opdelen.

    Dat doe je zodat code niet afhankelijk van elkaar wordt en niet dubbel gecodeerd hoeft te worden. Als je dus een lijstje ergens hebt zorg je dat een controller die action heeft, die dan weer een view aanroept waarbij de data of verwerking met een model gestandaardiseerd uitgewisseld wordt. Wil je dan een keer iets bijwerken, dan kan je gerust een model, view, of controller met dezelfde interface uitwisselen en door gaan met leven.

    Je zou het niet server-side moeten doen om dat het client-side kan. Dan bedoel ik niet ‘om dat het kan’, want je kan in principe een CPU emuleren met javascript en daar dan een webserver op draaien binnen een client browser, maar ik bedoel meer dat het niet iets is wat server-side MOET en ook niet iets is wat client-side problemen oplevert. Uiteindelijk is het niet te cachen en geen hoge load voor de client, dus hup, server ontlasten en de client het werk laten doen. Lazy loading gebruiken om te zorgen dat eerst de pagina er is en daarna je nummers ‘mooi’ worden.

    Knutselwerkjes maken met PHP kan iedereen wel, maar fatsoenlijk code kloppen is meer dan even wat dingetjes kopieren en plakken:)

    http://en.wikipedia.org/wiki/Model–view–controller
    http://nl2.php.net/manual/en/language.oop5.php
    http://framework.zend.com/manual/en/
    http://en.wikipedia.org/wiki/Singleton_pattern
    of gewoon http://en.wikipedia.org/wiki/Design_pattern
    http://en.wikipedia.org/wiki/Software_architecture
    enz enz.

    Bijdrager
    Jakko Westerbeke

    Zoiets dacht ik al:) Ik zie alleen even niet hoe je twee uitspraken hier met elkaar te rijmen zijn: aan de ene kant zeg je dat je de server moet ontlasten, aan de andere kant heb je het over dingen veel uitgebreider maken dan ze hoeven te zijn voor dit specifieke voorbeeld (aangenomen dat het op de server uitgevoerd gaat worden).

    Bijdrager
    johnkeates

    Zoals ik zei: voor deze situatie toereikend:) (Post no. 8)

    PHP kan je alleen maar op de server uitvoeren, dus dat lijkt me vanzelfsprekend. Maar ik weet niet hoe de site verder in elkaar steekt, ik weet helemaal niets over het project. Misschien staat er nog niet eens een full-cached MVC PHP systeem klaar om de pagina’s te serveren, maar misschien ook wel. Misschien is het zelfs een embedded PHP site, waar gewoon op willekeurige plekjes ‘opleukertjes’ met de datum, tijd, en andere dingetjes toegevoegd zijn. Ik weet het niet, en daar ging het ook niet over;) Wat ik in post 8 zei: Het is toereikend zoals het nu is, de TS is er blij mee, en het leven gaat door.

    Bijdrager
    jeroeng21

    Nu je toch begint over het Zend Framework, kan iemand mij uitleggen wat het precies is en wat de voordelen zijn? Ik heb er wel eens naar gekeken maar ’t was mij te vaag.

    Bijdrager
    Jakko Westerbeke
    johnkeates op 13 april 2011

    PHP kan je alleen maar op de server uitvoeren, dus dat lijkt me vanzelfsprekend.

    Volgens mij begrijp je niet goed wat ik probeerde te zeggen … die opmerking over het op de server uitvoeren was niet bedoeld omdat ik misschien dacht dat je PHP ook in de browser kunt uitvoeren, maar als reactie op jouw stelling dat het ook met JavaScript kan. Ik stelde de vraag waarom je aan de ene kant zegt dat de server liefst ontlast moet worden, maar je aan de andere kant voorstelt om het ingewikkelder te maken dan nodig is als het toch op de server uitgevoerd wordt. Dit om te voorkomen dat er een antwoord zou volgen dat neerkomt op: “Het kan eenvoudiger door het niet op de server te doen.”

    johnkeates op 13 april 2011

    Het is toereikend zoals het nu is, de TS is er blij mee, en het leven gaat door.

    Dan moet je dus niet, als iemand iets voorstelt dat hij als verbetering van de voorgestelde methode ziet, opmerken dat het niet goed is — want dan hebben sommige soorten mensen de neiging te vragen waarom …

    Bijdrager
    johnkeates

    Zend Framework is wat het zegt: een framework gemaakt door Zend. Zend is het bedrijf achter de taal engine van PHP. Een framework kan uitgelegd worden als een verzameling veelgebruikte non-standaard taken in een programmeertaal. Het voorkomt meestal dat mensen het wiel constant opnieuw uitvinden, en om dat er in dit geval door verschrikkelijk veel mensen aan gewerkt wordt heb je ook een grote kans dat er weinig fouten in zitten en dat overal goed over nagedacht is. Bovendien houden ze zich allemaal aan eenzelfde standaard, waardoor het door iedereen die die standaard kent te hanteren is. Bovendien is de code mee portable als je tussen twee projecten of webapps klassen wil delen (zoals controllers of models bijvoorbeeld – of plugins, resources.. noem maar op). Je kan er een compleet CMS op bouwen, of het beperken tot een SOAP communicator voor backend taken van een website, bijvoorbeeld om een CRUD API te maken voor een zelfontworpen database.

    Het is programmeren op een hoger niveau. Niet ‘slimmer’ of ‘moeilijker’, maar zoals dat in programmeertalen en patronen gaat gewoon een hogere abstractie. C wordt dan ook gezien als een minder high-level programmeertaal dan bijvoorbeeld C# (managed code) of dingen als Java (bytecode + VM) en PHP (scripttaal). Dan kan je ook in assembly schrijven, dat is nogal low-level; er is minder voor je klaargezet, je moet alles grotendeels zelf doen. Waar je in php gewoon $a = “tekst”; mag doen, zal je in assembly toch eerst flink wat werk moeten doen om die variabele als tekst op te slaan.

    Nu kan je qua ‘level’ varieren in programmeer talen, maar je kan in een bepaalde taal ook functies maken die algemeen goed bruikbaar zijn, zoals SPL in PHP, de Standard PHP Library; een bibliotheek van functies die opgebouwd zijn uit lagere php-functies. (het zijn in princiepe interfaces en classes maar dat doet er niet toe)

    Stel dat je nu constant procedural programmeert (dus op regel 1 gebeurt iets, op regel 2 ga je er mee verder, op regel 3 duw je misschien wat HTML naar voren, op regel 4 maak je even verbinding met je database, enz enz), dan zou je eerst kunnen denken om object-oriented te programmeren. Dat is al een iets hoger niveau dan procedural. (maar het is niet altijd het beste wat er is, je kan bijv. moeilijk gaan doen en een klasse knutselen die phpinfo() aanroept, maar een echte reden is er zo 1-2-3 niet voor)

    Klasses zijn structuren om data te behandelen en te manipuleren. Stel dat je zelf je navigatie bouwt, dan zou je een klasse kunnen maken die menuElement heet, met methodes setUrl($url) en setLabel($label) en dan iets van getHrefTag() zodat je de complete opmaak in een keer kan krijgen. Dan laad je eerst een paar klassen in met je informatie en dan ga je in een loopje alle objecten langs om de complete html tags er uit te halen. Daar heb je in principe niets speciaals aan om dat dat ook met een gewone functie kan, maar een object kan je later nog manipuleren, en het resultaat van een functie niet. Dat is dan gewone data en daar moet je het maar mee doen. Misschien is het voorbeeld te simpel, maar anders zou het misschien te complex worden.

    Klassen zijn vooral handig om binnen een programma bepaalde regels en triggers te handhaven, en om data structuren te creëren. Het is een stukje standaardisatie om de code beheersbaar, leesbaar en snel te houden (want PHP is sneller met wat instances van klassen dan honderden losse functies).

    Zend Framework is natuurlijk niet het enige framework. Het is vrij abstract en voor de meeste beginners van een te hoog niveau om mee te starten.

    Meestal gaan mensen die daar terecht komen als volgt te werk (zonder dat ze het weten):

    1. PHP ergens zien en denken ‘dat is leuk’
    2. Knutselwerkjes maken
    3. Efficienter werken naar mate programma’s groter worden
    4. Het wiel een aantal keer opnieuw uitvinden, en daarna bedenken dat het handig is zelf een bibliotheek te maken.
    5. Op zoek gaan naar bestaande oplossingen
    6. Externe bibliotheken gebruiken, misschien PECL of PEAR erbij
    7. Een eigen systeem bedenken dat globaal bruikbaar is
    8. Frameworks ontdekken, een paar simpele beginnen (CakePHP, CodeIgniter ofzo)
    9. Hogere niveau’s opzoeken (caching, andere talen mengen, hogere structuren toepassen) met meer abstractie, zoals Zend_Application als basis en later misschien APC en Hiphop.

    Dan een tijdje later ruiken aan Java en C++, misschien wat Perl, Ruby of Python. SQL functies bouwen, enz enz.

    De snelheid en welk punt je bereikt heeft puur te maken met of je iets MOET maken en WAT je moet maken. Een statische site met een paar dynamische elementen zal je niet echt verder dan 3. of 4. brengen (niks mis mee – tijd besteden aan iets wat je niet gaat gebruiken is natuurlijk niet handig), maar soms moet je een CMS achtig ding hebben, en dan bouw je dat, of je moet opeens met andere servers communiceren, of je moet veilige applicaties maken of code moet worden uitgewisseld met andere programmeurs en een standaard moet ontworpen worden. Soms moet je een complete applicatie maken die schaalt tot duizenden servers en interactief samenwerkt met database clusters en worker queues, caches constant bijwerkt en optimaliseert, zelf code schrijft (je kan PHP zelf scripts laten schrijven voor optimalisatie) enz. Dan kom je snel bij 9 uit, of hoger. Het probleem is (ofja, het is geen echt probleem) dat men meestal niet zo veel nodig heeft, en blijft hangen op een punt waar het ‘ook werkt’ en meer is dan ook niet nodig.

    Er zijn natuurlijk ook voorkeuren; sommige mensen willen perse alles zelf maken, of willen een bepaald framework gebruiken, en een andere dan weer niet, of willen alleen een bestaand systeem nemen en dat een beetje aanpassen, of kopieren/plakken van willekeurige sites. Het kan allemaal. Wie wat doet, en waarom is gewoon een eigen keuze:)

    Stel dat je voor jezelf weet dat je nooit meer dan een half statische site wil hebben (dus een statische site met CMS voor het bijwerken, wat hem niet statisch maakt, maar ook niet dynamisch om dat de site niks ‘doet’), dan kan je gewoon een bestaand CMS gebruiken (Concrete5, Silverstripe, WordPress) en daar zelf een template voor bakken, misschien een plugin schrijven of gewoon laten voor wat het is.

    Maar als je weet dat je later misschien een interactief systeem moet maken dat met verschillende externe API’s moet communiceren, autonoom moet functioneren, mail moet kunnen sturen en ontvangen (dus reageren op mail) en misschien samen met 10 andere mensen gemaakt moet worden, dan is het handig om een framework en een coding standard te gebruiken. Plus je kan 10 jaar later nog snappen wat je code doet. Docblock comments er bij en je kan zelfs documentatie genereren.

    Bijdrager
    jeroeng21

    Wow, wat een reactie! Super!

    Na je verhaal te hebben gelezen is het mij duidelijk waar een Framework handig voor is. Nu ben ik met mijn huidige project al te ver om het nog overhoop te gaan gooien, maar een volgende project zal ik serieus gaan kijken naar een framework. Lijkt mij erg handig.

21 berichten aan het bekijken - 1 tot 21 (van in totaal 21)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.