Avatar billede intenz Novice
04. juli 2005 - 16:04 Der er 8 kommentarer og
1 løsning

Indsæt efter X antal linjer tekst

Nogle der har en god ide til hvordan man kan lave noget php, så jeg kan vælge at indsætte en tekst efter X antal linjer.

Min tekst er f.eks. sådan:
------------
bla bla bla bla bla bla bla
bla bla bla bla bla bla bla
bla bla bla bla bla bla bla
                                  <---- indsæt her
bla bla bla bla bla bla bla
bla bla bla bla bla bla bla
                                  <---- indsæt måske her
bla bla bla bla bla bla bla
bla bla bla bla bla bla bla
-----------

Teksten kan variere fra gang til gang.
Avatar billede jaw Nybegynder
04. juli 2005 - 16:07 #1
Skal det være for hver 3. linie hver gang, eller hvad? Og hvor kommer de linier fra, bliver de kørt i en løkke? Hvis de køres i en løkke, så kan du jo sagtens bare smide en tæller på, f.eks.:

$i = 0;
while( - det der nu skal ske -) {
  if($i == 2) echo "tekst1";
  elseif($i == 5) echo "tekst2";
  - og hvad der så ellers skal ske
}

eller, hvis det skal være fast hver 2. linie, tror jeg du kan:

$i = 0;
while( ) {
  if(($i%2) == 0)
    echo "teksten";
  - og hvad der så ellers skal ske
}
Avatar billede intenz Novice
04. juli 2005 - 16:12 #2
Det skal være efter et antal linjer som jeg selv definerer fx:
$linje = "10";

Jeg skulle måske også have nævnt at teksten kommer ud af mysql som ren tekst, hvorefter jeg laver nl2br() og nogle andre ting på den, så jeg får den som en variabel, fx. $artikel
Avatar billede jaw Nybegynder
04. juli 2005 - 16:14 #3
Jeps, og hvis du så gør det, hvordan vil du så have at den skal kunne indsætte efter 10 linier? Antallet af linier afhænger vel af, hvordan brugeren har sin maskine opsat mht. opløsning etc.?

Hvis det skal være efter x-antal linier (rækker) fra databasen, så bør mit tidligere forsøg du'.
Avatar billede intenz Novice
04. juli 2005 - 16:22 #4
Jeg tager den lige helt fra starten, jeg tror vi snakker lidt forbi hinanden.

Jeg har en mysql database med en masse artikler i. Hver artikel ligger i en række i databasen, der indeholder id, overskrift, selve artiklen og nogle andre ting.

Når jeg henter en artikel ud får jeg den som f.eks. $row[artikel].
Denne variabel indeholder så hele artiklen (typisk på omkring 30-40 linjer), jeg vil så kunne indsætte en tekst/reklame eller hvad jeg nu vil, efter f.eks. 10 linjer.

Det skal så helst kunne laves automatisk, da jeg ikke rigtig gider at sidde og opdele 100-vis af artikler i database i 2 stykker.

Så jeg tror ikke løkken kan bruges, da hele artiklen ligger i en enkelt variabel, og derfor vil løkken kun blive kørt en gang.

Ellers skulle man måske splitte hele artiklen op i linjer og indsætte den i en array, og så køre løkken. Det virker bare så besværligt.
Avatar billede jaw Nybegynder
04. juli 2005 - 16:29 #5
Ja okey, vi snakkede ikke forbi hinanden egentlig, jeg håbede bare det ikke var sådan du havde tænkt dig :)

For som du har nu, bliver det svært, da det - som tidligere nævnt - afhænger af brugerens opsætning hvor meget det fylder. Noget der fylder 10 linier på din skærm, kan jo sagtens fylde 15 på min, og det kan php ikke tage hensyn til. Det du måske kan er at bruge antal tegn, men det bliver nok også lidt bøvlet... Generelt tror jeg ikke, det vil blive særlig pænt, for selvom du tager antal tegn, så kommer det aldrig til at passe med slutningen af en sætning, medmindre du opdeler sætningen ved hvert punktum...
Avatar billede intenz Novice
04. juli 2005 - 16:32 #6
Ja, det kan egentlig godt se nu.

Men hvad så hvis jeg vil gøre det efter f.eks. 2. nye afsnit. Et nyt afsnit er lavet ved:
bla bla bla bla
bla bla bla bla

bla bla bla bla
bla bla bla bla
-------
Altså et ekstra mellemrum.
Jeg har prøvet noget str_replace("\n\n", "ny tekst", $row[artikel]), men det vil den ikke rigtigt.
Har også prøvet forskellige variationer med \n\r og omvendt.
Avatar billede intenz Novice
04. juli 2005 - 16:42 #7
Er kommet lidt længere, dette indsætter efter nyt afsnit:
$artikel = nl2br($artikel);
$artikel = str_replace("\n","", $artikel);
$artikel = str_replace("\r","", $artikel);

$artikel = str_replace("<br /><br />","<br><br>NY TEKST<br><br>", $artikel);
---------
Problemet er nu, at den kun gør det hele vejen ned, det tror jeg dog godt jeg selv kan ordne.
Avatar billede intenz Novice
04. juli 2005 - 16:50 #8
Så virker det, skriver lige koden hvis andre har samme problem, den indsætter efter 2. afsnit her:
----------------
$artikel = nl2br($artikel);
$artikel = str_replace("\n","", $artikel);
$artikel = str_replace("\r","", $artikel);

$count = 0;
while ($count != 2) {
$start = strpos($artikel, "<br /><br />", $pos);
$slut = $start + strlen("<br /><br />");
$len = $slut - $start;
$pos = $slut;
$count++;
}
$artikel = substr_replace($artikel, '<br><br>NY TEKST<br><br>', $start, $len);
Avatar billede intenz Novice
04. juli 2005 - 16:58 #9
Lidt mere optimalt:

$artikel = nl2br($artikel);
$artikel = str_replace("\n","", $artikel);
$artikel = str_replace("\r","", $artikel);

$count = 0;
$var = "<br /><br />";
$ny_tekst = "<br><br>NY TEKST<br><br>";
while ($count != 2) {
$start = strpos($artikel, $var, $slut);
$slut = $start + strlen($var);
$len = $slut - $start;
$count++;
}
$artikel = substr_replace($artikel, $ny_tekst, $start, $len);
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester