Wechselnder Header auf jeder Seite
Steven
- php
0 hotti0 Steven0 hotti0 Steven1 Jörg Reinholz0 Steven0 Jörg Reinholz0 Steven
0 molily0 hotti
Hallo Freunde!
Ich arbeite gerade an einer Homepage und möchte, dass auf jeder Seite ein neues Header-Bild (immer die selben Maße) zu sehen ist.
Im Netz bin ich auf dieses PHP Snippet gestoßen, das ja sehr vielversprechend aussieht:
<?php
if(is_page()) {
$page_name = $post->post_name;
$image_name = 'header-'.$page_name;
}
if(!file_exists(TEMPLATEPATH.'/images/'.$image_name.'.jpg')) {
$image_name ='header-image';
}
echo '<img src="'.get_bloginfo('template_url').'/images/'.$image_name.'.jpg" alt="'.$image_name.'" />';
?>
Ich habe meine Dateien in die entsprechenden Ordner verschoben.
Mein Problem ist hier $page_name. Dieses Snippet scheint für Wordpress geeignet zu sein, aber ich habe keine Ahnung, wie ich meinen Seiten einen Namen oder etwas zuordnen kann, der dann dadurch abgerufen wird.
Ich binde meine Seiten dynamisch mit php-include ein.
Kann mir vielleicht jemand helfen?
hi,
Mein Problem ist hier $page_name. Dieses Snippet scheint für Wordpress geeignet zu sein, aber ich habe keine Ahnung, wie ich meinen Seiten einen Namen oder etwas zuordnen kann, der dann dadurch abgerufen wird.
Da wissen aber Deine Besucher mehr:
Sie rufen einen URL auf und der ist eindeutig :)
MfG
hi,
Da wissen aber Deine Besucher mehr:
Sie rufen einen URL auf und der ist eindeutig :)MfG
Nun, natürlich, aber das sehe ich ja auch. Wie setzte ich diesen namen aber in meinem Snippet um?
Wenn ich Beispielsweise die Seite
http://test.de/?page=welcome
habe, wie bringe ich dem Snippet bei, dass "welcome" der Seitenname ist, worauf sich $page_name also beziehen soll?
hi,
Wenn ich Beispielsweise die Seite
http://example.com/?page=welcome
habe, wie bringe ich dem Snippet bei, dass "welcome" der Seitenname ist, worauf sich $page_name also beziehen soll?
Das findest Du in $_GET['page'] => 'welcome'
MfG
hi,
Wenn ich Beispielsweise die Seite
http://example.com/?page=welcome
habe, wie bringe ich dem Snippet bei, dass "welcome" der Seitenname ist, worauf sich $page_name also beziehen soll?Das findest Du in
$_GET['page'] => 'welcome'
MfG
Hallo.
Danke erst einmal. Ich habe damit jetzt mal ein wenig rumgespielt, bekomme aber nur eine Fehlermeldung. Ich bin in php noch nicht so sehr bewandert. Laut meinem verständnis müsste das Snippet dann in etwa so aussehen, oder?
<?php
if(is_page()) {
$page_name = $page;
$_GET['page'] => 'welcome';
$image_name = 'header-'.$page_name;
}
if(!file_exists(TEMPLATEPATH.'/images/'.$image_name.'.jpg')) {
$image_name ='header-image';
}
echo '<img src="'.get_bloginfo('template_url').'/images/'.$image_name.'.jpg" alt="'.$image_name.'" />';
?>
Dann bekomme ich allerdings einen Fehler:
Parse error: syntax error, unexpected '=>' (T_DOUBLE_ARROW) in ...
Zudem will ich den $page_name ja dynamisch haben, also dass er sich je nach Seite mit-ändert ('welcome', 'about', eben je nachdem wie die Seite benannt wurde).
Dir fehlen Grundlagen.
Step 0: Es ist ganz unmodern, zu senden bevor das "not tut"
<?php ob_start(); ganz! oben! ?>
Step 1:
Der Name der Seite steht also in $_GET['page']. Nehmen wir mal an, das sei 'FOO'. (http://hostname/?page=FOO) + (GROSS-klein ist wichtig)
Step 2:
Eine gute Idee ist esin dem Fall, die passende Grafik als 'FOO.jpg' bereit zu halten.
Du brauchst auch den Ordner mit den Grafiken (den musst Du selbst anlegen):
define('PicsDir', '/var/www/htdocs/pics/');
Step 3:
Eine gute Idee ist es, falls was nicht klappt, eine 'DEFAULT.jpg' bereit zu halten.
define('DefaultHeaderPic', '/var/www/htdocs/pics/DEFAULT.jpg');
und eine nette Funktion:
function getHeaderPic() {
if (
(! isset($_GET['page']) # ?page=FOO fehlt.
or $_GET['page'] == ''; # ?page= in URL
) {
return(DefaultHeaderPic);
}
# Jetzt musst Du noch "putzen", sonst gibt jemand was wie '?page=cat+/etc/passwd+FOO' an:
$arVerboten=array('`', '|', '../', '\\', '/', '<', '>',);
$s=str_replace($arVerboten, $_GET['page']); # Wir ersetzen das Verbotene durch Nichts
if ($s != $_GET['page']) { # Und schauen ob das eine gute Idee war:
# Da hat jemand was versucht und soll belohnt werden:
header('HTTP/1.0 404 Not Found'); # "schmeisst" ohne das ob_start() ganz oben eine Notiz oder einen Fehler
die ('Netter Versuch!');
}
$filename = PicsDir . $s . '.jpg';
if ( (! is_file($filename)) || (! is_readable($filename)) ) {
# Wenn es die Grafik nicht gibt oder die nicht lesbar ist:
return(DefaultHeaderPic); # Ha! Das Default-Bild!
} else {
# Jawoll! Die Datei /var/www/htdocs/pics/FOO.pic wurde verlangt, ist vorhanden und lesbar:
return ($filename);
}
}
Zur Verwendung: Einfach unter dem irgendwo:
<div id="header">
<img src="<?php getHeaderPic(); ?>">
</div>
eintippen.
Falls Du ein CMS verwendest kann es sein, dass Du noch ein paar Dinge beachten musst. Wenn Du aber so tief reingreifst, dann solltest Du das nur dann tun, wenn Du es kannst.
Ich empfehle PHP von Grund auf zu lernen, aber da bist Du gerade dabei - oder?
Jörg Reinholz
TAUSEND Dank schonmal!!!
Dir fehlen Grundlagen.
Ich weis... ;)
Falls Du ein CMS verwendest kann es sein, dass Du noch ein paar Dinge beachten musst. Wenn Du aber so tief reingreifst, dann solltest Du das nur dann tun, wenn Du es kannst.
Die Seite funktioniert auf Wordpress-Basis.
Ich habe den Code eingebunden und an meine Datei-Namen, Unterordner angepasst, allerdings gibt er mir jetzt immer einen Fehler raus:
Parse error: syntax error, unexpected ';' in [...] on line 14
Line 14 ist die hier:
or $_GET['page'] == '';
Hilfe... ^^;
Ich empfehle PHP von Grund auf zu lernen, aber da bist Du gerade dabei - oder?
Jörg Reinholz
Und ja, ich bin gerade dabei, mein php-Wissen auszubauen bzw. es mir von der Pieke auf anzueignen. Leider geht das neben der Arbeit nicht so leicht.
Parse error: syntax error, unexpected ';' in [...] on line 14
Line 14 ist die hier:
or $_GET['page'] == '';
>
> Hilfe... ^^;
if (
(! isset($\_GET['page']) # ?page=FOO fehlt.
or $\_GET['page'] == '' # ?page= in URL
) {
return(DefaultHeaderPic);
}
War ein Typo. Klammern treten (außerhalb von Strings) stets paarweise auf...
Parse error: syntax error, unexpected ';' in [...] on line 14
Line 14 ist die hier:
or $_GET['page'] == '';
> >
> > Hilfe... ^^;
>
>
> if (
> (! isset($\_GET['page']) # ?page=FOO fehlt.
> or $\_GET['page'] == '' # ?page= in URL
> ) {
> return(DefaultHeaderPic);
> }
>
> War ein Typo. Klammern treten (außerhalb von Strings) stets paarweise auf...
Hab das Semikolon auch schon mal weg gehabt, aber dann kommt ein fehler wegen des { im obigen Code.
Hallo,
Hab das Semikolon auch schon mal weg gehabt, aber dann kommt ein fehler wegen des { im obigen Code.
schau mal, ob es so passt
if (
(! isset($_GET['page']) # ?page=FOO fehlt.
or $_GET['page'] == '') # ?page= in URL
) {
return(DefaultHeaderPic);
}
Du musst auf deine () achten.
Hallo,
$_GET['page'] => 'welcome';
Das ist kein gültiger PHP-Code. Gemeint war, dass du mittels $_GET['page'] auslesen kannst, welcher page-Parameter gerade in der URL steht.
http://php.net/manual/de/reserved.variables.get.php
Beliebige Eingabedaten solltest du allerdings nie direkt ausgeben oder ungefiltert für Dateinamen verwenden, das würde eine Sicherheitslücke öffnen.
Am einfachsten und sichersten ist es, einen assoziativen Array mit allen möglichen Bildern anzulegen. In diesem Array suchst du mithilfe von $_GET['page'] oder auch der kompletten Adresse (z.B. $_SERVER['REQUEST_URI']) das zugehörige Bild heraus.
$bilder = array(
'foo' => 'foo.jpg'
);
$bild = $bilder[ $_GET['page'] ];
if ([link:http://de3.php.net/manual/de/function.isset.php@title=isset]($bild)) {
// Benutze das Bild
}
Du könntest auch einen nicht-assoziativen Array mit den möglichen Seiten/Bildern vorhalten, eine sogenannte Whitelist. Die Bilder könnten genauso heißen wie die Seiten (z.B. »about.jpg«, »welcome.jpg«). Du prüfst dann nur, ob im Array ein Eintrag existiert; die Bild-URL ergibt sich.
Mathias
Am einfachsten und sichersten ist es, einen assoziativen Array mit allen möglichen Bildern anzulegen. In diesem Array suchst du mithilfe von $_GET['page'] oder auch der kompletten Adresse (z.B. $_SERVER['REQUEST_URI']) das zugehörige Bild heraus.
$bilder = array(
'foo' => 'foo.jpg'
);$bild = $bilder[ $_GET['page'] ];
if (link:http://de3.php.net/manual/de/function.isset.php@title=isset) {
// Benutze das Bild
}
>
> Du könntest auch einen nicht-assoziativen Array mit den möglichen Seiten/Bildern vorhalten, eine sogenannte Whitelist. Die Bilder könnten genauso heißen wie die Seiten (z.B. »about.jpg«, »welcome.jpg«). Du prüfst dann nur, ob im Array ein Eintrag existiert; die Bild-URL ergibt sich.
>
> Mathias
Ich bin wirklich sehr grün, sorry. :(
Wie würde denn das arrey in mein Snippet eingebaut, bzw. was würde wegfallen/ersetzt werden?
Hallo,
Wie würde denn das arrey in mein Snippet eingebaut, bzw. was würde wegfallen/ersetzt werden?
Das Snippet ist für Wordpress gedacht, wie du schon bemerkt hast. Am besten schmeißt du es weg, da du anscheinend kein Wordpress verwendest.
Ich möchte nicht unhöflich oder demotivierend sein, aber ich denke, dass es so nichts wird.
Wenn du schnell Erfolge sehen möchtest, so frage einen Fachkundigen, der das Script für dich schreibt und einbaut. Jemanden, dem du genau erzählen kannst, was du vorhast, der Zugriff auf die fraglichen Dateien, PHP-Scripte und den Server hat. Das ist hier im Forum sehr schwer möglich und würde tagelang dauern, während denen wir stille Post spielen, dir irgendwelchen Code senden, du baust ihn ein, es kommt zu Fehlern usw. usf.
Wenn du verstehen willst, was da vor sich geht, dann musst du dir gewisse Programmier- und PHP-Grundlagen aneignen. Zum Beispiel mit einem aktuellen Buch und der PHP-Dokumentation.
Grüße,
Mathias
Hallo
Das Snippet ist für Wordpress gedacht, wie du schon bemerkt hast. Am besten schmeißt du es weg, da du anscheinend kein Wordpress verwendest.
Oh, ich verwende Wordpress unter anderem. Die Extra-Seiten sind nur nicht mit Wordpress erstellt.
Ich möchte nicht unhöflich oder demotivierend sein, aber ich denke, dass es so nichts wird.
Wenn du schnell Erfolge sehen möchtest, so frage einen Fachkundigen, der das Script für dich schreibt und einbaut. Jemanden, dem du genau erzählen kannst, was du vorhast, der Zugriff auf die fraglichen Dateien, PHP-Scripte und den Server hat. Das ist hier im Forum sehr schwer möglich und würde tagelang dauern, während denen wir stille Post spielen, dir irgendwelchen Code senden, du baust ihn ein, es kommt zu Fehlern usw. usf.
Wenn du verstehen willst, was da vor sich geht, dann musst du dir gewisse Programmier- und PHP-Grundlagen aneignen. Zum Beispiel mit einem aktuellen Buch und der PHP-Dokumentation.
Ich bin dran. Ist nur während der Arbeit nochmal ein hartes Stück, dass auch noch zu machen, leider. :(
Dürfte ich noch auf eine letzte Hilfestellung hoffen? Ich habe meinen Code jetzt mal etwas durcheniander geworfen, dass er tatsächlich funktioniert. Allerdings wollte ich eine else-Kondition einbauen, damit auf nicht definierten Seiten ein default-Bild angezeigt wird, und sobald ich das tue, kommen nur noch Fehlermeldungen:
<?php
define('DefaultHeaderPic', '/wp-content/themes/SWE01/images/header/welcome.jpg');
if(is_page()) {
$image_name = $_GET['page'];
}
if(!file_exists(TEMPLATEPATH.'/images/header/'.$_GET['page'].'.jpg')) {
}
echo '<img src="'.get_bloginfo('template_url').'/images/header/'.$_GET['page'].'.jpg" width="100%" />';
?>
Hello,
> echo '<img src="'.get_bloginfo('template_url').'/images/header/'.$_GET['page'].'.jpg" width="100%" />';
>
> ?>
Das sieht gefährlich aus!
Einen GET-Parameter direkt in einen Pfad eizubauen, ergibt meistens eine Sicherheitslücke.
Mit etwas Geschick kann man so den gesamten für PHP zugänglichen Datenträger auslesen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
hi,
Das findest Du in
$_GET['page'] => 'welcome'
Tutorial-Code ;)
Tatsächlich musst Du wegen der Seite keinen Parameter mitschleifen, die Seite selbst ist im URI eindeutig bezeichnet, das ist ein Parameter völlig überflüssig.
Der nächste Punkt: Betrachten wir das, was in Deine Seite reinsoll, als Attribut. Brauchen wir dafür einen Parameter? Klares nein, das regeln wir intern!
Im Grunde genommen gehts um die Konfiguration, dafür lohnt es sich auch aus anderen Gründen, eine Tabelle anzulegen:
[/foo.html]
header=Foo
[/boo.html]
header=Boo
Für solche, in INI-Dateien abgelegte Tabellen gibt es eine prima Funktion, da hast Du dann alles auf einem Array.
Jetzt brauchst Du nur noch ein Stückchen Code was in das Array reinguckt und sieht was da zu tun ist.
Das war die Pflicht, jetzt kommt die Kür :)
[/foo.html]
header=Foo
footer=FooBar
class=Universal
template=foo.tmpl
title=Viele bunte Bilder
Wow, es könnte auch weitere Attribute geben und: Deine Seite kann wachsen, spätere Erweiterungen sind im Handumdrehen eingebaut. Und so ganz nebenbei hast Du mit einer solchen Konfigurationsdatei auch selbst den Überblick...
Schönen Sonntag!