PHP: Einfaches if-else snippet gesucht..

anony

Neu angemeldet
Registriert
30 Nov. 2014
Beiträge
47
Hi,

ist per PHP irgendwie folgendes möglich?
Ich habe verschiedene Seiten, die im Hauptlayout includet werden, indem man z. B. index.php?id=seite1 aufruft...

Bräuchte nun ein PHP-Snippet welches folgendes tut:
if id="seite1", echo " class='aktiv'"; else echo ""

Hat da jemand ein snippet parat? :/

Danke im Voraus und VG! :)
 
Dafür würde ich eher switch case verwenden.

Geh mal auf php.net, dann kannst du dir fragen für solchen Kleinkram sparen.
 
  • Thread Starter Thread Starter
  • #3
[src=php]switch (????){
case "seite1":
echo " class='aktiv'";
break;
default:
echo "";
}[/src]

Habs, danke :)
[src=php]<?php switch($_GET['page']) { case "seite1": echo " class='aktiv'"; break; default: echo (""); } ?>[/src]
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #5
Wie meinst du? Weil der Code nur einzeilig ist? Liegt daran, weil ich diesen in einen <div> einbauen musste :D Also <div<?php ... ?>>bla</div>
 
Dazu muss der doch nicht einzeilig sein.

Zeilenumbrüche sind in HTML ebenfalls egal.
Hier läuft offensichtlich einiges schief.
 
Ich würde die Links als Daten auslagern und die Navigation dann daraus automatisch generieren lassen:

PHP:
Expand Collapse Copy
$pages = array(
	'Home' => 'home',
	'Seite 1' => 'p1',
	'Seite 2' => 'p2',
	'Kontakt' => 'kontakt'
);

foreach($pages as $page => $id){
	$is_active = (isset($_GET['id']) && $_GET['id'] == $id);
	echo '
	<div class="' . ($is_active ? 'active' : '') . '">
		<a href="?id=' . $id . '">' . $page . '</a>
	</div>';
}
 
anyLink.tpl
[src=html5]<div class="%status%">
<a href="?id=%page_id%">%page_name%</a>
</div>[/src]

[src=php]
<?php
// vorberechnet, irgendwo aus einer Datenbank
$myNaviShit = array (
array (
'%status%' => 'inactive',
'%page_id%' => 'site1',
'%page_name%' => 'Kontakt'
),
array (
'%status%' => 'active',
'%page_id%' => 'site2',
'%page_name%' => 'Impressum'
)
);

// erzeugt Ausgabe
$template = file_get_contents ('anyLink.tpl');
$output = "";
foreach ($link as $myNaviShit)
{
$output += str_replace ( array_keys($link), $link, $template );
}

echo $output;
?>
[/src]

So hast du Programm und Layout weitestgehend getrennt, wobei du natürlich noch an gefühlt 230487293 Stellen optimieren kannst.
 
@keksautomat:

Eine Begründung wieso der TS nicht so machen sollte wäre nicht schlecht gewesen. So ist dein Beitrag imho eigentlich für die Tonne. Nicht jeder ist ein HTML- bzw. PHP-Crack.
 
@keksautomat:

Eine Begründung wieso der TS nicht so machen sollte wäre nicht schlecht gewesen. So ist dein Beitrag imho eigentlich für die Tonne. Nicht jeder ist ein HTML- bzw. PHP-Crack.

Die Konstruktion ist schon ein bisschen frickelig.
array_keys() als Pattern zu missbrauchen, ist nicht unbedingt ganz schön.
Außerdem ist das Mehrfachberechnen des Patterns nicht unbedingt sinnvoll, das bleibt für jeden Eintrag ja statisch.
str_replace ist auch eher so eine halb gewollte Lösung, wenn auch einfacher, als mit RegExp zu arbeiten.

Beim Laden der Datei gehören natürlich noch ein paar Abfragen dazu (etwa, ob sie existiert und lesbar ist)..
Da gibt es zig Stellen, wo man noch schrauben kann. Aber ich habe ja bereits angedeutet, dass das nicht perfekt ist.
Mir ging es aber auch nicht darum ein perfektes Programm zu schreiben auf eine Trennung von Programmlogik, Darstellung und Datenhaltung hinzudeuten.

Warum keksautomat aber so die Apokalypse probt, weiß ich gerade auch nicht.
 
Es mag ja ganz gut klappen, dagegen sage ich nichts.
Aber ich empfinde es als störend "mit solchen Techniken" heutzutage noch zu arbeiten.

Dass man "früher" mit "tpl" Dateien oder "phtml" Dateien gearbeitet hat (also quasi so wie du es gemacht hast, mit 'Markern' austauschen oder so), oder auch weils eben schnell hingefrickelt werden muss - so finde ich es dennoch nicht schön.

Wenn man sich ernsthaft damit beschäftigen möchte, so finde ich es wichtig, dass man sich gleich ernsthaft mit den "heutigen" Techniken arbeitet.
 
Was erwartest du für ein simples Beispiel? Soll ich ihm gleich eine Template-Engine an den Kopf knallen. So nach der Art "ich brauche einen Taschenrechner" - "ja, kannst du dir mit dem PC bauen, schau mal nach Tianhe-2, hab gehört, der wär ganz brauchbar".

KISS sagt dir ja vielleicht etwas?
 
Ich würde die Links als Daten auslagern und die Navigation dann daraus automatisch generieren lassen:

PHP:
Expand Collapse Copy
$pages = array(
	'Home' => 'home',
	'Seite 1' => 'p1',
	'Seite 2' => 'p2',
	'Kontakt' => 'kontakt'
);

foreach($pages as $page => $id){
	$is_active = (isset($_GET['id']) && $_GET['id'] == $id);
	echo '
	<div class="' . ($is_active ? 'active' : '') . '">
		<a href="?id=' . $id . '">' . $page . '</a>
	</div>';
}

hmm müsste man nicht key und value hier tauschen ?

also 'p2' => 'Seite 2' statt 'Seite 2' => 'p2'

dann bräuchte man auch die Bedingung nur einmal vor der Schleife.

Muss man hier eine Trennung von Programmlogik, Darstellung und Datenhaltung anstreben? Die Idee die Logik von der Darstellung zu trennen ist zwar schön. In dem simplen Beispiel hat die anyLink.tpl auch keine Logik. Aber trotzdem haben Templates so was wie Schleifen und Bedingungen. Und das oft in einer neuen Syntax, die man extra lernen muss. Man muss sich ja nur überlegen wie man in anyLink.tpl mehrere Hyperlinks ausgeben will. Von daher ist das Beispiel von epiphora wesentlich einfacher und besser.

----

[src=php]<?php
switch($_GET['page'])
{
case "seite1": echo " class='aktiv'";
break;
default:
break; /* echo (""); // das echo brauchst du nicht */
}

?>[/src]

in dem Fall hätte auch ein if genügt. Du hast ja nur einen Fall den du abdecken willst .
[src=php]
if(isset($_GET['page']) && $_GET['page'] === "seite1") {
echo " class='aktiv'";
}
[/src]
 
ist vielleicht etwas OT, aber whitespace können in HTML sehr wohl die Darstellung ändern, sodass beispielsweise Abstände zwischen zwei divs nicht mehr passen. Oder ist mir da nur keine Lösung bekannt, die sowas verhindert?
 
Was erwartest du für ein simples Beispiel? Soll ich ihm gleich eine Template-Engine an den Kopf knallen. So nach der Art "ich brauche einen Taschenrechner" - "ja, kannst du dir mit dem PC bauen, schau mal nach Tianhe-2, hab gehört, der wär ganz brauchbar".

KISS sagt dir ja vielleicht etwas?

Ja, soetwas halte ich für sinnig.
In Bezug auf die Zukunft, wenn man sich denn tiefer in die Thematik einarbeiten will.
 
  • Thread Starter Thread Starter
  • #17
So, danke euch! Habe es nun gelöst, funktioniert prima! :-)

Vielen Dank für die zahlreichen Tipps!! :)

@alter_Bekannter: Dass ich den Platz so nicht sparen "muss" ist mir bewusst, wenn ich aber z. B. 10 Navigationselemente untereinander habe und dass nicht einzeilig mache, finde ich's persönlich zu unübersichtlich... Ändert ja nichts an der Funktion, wenn ichs einzeilig mache... :)
 
Ja, soetwas halte ich für sinnig.
In Bezug auf die Zukunft, wenn man sich denn tiefer in die Thematik einarbeiten will.
@anony: Du solltest dir, bevor du das Rad neu erfindest, vielleicht bestehende Lösungen anschauen.
Ich dachte eigentlich, so etwas in der Art sei dir zuzutrauen. keksautomat meint, dass das nicht möglich ist, daher der Hinweis: Es gibt bereits Template-Engines und Frameworks und schlag mich tot. Eventuell könnte dir google helfen.

@alter_Bekannter: Dass ich den Platz so nicht sparen "muss" ist mir bewusst, wenn ich aber z. B. 10 Navigationselemente untereinander habe und dass nicht einzeilig mache, finde ich's persönlich zu unübersichtlich... Ändert ja nichts an der Funktion, wenn ichs einzeilig mache... :)

Bevor du 10x den gleichen Code hinschreibst, erstell dir eine etwas allgemeinere Funktion und schreibe nur den Funktionsaufruf an die Stelle.

navigation_helper.php
[src=php]<?php
function nav($pageNumber){
// massenweise
// mehr-
// zeiliger
// shit
// der
// wenn
// in
// einer
// Zeile
// geschrieben
// vollkommen
// unleserlich
// und
// unwartbar
// wird
return 'ergebnis';
}
?>[/src]

site.php
[src=php]<html>
<head>
</head>
<body>

<?php include('navigation_helper.php'); ?>
<div class="navigation">
<ul id="navilinks1">
<li><?php echo nav(1); ?></li>
<li><?php echo nav(2); ?></li>
<li><?php echo nav(3); ?></li>
<li><?php echo nav(4); ?></li>
<li><?php echo nav(5); ?></li>
</ul>
</div>
</body>
</html>[/src]


Auch hier: Das ist so nicht perfekt und es gibt für solche Zwecke Frameworks, also sieh das nicht als Muterlösung an! :rolleyes:
 
Zurück
Oben