• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

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! :)
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.833
Ort
Midgard
Dafür würde ich eher switch case verwenden.

Geh mal auf php.net, dann kannst du dir fragen für solchen Kleinkram sparen.
 

anony

Neu angemeldet

Registriert
30 Nov. 2014
Beiträge
47
  • 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:

anony

Neu angemeldet

Registriert
30 Nov. 2014
Beiträge
47
  • 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>
 

alter_Bekannter

N.A.C.J.A.C.

Registriert
14 Juli 2013
Beiträge
4.833
Ort
Midgard
Dazu muss der doch nicht einzeilig sein.

Zeilenumbrüche sind in HTML ebenfalls egal.
Hier läuft offensichtlich einiges schief.
 

epiphora

aus Plastik
Veteran

Registriert
14 Juli 2013
Beiträge
3.894
Ort
DE-CIX
Ich würde die Links als Daten auslagern und die Navigation dann daraus automatisch generieren lassen:

PHP:
$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>';
}
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
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.
 

mathmos

404

Registriert
14 Juli 2013
Beiträge
4.415
@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.
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
@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.
 

keksautomat

Neu angemeldet

Registriert
15 Juli 2013
Beiträge
471
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.
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
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?
 

evillive

EXIL

Registriert
24 Juli 2013
Beiträge
930
Ich würde die Links als Daten auslagern und die Navigation dann daraus automatisch generieren lassen:

PHP:
$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]
 

p3Eq

zu nichts zu gebrauchen

Registriert
15 Juli 2013
Beiträge
358
@alter_Bekannter: 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?
 

keksautomat

Neu angemeldet

Registriert
15 Juli 2013
Beiträge
471
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.
 

anony

Neu angemeldet

Registriert
30 Nov. 2014
Beiträge
47
  • 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... :)
 

accC

gesperrt

Registriert
14 Juli 2013
Beiträge
5.250
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:
 
Oben