Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11
  1. #1
    Finkenwerder Herbstprinz
    Themenstarter

    Registriert
    03.2008
    Ort
    Berlin, Germany, Germany
    Beiträge
    463

    Frage PHP & die Verkettung von elseif's (in WordPress)

    Liebe Community!

    Habe ein sehr merkwürdiges Problem. Ich habe, um das Header-Bild für jede Seite ändern zu können, die header-php im WP Backend Bereich verändert. Funktioniert so auch wunderbar…

    Jetzt binde ich allerdings PHP ein, um die Page-ID zu finden und das entsprechende Bild auszugeben.
    Die ganze Geschichte besteht also aus einem <img/> tag und einer Verkettung von elseif's also etwa so:
    Code:
    <img src='<?php
    if(bedingung) {
         echo(url des bildes);
         }
    elseif(bedingung) {
         echo(url des bildes);
         }
    elseif(bedingung) {
         echo(url des bildes);
         }
    elseif(bedingung) {
         echo(url des bildes);
         }
    else {
         echo(urls des bildes);
         }
    ?>' width="950" height="180>" alt="" />
    Nun folgender Fehler:
    Es funktioniert ausschließlich das if, das erste elseif und das else am Ende.
    Alle andere elseifs in der Mitte geben einfach nichts aus und sorgen dafür, dass WP "crashed" also eine von Inhalt befreite, weiße Seite, in der nur noch der Blog-Titel steht.


    Ich würde mich sehr über eine Antwort freuen und danke für jeden sinnvollen Hinweis!!!
    Liebe Grüße
    Mini-Leo

    You can only take what you can carry.

  2. #2
    Dülmener Rosenapfel Avatar von das_micha
    Registriert
    03.2007
    Ort
    Bad Bevensen aka der A**** der Heide
    Alter
    34
    Beiträge
    1.666
    theoretisch ist alles chic, aber dein code ist nicht wirklich aussagekräftig dadurch das du ihn vereinfacht hast.
    das korrekte if-konstrukt wäre hilfreich.
    Was aber sicher helfen könnte ist wenn du testweise mal vor deinem ganzen if-konstrukt folgendest schreibst:

    <?php error_reporting(E_ALL); ?>
    Damit werden dir evtl nicht vorhandene Variablen ausgegeben da damit der php fehlerreport levelübergreifend scharfgeschaltet ist. und so wie du es schilderst passiert da etwas das das script beendet aber die fehlermeldung nicht ausgegeben wird.

    Der ordnung halber rate ich aber davon ab in ein html-tag ein solch riesiges konstrukt zu schreiben.
    mach es lieber so:

    <?php
    if(cond){
    $var = 'foo';
    }elseif(cond){
    $var = 'bar';
    }else{
    $var = 'foobar;
    }
    ?>

    <img src='<?php echo $var; ?>' />

    ist übersichtlicher und damit weniger fehleranfällig
    Vollzeitfalschparker....
    MacBook late '08 2,0 C2D - 4GB | iMac 27" i5 - 12GB | MacMini 1,83 C2D - 1GB | iPhone 3Gs weiß + iPad 32GB | ATV2
    last but not least: good old iPod Shuffle 512MB*g*

  3. #3
    Bismarckapfel
    Registriert
    01.2009
    Ort
    Braunschweig
    Beiträge
    75
    Abgesehen davon, dass der von Dir beschrieben Code funktionieren sollte, kann man ohne genaue Angabe der "Bedingung" keiner weitere Fehlerforschung betreiben. Unabhängig davon solltest Du aber mal überlegen ob Du statt dem unübersichtlichen if-elseif-gesumpfs nicht lieber die switch-Anweisung nutzt. Denn genau für solche Fälle wurde diese gemacht.

    red

  4. #4
    Finkenwerder Herbstprinz
    Themenstarter

    Registriert
    03.2008
    Ort
    Berlin, Germany, Germany
    Beiträge
    463
    Na gut…*Ich halte diese Schreibweise weder für übersichtlicher, noch für weniger fehleranfällig. Denn wenn mans genau nimmt, sind die Konstrukte ziemlich genau identisch.

    Mein genaues Konstrukt hab ich ja gegeben. Nur ein bisschen vereinfacht.
    Trotzdem hier das ganz genaue:
    Code:
    <img src='<?php
    	if (is_home()) {
    		echo("http://……/wp-content/uploads/2010/12/startl.jpg");
    	        }
              elseif (is_page(4)) {
    		echo("http://……/wp-content/uploads/2010/12/ueberuns.jpg");
    	        }
              elseif (page_is(32)) {
    		echo("http://……/wp-content/uploads/2010/12/security.jpg");
    	        }
              elseif (is_page(22)) {
    		echo("http://……/wp-content/uploads/2010/12/referenzen.jpg");
    	        }
              elseif (is_page(18)) {
    		echo("http://……/wp-content/uploads/2010/12/philosophie.jpg");
    	        } 
              elseif (is_page(28)) {
    		echo("http://……/wp-content/uploads/2010/12/parkservice.jpg");
    	        }
              elseif (is_page(24)) {
    		echo("http://……/wp-content/uploads/2010/12/limouservice.jpg");
    	        }
              elseif (is_page(30)) {
    		echo("http://……/wp-content/uploads/2010/12/komplettservice.jpg");
    	        }
              elseif (is_page(8)) {
    		echo("http://……/wp-content/uploads/2010/12/fuhrpark.jpg");
    	        }
              elseif (is_page(10)) {
    		echo("http://……/wp-content/uploads/2010/12/einsatzbereiche.jpg");
    	        }
              else {
    		echo("http://……/wp-content/uploads/2010/12/startl.jpg");
    	       } ?>' width="950" height="180>" alt="" />

    Das debugging-Teil hat [b]nicht[Ib] geholfen. Es ist einfach nichts passiert, keine Änderung.
    Aber schon mal danke

    Mini-Leo

    You can only take what you can carry.

  5. #5
    Finkenwerder Herbstprinz
    Themenstarter

    Registriert
    03.2008
    Ort
    Berlin, Germany, Germany
    Beiträge
    463
    Zitat Zitat von redrat Beitrag anzeigen
    Abgesehen davon, dass der von Dir beschrieben Code funktionieren sollte, kann man ohne genaue Angabe der "Bedingung" keiner weitere Fehlerforschung betreiben. Unabhängig davon solltest Du aber mal überlegen ob Du statt dem unübersichtlichen if-elseif-gesumpfs nicht lieber die switch-Anweisung nutzt. Denn genau für solche Fälle wurde diese gemacht.

    red

    Also ich halte die switch Anweisung nicht für übersichtlicher. Und sie scheint mir auch nicht so viel Sinn zu machen.
    Ich werde es aber mal kurz ausprobieren
    Mini-Leo

    You can only take what you can carry.

  6. #6
    Finkenwerder Herbstprinz
    Themenstarter

    Registriert
    03.2008
    Ort
    Berlin, Germany, Germany
    Beiträge
    463
    Ist das so gemeint:
    Code:
    switch($i) {
            case(is_home()):
    		echo("http://……/wp-content/uploads/2010/12/startl.jpg");
    	case(is_page(4)):
    		echo("http://……/wp-content/uploads/2010/12/ueberuns.jpg");
    	case(page_is(32)):
    		echo("http://……/wp-content/uploads/2010/12/security.jpg");
    	case(is_page(22)):
    		echo("http://……/wp-content/uploads/2010/12/referenzen.jpg");
    	case(is_page(18)):
    		echo("http://……/wp-content/uploads/2010/12/philosophie.jpg");
    	case(is_page(28)):
    		echo("http://……/wp-content/uploads/2010/12/parkservice.jpg");
    	case(is_page(24)):
    		echo("http://……/wp-content/uploads/2010/12/limouservice.jpg");
    	case(is_page(30)):
    		echo("http://……/wp-content/uploads/2010/12/komplettservice.jpg");
    	case(is_page(8)):
    		echo("http://……/wp-content/uploads/2010/12/fuhrpark.jpg");
    	case(is_page(10)):
    		echo("http://……/wp-content/uploads/2010/12/einsatzbereiche.jpg");
    	default:
    		echo("http://……/wp-content/uploads/2010/12/startl.jpg");
    	}
    ???

    Oder hab ich dabei was missverstanden?
    Geändert von Mini-Leopard (02.12.2010 um 16:50 Uhr) Grund: Zensur
    Mini-Leo

    You can only take what you can carry.

  7. #7
    Finkenwerder Herbstprinz
    Themenstarter

    Registriert
    03.2008
    Ort
    Berlin, Germany, Germany
    Beiträge
    463
    Hatte jetzt den einzigen Effekt, dass die Seiten zwar funktionieren, allerdings nur das Fragezeichen erscheint.
    Mini-Leo

    You can only take what you can carry.

  8. #8
    Dülmener Rosenapfel Avatar von das_micha
    Registriert
    03.2007
    Ort
    Bad Bevensen aka der A**** der Heide
    Alter
    34
    Beiträge
    1.666
    an der stelle finde ich ein switch etwas gewagt! man bekommt es zwar damit zum laufen aber eigentlich ist es für die wertekontrolle.
    man kann zwar ein switch dahingehend mishandeln das es das macht was du möchtest aber ob das so konform ist wage ich zu bezweifeln!
    zumal die denkweise dann anders ist. In anderen sprachen funktionieren bedingungen wie in einem if auch in einem switch ebenso wie >= usw.

    is_page(X) ist denke ich mal eine hauseigene funktion von WP die true zurückliefert wenn es die entsprechende seite ist.

    wenn du also meinetwegen grade auf seite 10 bist und möchtest das über ein if abprüfen schreibst du (wie du es ja auch richtig gemacht hast)
    if(is_page(10)){echo "seite 10;}

    die bedingung muss also erfüllt sein (true)
    wenn du aber mit boolschen werten in einem switch arbeitest (was ich irgendwie nicht so pralle finde) musst du negieren.
    Wir sind immer noch bei page 10

    switch($i){
    case (!is_page(10)): echo "seite 10";break;
    default: echo "currywurst";break;
    }

    und diese schreibweise ist programmierlogisch absoluter bullshit!!!
    kannst hier mal sehen..

    <?php
    $i = null;
    switch($i){
    case(true): echo "1";break;
    case(true): echo "2";break;
    case(true): echo "3";break;
    case(true): echo "4";break;
    }
    ?>

    so kommt keine ausgabe da kein default, setzt du jetzt aber beispielsweise die 3 auf false wird diese ausgegeben!
    Fazit: du möchtest eine reaktion bei page 10 haben musst aber sagen wenn es nicht page10 ist...
    Bitte bleib bei deinem if-else das ist sauberer. oder jetzt wo du alles fertig hast, setze vor jedes is_page ein ausrufezeichen zum negieren.

    Gibt es denn alle seiten die du über is_page abfragst?

    teste mal bitte folgendes:
    var_dump(is_page(x));

    start dem x setzt du mal bitte eine pagenummer ein bei der er dir den fehler bringt. mich würde mal interessieren was er da für einen rückgabewert liefert.
    kann auch sein das die in der funktion bei nicht erfüllung ein exit; drin haben was natürlich sehr ärgerlich wäre.
    Vollzeitfalschparker....
    MacBook late '08 2,0 C2D - 4GB | iMac 27" i5 - 12GB | MacMini 1,83 C2D - 1GB | iPhone 3Gs weiß + iPad 32GB | ATV2
    last but not least: good old iPod Shuffle 512MB*g*

  9. #9
    Finkenwerder Herbstprinz
    Themenstarter

    Registriert
    03.2008
    Ort
    Berlin, Germany, Germany
    Beiträge
    463
    Gibt mit
    Code:
    bool(false)
    aus.
    Für mich nicht so ganz begreiflich… Weil ja nur der erste elseif funktioniert.
    Und das letzte else auch!

    Sprich ein exit kommt nicht in frage.
    Irgendwie eigenartig :/
    Mini-Leo

    You can only take what you can carry.

  10. #10
    Dülmener Rosenapfel Avatar von das_micha
    Registriert
    03.2007
    Ort
    Bad Bevensen aka der A**** der Heide
    Alter
    34
    Beiträge
    1.666
    jo, das exit können wir schonmal ausschliessen.
    und du warst bei der ausgabe auch auf der seite die dort in der bedingung bzw in dem var_dump stand? wenn ja ist da irgendwas mit deiner pagekennung nicht ganz koscha.
    denn bei ner übereinstimmung müsste bool(true) kommen.
    was aber immer noch nicht erklärt wieso er dir die seite leerfegt.
    ach nur zur schonung deiner finger, ein echo braucht keine klammern, funktioniert zwar auch mit aber ist eigentlich ohne vorgesehen. hat aber mit dem problem nix zutun
    Vollzeitfalschparker....
    MacBook late '08 2,0 C2D - 4GB | iMac 27" i5 - 12GB | MacMini 1,83 C2D - 1GB | iPhone 3Gs weiß + iPad 32GB | ATV2
    last but not least: good old iPod Shuffle 512MB*g*

Seite 1 von 2 12 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •