07. oktober 2011 - 10:39Der er
37 kommentarer og 1 løsning
Få følgende kode til at vise tilfældigt tekst automatisk efter xx sek
Hej. Er der nogle der kan hjælpe mig med følgende forespørgelse.
Jeg benytter php fusion, og ønsker at nedenstående kodes indhold automatisk skifter efter nogle sekunder. Jeg har lavet det så den viser tilfældige "testimonals", men kan ikke få det andet til at virke..
Nogle der kan hjælpe?
<div id="testimonials" class="fivecol last"> <?php $result=dbquery(" SELECT user_id, user_name, user_status, user_testimonial FROM ".DB_USERS." WHERE user_status = '0' AND user_testimonial !='' AND user_approve !='1' ORDER BY RAND() LIMIT 1 "); ?> <?php while($data = dbarray($result)): ?> <blockquote> <?php $text = nl2br(censorwords($data['user_testimonial'])); ?> </blockquote> <blockquote> <?php echo trimlink($text, 50); ?></br></br> – <?php echo profile_link($data['user_id'], $data['user_name'], $data['user_status']); ?> </blockquote> <?php endwhile ?> </div>
Virker din kode så langt, at du får udskrevet et tilfældigt testimonials? Men at du gerne vil have et nyt tilfældigt testimonial efter for eksempel 5 sekunder? Hvad med at bruge funktionen sleep(5) ? For eksempel:
while(true) { $result=dbqueq(SELECT user_id, user_name......[o.s.v. som i din kode]); [resten af din koden der placerer resultatet af queryen i variabler og udskriver disse]; sleep(5); }
Det skulle resultere i (ikke testet) at din oprindelige kode (forudsat at den virker) bliver gentaget hver femte sekund, hver gang resulterende i en ny testimonial.
zidane, hvis du nu fra anden side får konkret hjælp til en bedre og mere økonomisk løsning (og jeg kikker med, for jeg er også ivrig efter at udvide mit repetoire) er der måske ingen grund til at kikke nærmere på mit forslag.
Hvis du alligevel vil kikke videre, så har jeg først et spørgsmål:
Du siger "Jeg har lavet det så den viser tilfældige testimonials, men jeg kan ikke få DET ANDET til at virke". Jeg gik derfor ud fra, at visningen af tilfældige testimonials virker efter hensigten. Derfor kikkede jeg ikke indeni koden. (Der er nogle tags jeg ikke kender, velsagtens fordi jeg ikke har arbejdet med phpfusion.) Så mit spørgsmål er, om det er korrekt, at visning af en enkelt tilfældig testimonial virker upåklageligt? Hvis der er problemer dermed, er det naturligis disse vi skal kikke på først og foreløbigt glemme resten.
Så grunden til dit spørgsmål var (antog jeg altså,) at du gerne ville have visningen af en tilfældig testimonial gentaget hvert femte sekund. Jeg foreslog som den enkleste løsning (som ikke alle er enige i) at placere den virkende kode i en løkke og placere en 5 sekunders sleep deri. Men jeg var doven, så jeg viste kun selve while løkken og sleep funktionen og antog at du selv kunne pusle syntaksen på plads, såsom med de korrekte php åbnings og slut tags. Men jeg deler nu din kode i tre dele, hvoraf del1 = <div id="testimonials" class="fivecol last"> , del3 = </div> , og del 2 er alt derimellem. Så en måde at gøre det på er denne:
din del1
<?php while(true) { ?>
din del2
<?php } ?>
din del 3
Hvis du gør således, får du så stadig fejlmeldinger? I så fald, fortæl hvilke fejlmeldinger det er.
Fingeret streaming ved hjælp af while-løkker og sleep er noget, der fleste begyndere skal igennem - men man finder hurtigt ud af, det er en håbløs fremgangsmåde.
Situationer som denne er, hvad Ajax blev skabt til. Derfor ville det nok være en idé at kikke på Ajax, men det er ikke noget, man lærer på en eftermiddag ... eller 20 =)
zidane, det skal nok være rigtigt, at du og jeg er begyndere, der som led i vores udvikling skal igennem fingeret streaming og lignende, og at moden programmering gør brug af teknikker som Ajax. For mit eget vedkommende hører Ajax til de ting jeg har i sinde at lære at beherske (men for tiden er jeg optaget af at lave componenter til joomla, noget der heller ikke kan læres på en eftermiddag eller 20.) Så en fornuftig løsning ville uden tvivl være at du giver dig til at investere den nødvendige tid i at lære Ajax og i mellemtiden stopper dette projekt og lukker spørgsmålet (med point til dig selv.)
Hvis du på den anden side foretager det informerede valg, at du for nærværende vil bruge en php løsning, vel vidende, at der er løsninger, der suger mindre på serveren (et valg, som i så tilfælde må respekteres af alle,) så vil jeg godt være med. I så fald venter jeg på din reaktion på #4.
@zidane5: Normalt vil et PHP script time ud i løbet af 30 sekunder. Hvis du undlader at kalde scriptet yderligere, burde du derfor kunne fjerne det efter et halvt minut.
Ligger serveren på nettet? Hvis det er tilfældet, administrerer du den så selv, eller ligger den under et hotel?
Du kan begynde her - men det er ikke noget, du lige kaster dig ud i. Du skal være temmelig stærk i JavaScript, DOM, CSS og PHP.
Du kan sagtens læse en masse såkaldte Ajax tutorials rundt om på nettet. Problemet er bare, at der ikke er nogen somhelst garanti for lødigheden af det skrevne.
At Christian anbefaler en bestemt kode/fremgangsmåde uden at forstå virkemåden af en helt elementær while-løkke, er desværre ikke et særsyn. Det synes derimod ofte at være normen. Foreløbig har vi brugt nettet til at opbygge et tvivlsomt mix af et Informationssamfund, et Misinformationssamfund og et Undeholdningssamfund ... der er lysår, til vi når Videnssamfundet :o|
Du har rod i dine gåseøjne i din query. Sådan skal den se ud:
$result=dbquery(" SELECT user_id, user_name, user_status, user_testimonial FROM ".DB_USERS." WHERE user_status = '1' AND user_testimonial !='' AND user_approve !='1' ORDER BY RAND() LIMIT 1 "); ?>
- men du skal jo stadig have HTML, HEAD og BODY tags i dokumentet - ligesom du også skal have inkluderet filen med dine PHP fuktioner. Efter PHP fejlen at dømme, har du ingen af delene
Ja, det er jo det, jeg skriver: "ligesom du også skal have inkluderet filen med dine PHP fuktioner". dbquery, dbarray, censorwords og profile_link er ikke defineret i koden, du viser.
Er det overhovedet kode, du selv har skrevet, eller er det noget, du har planket et eller andet sted?
Det her tager ikke 1 testimonial af gangen, men 100 og bruger Javascript til at skifte mellem det.
Fordele: - Du undgår at alle dine brugere laver et server request hvert 5 sekund. - Det virker.
Ulemper: - Det ene request de laver downloader 100 testimonials, men antog disse var små, hvis du forventer at en bruger kan læse dem på 5 sekunder. - Det virker ikke, hvis brugeren har deaktiveret javascript. - Efter 500 sekunder, ser brugeren den første testimonial igen. (forudsat, at du har 100 eller flere testimonials.) - Det er vigtigt at der ikke er noget blank space mellem blockquotesne indbyrdes og mellem det omkransende div tag.
<div id='testimonials' class='fivecol last'><?php $result=dbquery(' SELECT user_id, user_name, user_status, user_testimonial FROM '.DB_USERS.' WHERE user_status = '1' AND user_testimonial !='' AND user_approve !='1' ORDER BY RAND() LIMIT 100 '); $style = 'block'; while($data = dbarray($result)): $text = trimlink(nl2br(censorwords($data['user_testimonial'])), 50); ?><blockquote style="display:<?php $style;?>"> <?php echo $text; ?></br></br> – <?php echo profile_link($data['user_id'], $data['user_name'], $data['user_status']); ?> </blockquote><?php $style = 'none'; endwhile ?></div> <script> var testimonial = null; function start_testimonials(){ testimonial = document.getElementById('testimonials').firstChild; setInterval(switcher, 5000); } setTimeout(start_testimonials, 5000); function switcher(){ var n = testimonial.nextSibling; if(n == null){ n = testimonial.parentNode.firstChild; } testimonial.style.display = 'none'; testimonial = n; testimonial.style.display = 'block'; } </script>
Der skulle ikke stå mål hehe.. Der skulle stå man. Når man opdatere siden, fordi så kommer bliver boksen automatisk dobbelt så stor, fordi det næste testimonal stå under den..
Det lyder ikke rigtigt, og min egen test kode gør ikke det.
Det eneste problem jeg kan med mit forslag er vist du ikke har en fast størrelse på testimonials div'en. Det ville gøre at de individuelle testimonial ændrer størrelsen på elementet i sidens layout og dermed kan få alt til at rykke sig.
hmm okaay. Altså jeg måtte ændrer lidt på det du gav mig, fordi det virkede ikke. Jeg har indsat nedenstående, det virker som det skal. Det eneste er, hver gang jeg opdaterer siden, så bliver boxen dobbelt så stor, fordi det næste testimonal stå under, men efter 5 sek, får den normal størrelse igen.
<div id='testimonials' class='fivecol last'><?php $result=dbquery(" SELECT user_id, user_name, user_status, user_testimonial FROM ".DB_USERS." WHERE user_status = '0' AND user_testimonial !='' AND user_approve !='1' ORDER BY RAND() LIMIT 100 "); $style = 'block'; while($data = dbarray($result)): $text = trimlink(nl2br(censorwords($data['user_testimonial'])), 50); ?><blockquote style="display:<?php $style;?>"> <?php echo $text; ?></br></br> <font size="1">– <?php echo profile_link($data['user_id'], $data['user_name'], $data['user_status']); ?></font> </blockquote><?php $style = "none"; endwhile ?></div> <script> var testimonial = null; function start_testimonials(){ testimonial = document.getElementById('testimonials').firstChild; setInterval(switcher, 5000); } setTimeout(start_testimonials, 5000); function switcher(){ var n = testimonial.nextSibling; if(n == null){ n = testimonial.parentNode.firstChild; } testimonial.style.display = 'none'; testimonial = n; testimonial.style.display = 'block'; } </script>
Husk type attributten på script-tagget: <script type="text/javascript">
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.