Gå til innhold

Hvordan includere kun en paragraf fra stor side


Anbefalte innlegg

Skal ha en nyheter side som har nyheter fra mange forskjellige dager slik som dette:

 

Torsdag:

Masse nye kråker i det store treet

 

Fredag:

En kråke mindre i dag, gitt.

 

Lørdag:

Kråka har kommet tilbake.

 

Dette er da hele nyheter siden som er linket til på forsiden, men så vil jeg includere (på forsiden) den siste nyheten, som i dette tilfellet er "Torsdag:

Masse nye kråker i det store treet". Jeg har da denne i en <p> tagg tenker jeg, og spørsmålet er da om det er mulig å kun includere dette på forsiden?

Det må være php fordi når jeg oppdaterer nyhetersiden, så vil jeg at forsiden skal includere det jeg skrev sist. Gidder liksom ikke skrive det samme om igjen på forsiden.

 

Skjønner dere hva jeg mener? Er newbie når det kommer til php koding, så ville vært supert om dere legger ved litt informasjon i koden hvor det står hva dere har gjort og hvorfor :) (dere behøver ikke gjøre det :p)

 

På forhånd takk :)

 

EDIT:

Eller noe som tar de første 15 orda og limer dem inn på forsiden og skriver "..." etter de orda.

Endret av w3p
Lenke til kommentar
Videoannonse
Annonse

Om du bare har en <p> på siden du skal ha inn så er det ganske enkelt:

 

$file = file_get_contents("/path/til/fil.html"); // Leser filen til en string
preg_match("/<p>[^<\/p>]*<\/p>/i", $fileContent, $news); // En regex som henter ut innholdet i første p, med taggene
$news = $news[0]; // Fikse litt

echo $news; // Skrive ut

 

Verre er ikke det.

Forutsetter at du kjører versjon 4.3+

Lenke til kommentar

fikk det ikke til å fungere. Har plass på start.no.

 

i news fila:

<div id="smallcaps">April 7, 2005 15:29</div>
<h4>masse lur tekst her.</h4>

 

siden hvor jeg vil ha dette inkludert:

<?php
$file = file_get_contents("news.php"); // Leser filen til en string
preg_match("/<h4>[^<\/h4>]*<\/h4>/i", $fileContent, $news); // En regex som henter ut innholdet i første p, med taggene
$news = $news[0]; // Fikse litt

echo $news; // Skrive ut
?>

 

fikk det ikke til å fungere :s ingen feilmeldinger men ingen ting kom opp.

 

EDIT: eller at den tar med første 20 orda og hvis det er flere ord enn det så setter den ... med en link til hoved news siden... blir dette mye vanskeligere?

Endret av w3p
Lenke til kommentar

Det er en feil i den regexen til Findus.

[^<\/p>]* Vil ikke fungere etter tenkt hensikt her. Den forkaster alle avsnitt som inneholder blandt annet "p".

Det den sier er at vi skal matche så lenge vi ikke har 0 eller flere av <, /, p eller >.

Med andre ord sier den ikke at den skal matche alt som ikke er </p>, som var hensikten. For å få til det kan man skrive (?>(?!<\/p>).)*

 

Enkelte websider lukker ikke <p> taggen men åpner bare en ny. Så for å være på den sikre siden så kan man skrive (?>(?!<\/?p>).)* så vil vi matche alt fram til neste åpne eller lukke tag.

 

Ferdig regex:

preg_match("/<p[^>]*>(?>(?!<\/?p[^>]*>).)+<\/?p[^>]*>/is",$fileContent,$news);

Her er det også tatt høyde for at det kan være tildelt klasse eller annet inne i <p> taggene.

Det finnes en enklere regex som vil fungere like bra, og den ser slik ut:

 preg_match("/<p[^>]*>.*?<\/?p[^>]*>/is",$fileContent,$news);

Skal du bruke <h4> ville jeg ha gjort følgende:

preg_match("/<h4>.*?<\/h4>/is",.....);

Er ikke så ofte at folk tildeler klasser til <h*> tags, og de lukkes stort sett.

 

grunnen til at "/<h4>[^<\/h4>]*<\/h4>/i" ikke virker er at den forkaster alle <h4></h4> tagger som inneholder "h". (<h4>masse lur tekst her</h4>)

 

Å filtrere ut første 20 ord kan du gjøre etter at du har fått tak i det du vil ha. Mener å huske at det finnes tråder på forumet her fra før som omhandler dette.

Lenke til kommentar

Det finnes en måte å gjøre det med en regex, men den er ikke så veldig lesbar at det gjør noe.

$file = file_get_contents("news.php");
preg_match ("/<h4>((?:\S+\b\s*){1,20}).*?<\/h4>/s",$file,$news);
echo $news[1]."<a href='adresse'>...</a>;

 

Et annet eksempel som du kan bygge videre på finner du i denne tråden.

Lenke til kommentar

ok takker :) siste spm tror jeg: vet dere om noen tutorials hvor jeg kan lese om funksjonen "preg_match" ?

 

EDIT: Når jeg satt inn den php fuksjonen, så printes det bare ut 1 bokstav! så kommer de ... som har link i seg. Hvordan får jeg første 20 ord?

 

EDIT2: fant ut at den stopper når det kommer en ukjent bokstav (æøå). Hvordan kan jeg få den til å inkludere disse symbolene?

I mitt tilfelle så var det første ordet "på" så da tok den bare med en bokstav og slutta før "å"-en.

Endret av w3p
Lenke til kommentar

Takker nå fungerer det :) Men har et lite pirkespørsmål igjen:

 

Coder jeg bruker nå

<h4>
<b>News</b><br />
<?php
$file = file_get_contents("news.php");
preg_match ("/<h4>((?:[0-9a-zæøå,\.'\"]+\s*){1,20}).*?<\/h4>/is",$file,$news);
echo $news[1];
?>
<a href="index.php?side=news">...</a>

<p><a href="index.php?side=news">More news here.</a></p>
</h4>

 

Nå er det et mellomrom (<space>) mellom det siste ordet og "...". Det ser liksom så unaturlig ut. Hvordan kan jeg få vekk denne <space>-en ? Prøvde å viskle vekk så mye plass som mulig, uten hell...

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...