PHP include minimal verändert?

  • PHP

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Link.

    PHP include minimal verändert?

    Guten Tag,
    ich arbeite momentan an einer weiteren Webseite. Diese hat wie jede andere Webseite natürlich auch einen Header und Footer.
    Header und Footer lagere ich gerne via php aus, indem ich z.B. Footer in die footer.php packe und dann mit ​include("footer.php") auf der Seite platziere.
    Damit kann ich jederzeit noch den Footer verändern, ohne ihn auf jeder Seite nachzubessern. Das gleiche würde ich auch gerne beim Header machen, aber ich wollte diesmal das Menu ein bisschen aufbessern, indem angezeigt wird, auf welcher Seite man sich gerade befindet:

    HTML-Quellcode

    1. <nav id="nav">
    2. <ul>
    3. <li class="current"><a href="index.php">Home</a></li>
    4. <li><a href="#" class="icon fa-angle-down">Informationen</a></li>
    5. <li><a href="preise.php">Preise</a></li>
    6. </ul>
    7. </nav>


    Je nach Seite verändet sich nun aber auch die Zeile, wo ​ class="current" stehen soll.
    Ist es irgendwie möglich, die header.php-Datei so zu verändern, dass ich im include-Teil mit angeben kann, bei welcher Zeile class="current" hinzugefügt werden soll?

    Wenn ja, würde ich mich über eine Antwort freuen.

    Danke,
    Michdi
    Die beste maschinelle Übersetzung der Welt - DeepL Übersetzer
    Alle Zitate, die ich seit dem 1.9.2017 übersetzt habe, wurden vollautomatisch mit DeepL übersetzt.



    Kannst Jedem Punkt ja ne einzelne ID geben, und in jeder Datei kannst du die einzeln definieren, wie die auszusehen hat.

    Wenn ich dir noch ein Tipp darf geben, ich würde nicht der Footer Header usw. einzeln includen, sondern nur der Inhalt . Also du hast eine Datei wo Footer, Header und alles andere schon bereit ist, nur der Inhalt muss noch includet werden. ;) Denn Datei Namen von der Datei welche du anzeigen willst, kannst du über $_GET holen und das es ein bisschen schöner aussieht, kannst du die URL mithilfe der .htaccess ein wenig umschreiben ^^
    @gabriel-b
    Ich verstehe noch nicht so ganz, was du mit dem $_GET meinst. Ich will hier ja nichts übertragen, sondern nur den Inhalt aus der header.php-Datei auf meiner index.php Datei anzeigen, was auch super funktioniert.
    Mit jedem Punkt eine einzelne ID geben ist auch nicht das Gelbe vom Ei, da ich 10 - 20 Seiten auf dem Server habe, die alle einen eigenen Header bräuchten, was ich hier kombinieren will.
    Das ist notwendig, da viele Leute, für die ich die Webseiten mache, natürlich noch irgendwo eine Veränderung haben wollen. Wenn ich jetzt alle 20 Dateien durchgehen muss, nur um eine Stelle zu ändern, ist das echt nervig.
    Die beste maschinelle Übersetzung der Welt - DeepL Übersetzer
    Alle Zitate, die ich seit dem 1.9.2017 übersetzt habe, wurden vollautomatisch mit DeepL übersetzt.



    Könntest das ganze per Javascript lösen.
    Die Aktuelle location.href auslesen dann alle a refs durch gehen und den aktuellen eine CSS Class ala "active" adden.
    Alles klar soweit ?
    Beispiel:
    CSS:

    Quellcode

    1. .menu ul li.active a {
    2. text-decoration:none;
    3. color:#fff;
    4. }

    JS:

    HTML-Quellcode

    1. <script src="jquery.js" type="text/javascript"></script>
    2. <script type="text/javascript">
    3. $(function() {
    4. var url = window.location.href;
    5. $(".menu a").each(function() {
    6. if (url == (this.href)) {
    7. $(this).closest("li").addClass("active");
    8. }
    9. });
    10. });
    11. </script>


    HTML:

    HTML-Quellcode

    1. <div class="topmenu">
    2. <ul>
    3. <li><a href="test.html">TEST </a></li>
    4. <li><a href="test2.html">TEST 2</a></li>
    5. </ul>
    6. </div>

    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Lass mach meine Idee an einem Kleinen Beispiel erklären
    Nehmen wir an du willst die Datei preise.php anzeigen. Dann rufst du die Datei nicht Direkt auf, sondern regelst das über einen Parameter der bei der index.php abgefragt wird: index.php?page=preise
    Dann hast du die ganze Elemente in der index.php

    PHP-Quellcode

    1. <?php
    2. if(isset($_GET["page"])){$page = "seiten/" . $_GET["page"] . ".php";}else{
    3. //Wenn kein Parameter das ist
    4. }
    5. ?>
    6. <html>
    7. <head>...</head>
    8. <body>
    9. <nav id="nav">
    10. <ul>
    11. <li><a href="index.php">Home</a></li>
    12. <li><a href="#" class="icon fa-angle-down">Informationen</a></li>
    13. <li><a href="preise.php">Preise</a></li>
    14. </ul>
    15. </nav>
    16. ...
    17. <?php
    18. include($page); // Seite aufrufen
    19. ?>
    20. <footer>
    21. (C) Hallo Welt Inc. 2017
    22. </footer>
    23. </body>
    24. </html>

    Das hier ist natürlich keine Lösung für dein Problem, sondern nur um zu zeigen was ich meine(Würde ich auch so nicht 1:1 übernehmen wegen der Sicherheit usw.). Wenn du dich für diesen Weg entscheidest würde ich jede Datei in einen Array Eintrage. Und dann prüfen ob die im Parameter angegebene Datei auch wirklich aufrufbar soll sein. Dann kannst über foreach mithilfe dieses Array das Menu generieren und auch abfragen welcher Punkt dort markiert sein soll :D Kommst du jetzt nach was ich meine?

    @xChRoNiKx Auch gute Idee, könnte man aber auch ohne Jquery. Dann müsste man nicht noch ne unnötige Datei herunterladen ;)
    diverse Frameworks lösen das ja über Layouts.
    Sprich dein Layout wird mit Übergabe-Werten gerendert und du hast das ganze nur an einer Stelle festgelegt.

    Macht sowas vllt. Sinn für dich und dein Vorhaben?


    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    Ja.
    Ich verlagere eigentlich immer nur den <header> auf eine andere Datei. Und dann mit

    PHP-Quellcode

    1. <?php include("header.php") ?>

    Das funktioniert halt wie gesagt ganz gut, bis auf das Problem mit den Klassen. Es muss doch irgendein Weg geben, wo ich einfach so wie bei PDO oder mysqli so Fragezeichen setzen kann und am Ende sage, welches Fragezeichen nun mit class="current" ersetzt wird und welches mit nichts ersetzt wird...
    Die beste maschinelle Übersetzung der Welt - DeepL Übersetzer
    Alle Zitate, die ich seit dem 1.9.2017 übersetzt habe, wurden vollautomatisch mit DeepL übersetzt.



    Was du tun kannst:

    verwende in deiner header.php eine Variable bspw. $x.


    In deinem Script in dem du include(header.php) aufrufst, setzt du dann diese $x.


    bspw.
    main.php

    PHP-Quellcode

    1. <?php
    2. $x = 1;
    3. include('header.php');
    4. ?>


    header.php

    PHP-Quellcode

    1. <?php
    2. echo 'In der coolen Main-variable $x steht: ' . $x;
    3. ?>



    so kannst du im Grunde alles "übergeben". Wobei Übergeben der Falsche begriff ist, du includest ja nur den Code aus dem File in deine eigentliche Main. Wodurch du Zugriff auf deren Methoden und Variablen hast.

    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    @xChRoNiKx
    Ich habe es versucht, aber irgendwie hat sich rein gar nichts geändert (von der Klasse her)

    Mein CSS:

    Quellcode

    1. #header > nav > ul > li.current:after {
    2. content: '';
    3. display: block;
    4. position: absolute;
    5. bottom: 0;
    6. left: 0;
    7. width: 100%;
    8. height: 3px;
    9. background-image: linear-gradient(90deg, #71aca0, #efc278);
    10. }
    11. #header > nav > ul > li.current > a {
    12. color: #6e9e64;
    13. }
    14. #header > nav > ul > li.active > a {
    15. color: #6e9e64;
    16. }

    Ist natürlich nur für den Current-Effekt.

    @Acr0most
    Ich habe es jetzt mal mit den Variablen versucht, scheint ganz gut zu klappen. Ist nur die Frage, ob das jetzt wirklich das beste ist, was man da machen kann.


    UPDATE:
    Ich habe das ganze jetzt mit Variablen gelöst und es funktioniert. Ich werde es erst einmal so lassen, wenn niemand anders ein gutes Gegenargument aufbringt, wieso man es nicht so lösen sollte.
    Spoiler anzeigen

    nav.php:

    HTML-Quellcode

    1. <html>
    2. <nav id="nav">
    3. <ul>
    4. <li <?php echo($home); ?>><a href="index.php">Home</a></li>
    5. <li <?php echo($information); ?>>
    6. <a href="#" class="icon fa-angle-down">Informationen</a>
    7. <ul>
    8. <li><a href="anfahrt.php">Anfahrt</a></li>
    9. <li><a href="bilder.php">Bilder</a></li>
    10. <li><a href="wetter.php">Wetterlage</a></li>
    11. <li><a href="ausstattung.php">Ausstattung</a></li>
    12. </ul>
    13. </li>
    14. <li <?php echo($preise); ?>><a href="preise.php">Preise</a></li>
    15. <li <?php echo($bk); ?>><a href="#" class="icon fa-angle-down">Belegungsplan und Kontakt</a>
    16. <ul>
    17. <li><a href="kontakt.php">Kontakt</a></li>
    18. <li><a href="buchen.php">Belegungsplan</a></li>
    19. </ul>
    20. </li>
    21. </ul>
    22. </nav>
    23. </html>


    index.php:

    HTML-Quellcode

    1. <header id="header">
    2. <div class="logo">
    3. <a href="index.php"><strong>Apartment</strong> *****</a>
    4. </div>
    5. <?php
    6. $home = 'class="current"';
    7. include("nav.php");
    8. ?>
    9. </header>

    Hier ist dann die Variable $bk, $information und $preise leer, sodass nur bei $home ein class="current" eingefügt wird.

    Die beste maschinelle Übersetzung der Welt - DeepL Übersetzer
    Alle Zitate, die ich seit dem 1.9.2017 übersetzt habe, wurden vollautomatisch mit DeepL übersetzt.



    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Michdi“ ()

    Hi,

    habe dir hier ein Beispiel gemacht: github.com/mariusgerum/page-include

    Wie du siehst, wird entsprechend hier der Style für die jeweils aktive Seite festgelegt (die im Konstruktor bestimmt wird).
    Die Seiten kannst du mit $App->loadPage() dynamisch einbinden.

    Link :thumbup:
    Hello World