slacky Skrevet 26. oktober 2009 Del Skrevet 26. oktober 2009 Hei. Nå er det ikke en evighet siden jeg laget meg et lite nyhetscript. Jeg har fosøkt mye rart, men får ikke til å få slik "avis oppsett". Så er det noen "der ute" som vet hvordan fikser jeg det slik at nyhetsoppsettet kan vises slik som i bildet under? Jeg må nevne at jeg benytter meg av PHP + MySQL. Da flatfiler er usikre, samt fyller mine behov. Håper noen vet "trikset" Mvh Jarl H. Lenke til kommentar
serrghi Skrevet 26. oktober 2009 Del Skrevet 26. oktober 2009 Kan nevne at dette har fint lite med PHP å gjøre men HTML, ta en kikk på google om HTML og CSS. Lenke til kommentar
slacky Skrevet 26. oktober 2009 Forfatter Del Skrevet 26. oktober 2009 (endret) Jaha? Skjønner ikke hvordan det har seg, i og med at en skal kalle til nyhetene med MySQL. Dette vil bare føre til at nyheten listes i rekkefølge: $query = "SELECT * FROM `news` ORDER BY `id` DESC LIMIT 12"; Altså, om du ikke ser det så skal jeg ikke bare ha et nyhetssytem som viser nyhetene i 2 kolonner. (Det er ikke værre enn å sette 49% i td-ene. Men, jeg ønsker å ha et oppsett som viser første nyhet som stor (100%). Deretter 2 rader nedfor der nyhetene er 49% og 2 kolonner. Så starter det om igjen. en nyhet som er 100%. påfulgt av 4 nyheter som er 49%... Jeg tviler på at HTML -alene- løyser dette. men, selvfølgelig krever dette HTML også. (Men, kansje ikke PHP blir det rette, men så ikke noe MySQL forum. Om det finnes sett tråden gjerene over dit.) Endret 26. oktober 2009 av slacky Lenke til kommentar
footnote Skrevet 26. oktober 2009 Del Skrevet 26. oktober 2009 Dette handler om generell programmering. Kjenner du til modulo funksjonen? Du kan løse problemet ved å utnytte at hver femte nyhet skal være "bred" nyhet". Dette gjør du ved å bruke en teller for hver nyhet slik at nyhet 0 er bred, nyhet 5 er bred, nyhet 10 er bred også videre. Videre kan du utnytte modulo 2 for å skille på venstre og høyre kolonne: Pseudo-kode: // news er et array med alle nyhetene for (i = 0; i < sizeof(news); i++) { j = i % 5; // lagrer resultatet, siden vi utnytter modulo 2 av dette if (j == 0) { // hver 5. nyhet print "bred nyhet" } else { if (j % 2 == 1) { //annenhver nyhet er i venstre kolonne print "venstre kolonne"; } else { // og annenhver i høyre print "høyre kolonne"; } } } resultatet blir noe ala dette: ------------------------------------------------ | Hele kolonnen | ------------------------------------------------ | venstre kolonne | høyre kolonne | ------------------------------------------------ | venstre kolonne | høyre kolonne | ------------------------------------------------ | Hele kolonnen | ------------------------------------------------ | venstre kolonne | høyre kolonne | ------------------------------------------------ | venstre kolonne | høyre kolonne | ------------------------------------------------ Du må selvfølgelig lage kode for å ta hånd om de tilfellene der du ikke har 10 nyheter, f.eks. bare 9. Slik at layouten blir rett. Hvis du bruker <table> må du ha kode for å legge inn ny rad og avslutte rad på rett plass etc. Men du kan bruke pseudokoden som utgangspunkt for dette. Lenke til kommentar
slacky Skrevet 26. oktober 2009 Forfatter Del Skrevet 26. oktober 2009 (endret) Flotters, var noe alà dette jeg forventet Kjenner nok ikke til denne modulo funksjonen, men det varer nok ikke lenge :-) Skal se hva jeg kan få til ut i fra dette Pseudo-koden Ellers mange takk for hjelpen. :-) EDIT: Jeg testet ut scriptet like etter at jeg så på det.. og fikk meg en error: Parse error: syntax error, unexpected '=', expecting ';' in /home/rockngo3/public_html/pgex/include/news2k.php on line 4 for (i = 0; i < sizeof(news); i++) { Samt så la jeg merke til at denne printen mangler endig? print "bred nyhet" Skal det være slik? :s Endret 26. oktober 2009 av slacky Lenke til kommentar
Jonas Skrevet 26. oktober 2009 Del Skrevet 26. oktober 2009 Hihi, det footnote postet var bare pseudokode. Du er dermed selv nødt til å legge på semikolon og dollartegn der det skal være. Kan samtidig nevnes at sizeof bare er et alias for count. Lenke til kommentar
slacky Skrevet 26. oktober 2009 Forfatter Del Skrevet 26. oktober 2009 Hmm... så hvorfor ikke bare benytte seg av count(news); da?... Samt, så kan jeg ikke så mye php at det gjorde noe.. Jeg er dog litt usikker på hvor jeg skal plassere vært "$"? Er det mer som må til for å bruke scriptet ellers? Lenke til kommentar
footnote Skrevet 26. oktober 2009 Del Skrevet 26. oktober 2009 Får bare beklage, trudde kanskje du hadde litt erfaring i og med at du hadde skrevet et nyhetsskript. Driver mest med python så derfor ble pseudokoden lite PHP vennlig.. Hacket sammen et skript som gir deg "trikset" også prøver du å selv å lese inn fra databasen istedet for de to arrayene som jeg bruker. Her er et skjermbilde som bør vise resultatet av å kjøre skriptet. Skriptet bygger opp html-koden i $text variabelen, og skriver den ut. La skriptet her jeg: http://www.pastie.org/670493 trykk download for å laste ned Lenke til kommentar
slacky Skrevet 26. oktober 2009 Forfatter Del Skrevet 26. oktober 2009 (endret) nyhetscipt er så og si blandt det mest basic av PHP som er mulig, i og med at jeg er kjent med fler foldige CMS'er. Så kjenner jeg grunnleggende +/-. Jeg mangler info på mange felter, men har gjerne litt ekstra info på andre. Jeg skjønner altså et script når det er completo, og jeg kan endre dem osv. Men, å bygge et fra bunn å grunn er det jeg lærer meg nå. Ved å lage masse script, som jeg vil benytte meg av på min hjemmeside (= Jeg har tatt en liten kikk, og dette er det "vanskelige spørmålet: $news = array("Nyhet 1", "Nyhet 2", "Nyhet 3", "Nyhet 4", "Nyhet 5", "Nyhet 6", "Nyhet 7"); $more = array("bla bla bla bla bla", "bla bla bla bla bla", "bla bla bla bla bla", "bla bla bla bla bla", "bla bla bla bla bla", "bla bla bla bla bla", "bla bla bla bla bla", "bla bla bla bla bla", "bla bla bla bla bla", "bla bla bla bla bla"); Dette forsøkte jeg: include "var.php"; $query = "SELECT * FROM `news` ORDER BY id DESC LIMIT 10"; $result = mysql_query($query); while($r=mysql_fetch_array($result)) { $news = array("".$r['title'].""); $more = array("".nl2br($r['content']).""); } Men, listen endte opp med å bare liste èn nyhet. Hvordan skal jeg gå frem for å erstatte dette med informasjonen som er lagret i databasen under nanvnene; Title, og Content? Jeg har aldri jobbet med array, så jeg vet ikke helt hva denne vil si, og hvordan en skal bruke den. Endret 27. oktober 2009 av slacky Lenke til kommentar
footnote Skrevet 26. oktober 2009 Del Skrevet 26. oktober 2009 (endret) Du kan hente en og en rad fra databasen i for-løkken, og istedet for $news og $more bruke $['title'] direkte. for ($i = 0; $i < sizeof($news); $i++) { $r = mysql_fetch_row(); // eller hva du nå bruker :) ... ... $text .= sprintf(" <tr>\n <td class=\"broad\" colspan=\"2\"> %s <div>%s</div> </td>\n </tr>\n", $t['title'], $t['content']); ... ... F.eks. prøv det! Endret 26. oktober 2009 av footnote Lenke til kommentar
slacky Skrevet 26. oktober 2009 Forfatter Del Skrevet 26. oktober 2009 (endret) Jeg forstår ikke helt hvordan $r = mysql_fetch_row(); skal komme in i saken. Da i følge det jeg kan så er løsningen, i og med at jeg må vel tilkalle result snippen. $r=mysql_fetch_row($result); Såvidt jeg ikke har misforstått noe så er poenget at det skal se ut som noe alà dette: include "var.php"; $query = "SELECT * FROM `news` ORDER BY id DESC LIMIT 14"; $result = mysql_query($query); while($r=mysql_fetch_array($result)) { $title = $r['title']; $cont = nl2br($r['content']); $news = array($title); $more = array($cont); } $text = "<table>\n"; for ($i = 0; $i < sizeof($news); $i++) { $r = mysql_fetch_row($result); $j = $i % 5; if ($j == 0) { $text .= sprintf(" <tr>\n <td class=\"broad\" colspan=\"2\"> %s <div>%s</div> </td>\n </tr>\n", $news[$i], $more[$i]); } else { if ($j % 2 == 1) { //annenhver nyhet er i venstre kolonne $text .= sprintf(" <tr>\n <td class=\"left\" colspan=\"2\"> %s <div>%s</div> </td>\n </tr>\n", $r['title'], $r['content']); // hvis det er siste nyhet, må vi avslutte raden if ($i+1 == sizeof($news)) $text .= " </tr>\n"; } else { // og annenhver i høyre $text .= sprintf(" <td class=\"right\"> %s <div> %s </div> </td>\n </tr>\n", $news[$i], $more[$i]); } } } Men, dette funket ikke slik som forventet dog :b Any tips? ;D Ønsker du å se hvordan dette gikk går du bare inn på testdomenet mitt :b http://rockngo.net/pgex/asd2k.php Endret 27. oktober 2009 av slacky Lenke til kommentar
footnote Skrevet 28. oktober 2009 Del Skrevet 28. oktober 2009 Har gått over koden din å tilpasset det slik jeg tenkte det skulle være. Du hadde blandet sammen litt, og gjorde begge tingene samtidig. Nå leser den ut en rad om gangen til $r. include "var.php"; $query = "SELECT * FROM `news` ORDER BY id DESC LIMIT 14"; $result = mysql_query($query); $num_rows = mysql_num_rows($result); # antallet nyheter $text = "<table>\n"; for ($i = 0; $i < $num_rows; $i++) { $r = mysql_fetch_row($result); $j = $i % 5; if ($j == 0) { $text .= sprintf(" <tr>\n <td class=\"broad\" colspan=\"2\"> %s <div>%s</div> </td>\n </tr>\n", $r['title'], nl2br($r['content'])); } else { if ($j % 2 == 1) { //annenhver nyhet er i venstre kolonne $text .= sprintf(" <tr>\n <td class=\"left\" colspan=\"2\"> %s <div>%s</div> </td>\n </tr>\n", $r['title'], nl2br($r['content'])); // hvis det er siste nyhet, må vi avslutte raden if ($i+1 == $num_rows) $text .= " </tr>\n"; } else { // og annenhver i høyre $text .= sprintf(" <td class=\"right\"> %s <div> %s </div> </td>\n </tr>\n", $r['title'], nl2br($r['content'])); } } } Har ikke testet koden nå så håper det ikke er noen feil her Lenke til kommentar
slacky Skrevet 4. november 2009 Forfatter Del Skrevet 4. november 2009 Har testet en god del frem og tilbake etter denne posten :b (ble sittende uten internett en periode så jeg har ikke kunne takket (= Klabb og babb med WiMAX nettet (Da jeg forsøkte og otimalisere det.) Så, tusen takk for hjelpen, scriptet funker fett. Ja, iallefall etter noen mindre justeringer her og der. F. eks: for ($i = 0; $i < $num_rows; $i++) { $r = mysql_fetch_row($result); $j = $i % 5; MÅ erstattes med: for ($i = 0; $i < $num_rows; $i++) { $r=mysql_fetch_array($result); $j=$i % 5; Samt, så ville du gjentatte ganger gjøre slik: if ($j % 2 == 1) { //annenhver nyhet er i venstre kolonne $text .= sprintf(" <tr>\n <td class=\"left\" colspan=\"2\"> %s <div>%s</div> </td>\n </tr>\n", $r['title'], nl2br($r['content'])); // hvis det er siste nyhet, må vi avslutte raden Som du ser så plasserer du <tr> taggen inni der. Raden skal ikke avsluttes, siden at vi skal ha en til nyhet i samme rad Men, mange takk Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå