Gå til innhold

Sjekke om en fil eksisterer, deretter gjør en handling


Anbefalte innlegg

Heisann!

 

Driver å leker meg litt med Wordpress for tiden, og det trengs litt egen koding for at det skal fungere slik som jeg vil ha det.

 

Blant annet har jeg en forside hvor det skal lastes inn bilder. Bildene får hver sitt navn når jeg laster det opp, f.eks post-25 som da hører til post nr 25. Er det flere biler som skal være med, heter disse post-25-2, post-25-3 osv.

 

Men hittil idag har jeg løst dette med dette enkle grepet i HTML-en:

 

<img src="<?php bloginfo('url')?>/wp-content/uploads/front/post-<?php the_ID(); ?>.jpg" width="500" height="310" />

<img src="<?php bloginfo('url')?>/wp-content/uploads/front/post-<?php the_ID(); ?>-2.jpg" width="500" height="310" />

<img src="<?php bloginfo('url')?>/wp-content/uploads/front/post-<?php the_ID(); ?>-3.jpg" width="500" height="310" />

 

Med andre ord, om bildet ikke finnes, blir det bare blankt(ihvertfall i Firefox) Veit det kommer et lite kryss i IE6 o.l.

 

Det er veldig klønete lagd, da det er to linjer med ubrukelig kode om det er kun et bilde som skal lastes inn.

 

 

Det jeg er ute etter er å lage en slags "If exist" som sjekker om bildet virkelig ligger på den og den plassen, og deretter printer ut riktig kode.

 

 

Noen som kan hjelpe meg? :)

Lenke til kommentar
Videoannonse
Annonse

Takker! Har vært innom den, men blir litt vanskelig når jeg skal finne ut nummeret i f.eks post-25-3

 

<?php
$url = 'http://bconsulting.no/wp/';
$filename = 'wp-content/uploads/front/post-';
$filetype = '.jpg';
$end = '" width="500" height="310" /></div>';
$start = '<div class="img-fix"><img src="';
$num = the_ID(); <-- funker ikke
$num2 = '???'; <-- hva blir det her?

echo $start . $url . $filename . $num . $filetype . $end;

if (file_exists($start . $url . $filename . $num . $filetype . $end)) {
echo "The file $filename exists";
} else {
echo 'The file "' . $filename . $num . $filetype . '" does not exist';
}

?>

 

Den skal jo helst telle opp til 10, automatisk. Noen som veit?

 

EDIT: Sånn, laget rammeverket for dette her.. Men sliter med å konvertere noe WP kode til variabler. F.eks <?php the_ID(); ?> som printer ut id-en til posten trenger jeg å vite.

 

Prøvde $num = the_ID(); , men når jeg skriver the_ID(); printer den med en gang.

 

Det blir da slik:

25The file "wp-content/uploads/front/post-.jpg" does not exist

 

 

Setter kjempestor pris på svar! :)

Endret av AnaXyd
Lenke til kommentar

Du kan bruke en for-løkke til å loope gjennom bildene og skjekke om de finnes, noe slikt:

<?php
$url = bloginfo('url');
$filename = '/wp-content/uploads/front/post-25-';
$filetype = '.jpg';

for ($i = 1; $i <= 10; $i++) {
   if (file_exists($url . $filename . $i . $filetype)) {
		 echo "The file {$filename} exists";
   } else {
		 echo "The file {$filename} does not exist";
   }
}
?>

Lenke til kommentar

Takker! Fungerer utmerket den vøtt!

 

 

Får dele det med dere da:

<?php
$url = 'http://bconsulting.no/wp/';
$filename = 'wp-content/uploads/front/post-';
$filetype = '.jpg';
$end = '" width="500" height="310" /></div>';
$start = '<div class="img-fix"><img src="';
$num = '25-';


for ($i = 1; $i <= 2; $i++) {
   if (file_exists($filename . $num . $i . $filetype)) {
		 echo $start . $url . $filename . $num . $i . $filetype . $end;
   } else {
		 echo '';
   }
}
?>

 

Men, det er ett lite men igjen. Jeg trenger å få til <?php the_ID(); ?> riktig. Om dere leser min forrige post skjønner dere problemet. Hvordan skal jeg nå få til dette?

Lenke til kommentar

the_ID() er en funksjon som printer ut data uten å returnere noe som helst. (Som for øvrig er utrolig tåpelig)

 

echo $start . $url . $filename . the_ID() . $filetype . $end;

Dersom du skriver slik, vil PHP først parse teksten, deretter printe den ut, noe som betyr at the_ID() kjøres først. Da oppnår du naturligvis ikke et ønskelig resultat. Gjør heller som følgende.

 

echo $start . $url . $filename;
the_ID();
echo $filetype . $end;

 

Edit: Følgende kode illustrerer problemstillingen. Merk hvordan teksten printes ut før returverdien.

 

<?php

function foo () {

	echo 'This is nr.: ';
	return 25;

}

echo foo ();

?>

Endret av Jonas
Lenke til kommentar

Hvis du skal ha tak i det funksjonen printer ut må du ta ibruk et outputbuffer. Det kan muligens være litt mye å ta til seg dersom du ikke har programmert så mye, så jeg satt sammen et enkelt eksempel som benytter seg av det, og som du kan bruke istedenfor the_ID(). Den bruker du slik du prøvde å bruke the_ID().

 

<?php

function the_ID2 () {

	ob_start ();

	the_ID ();

	$return = ob_get_contents ();
	ob_end_clean ();

	return $return;

}

var_dump ( the_ID2 () );

?>

Endret av Jonas
Lenke til kommentar

Oh, dette her ble litt værre ja.. Hvor skal jeg plassere denne funksjonen? Trenger jeg å endre noe på den?

 

Skjønte ikke helt hva den var godt for heller. Trenger jeg å legge til den for å få the_ID() riktig på file_exist?

 

for ($i = 1; $i <= 2; $i++) {

if (file_exists($filename . the_ID(); . $i . $filetype)) {

echo $start . $url . $filename;

the_ID();

echo $filetype . $end;

} else {

echo '';

}

}

Endret av AnaXyd
Lenke til kommentar

Spiller egentlig ikke så stor rolle, så lenger kodene ligger i samme scope. Rett over er en slager.

 

<?php

function the_ID2 () {

	ob_start ();

	the_ID ();

	$return = ob_get_contents ();
	ob_end_clean ();

	return $return;

}

$url = 'http://bconsulting.no/wp/';
$filename = 'wp-content/uploads/front/post-';
$filetype = '.jpg';
$end = '" width="500" height="310" /></div>';
$start = '<div class="img-fix"><img src="';
$num = the_ID2 ();

echo $start . $url . $filename . $num . $filetype . $end;

if ( file_exists ( $start . $url . $filename . $num . $filetype . $end ) ) {
	echo "The file $filename exists";
} else {
	echo 'The file "' . $filename . $num . $filetype . '" does not exist';
}

?>

Lenke til kommentar

Aha, la den bittelitt feil så det ble feil i parsinga først serru.. :)

 

Men, (om det er et stort men, eller ikke veit jeg ikke)

 

Wordpress har jo en såkalt "loop" som gjentar samme kode fra ett punkt til et annet avhengig av hvor mange poster som skal vises = hvor mange ganger den skal loope (dog med forskjellig innhold)

 

Jeg får nemlig:

 

Fatal error: Cannot redeclare the_id2() (previously declared in bla/bla/index.php:45) in bla/bla/index.php on line 43

 

Fordi loopen i Wordpress gjentar det. Og det som er i denne sammenheng som jeg tror, er at den MÅ loope den koden for å hente opp hver unike the_ID() som printer id-en til hver post.

 

 

Er dette knotete å få til?

Lenke til kommentar
Er dette knotete å få til?

Nei, absolutt ikke.

 

<?php

if ( !function_exists ( 'the_ID2') ) {

	function the_ID2 () {

		ob_start ();

		the_ID ();

		$return = ob_get_contents ();
		ob_end_clean ();

		return $return;

	}

}

$url = 'http://bconsulting.no/wp/';
$filename = 'wp-content/uploads/front/post-';
$filetype = '.jpg';
$end = '" width="500" height="310" /></div>';
$start = '<div class="img-fix"><img src="';
$num = the_ID2 ();

echo $start . $url . $filename . $num . $filetype . $end;

if ( file_exists ( $start . $url . $filename . $num . $filetype . $end ) ) {
	echo "The file $filename exists";
} else {
	echo 'The file "' . $filename . $num . $filetype . '" does not exist';
}

?>

Endret av Jonas
Lenke til kommentar

Ah! Det var ikke værre nei! :)

 

 

Men nå har ett nytt problem dukket opp. Jeg kan rett og slett ikke finne feilen, mulig det må endres på noe når vi har lagt til de nye funksjonene.. :)

 

 

Kode som virker:

 

$url = 'http://bconsulting.no/wp/';
$filename = 'wp-content/uploads/front/post-';
$filetype = '.jpg';
$end = '" width="500" height="310" /></div>';
$start = '<div class="img-fix"><img src="';
$num = '25-';


for ($i = 1; $i <= 2; $i++) {
   if (file_exists($filename . $num . $i . $filetype)) {
		 echo $start . $url . $filename . $num . $i . $filetype . $end;
   } else {
		 echo '';
   }
}

 

 

Kode som ikke virker:

 

if ( !function_exists ( 'the_ID2') ) {

	function the_ID2 () {

		ob_start ();

		the_ID ();

		$return = ob_get_contents ();
		ob_end_clean ();

		return $return;

	}

}

$url = 'http://bconsulting.no/wp/';
$filename = 'wp-content/uploads/front/post-';
$filetype = '.jpg';
$end = '" width="500" height="310" /></div>';
$start = '<div class="img-fix"><img src="';
$num = the_ID2 ();


for ($i = 1; $i <= 2; $i++) {
   if (file_exists($filename . $num . $i . $filetype)) {
		 echo $start . $url . $filename . $num . '-' . $i . $filetype . $end;
   } else {
		 echo '';
   }
}

 

Er de ikke kliss like?

 

 

EDIT: Endret litt i den siste, men fungerer fremdeles ikke slik som den er.

Endret av AnaXyd
Lenke til kommentar

Ah! Herregud! Fant den nå!

 

if (file_exists($filename . $num . '-' . $i . $filetype)) {

 

 

Jeg var nesten HELT sikker på at jeg hadde tatt for meg den, men det hadde jeg visst ikke! Beklager bryet folkens! :)

 

Eller nei, det er der enda gitt.. Selv MED den siste fiksen!

 

 

EDIT: Der fikk jeg det endelig til! Ser ut som det funker fjell nå! Takk for stor innsats Jonas! :) Setter pris på slikt! :)

 

 

Pleier alltid å legge ut min ferdige kode til allmennheten så dere kan betrakte det vakre synet av fersk kode av en nybegynner.. :D

 

<?php
if ( !function_exists ( 'the_ID2') ) {

       function the_ID2 () {

           ob_start ();

           the_ID ();

           $return = ob_get_contents ();
           ob_end_clean ();

           return $return;

       }

   }

$url = 'http://bconsulting.no/wp/';
$filename = 'wp-content/uploads/front/post-';
$filetype = '.jpg';
$end = '" width="500" height="310" /></div>';
$start = '<div class="img-fix"><img src="';
$num = the_ID2 ();


for ($i = 1; $i <= 10; $i++) {
      if (file_exists($filename . $num . '-' . $i . $filetype)) {
            echo $start . $url . $filename . $num . '-' . $i . $filetype . $end;
      } else {
            echo '';
      }
}
?>

 

Scriptet sjekker da angitt antall bilder, og legger dem ut om de blir funnet. Her skal det kjøres helautomatisk hele veien!

Endret av AnaXyd
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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...