FrankaB: links mehrfach verwenden - das geht!

moin,

nochmal vielen dank den fleissigen helfern bei der behebung des forumschadens.

darunter hat leider auch mein posting gelitten. deshalb will ich nochmal vorbringen, wie ich mir die lösung nun _dank_ einiger mithelfer zusammengebaut habe.

es geht darum, eine linkadresse an einer stelle zu hinterlegen, damit die im projekt öfters auftauchenden verlinkungen alle gleich geändert werden können. die lösung sieht in php folgendermaßen aus:

--  --  --
datei links.txt:

<?php
$link[1] = 'seite1.php';
$link[2] = 'seite2.php';
?>

datei seite0.php

<a href="<?php include 'links.txt'; echo "$link[1]"; ?>">linkzuseite1.php</a>
--  --  --

nun möchte ich diese konstruktion gern nocheinmal zur diskussion stellen. vielleicht fällt einem dazu nochwas besseres ein?

einen sonnigen tag

FaB

  1. Hi FaB,

    datei links.txt:

    <?php
    $link[1] = 'seite1.php';
    $link[2] = 'seite2.php';
    ?>

    datei seite0.php

    <a href="<?php include 'links.txt'; echo "$link[1]"; ?>">linkzuseite1.php</a>
    --  --  --

    nun möchte ich diese konstruktion gern nocheinmal zur diskussion stellen. vielleicht fällt einem dazu nochwas besseres ein?

    Du könntest die php datei gleich z.B. am Anfang des <body>-teils includen, dann sparst du dir das in jedem link:

    <body>
    <?php include 'links.txt'; ?>
    <a href="<?php echo '$link[1]'; ?>">link1</a>
    <a href="<?php echo '$link[2]'; ?>">link2</a>
    </body>

    so ungefähr.

    Vielen Dank und bitteschön,
    Dave

    --
    sh:( fo:| ch:? rl:° br:> n4:( ie:{ mo:} va:) de:] zu:} fl:| ss:{ ls:& js:{
  2. es geht darum, eine linkadresse an einer stelle zu hinterlegen, damit die im projekt öfters auftauchenden verlinkungen alle gleich geändert werden können. die lösung sieht in php folgendermaßen aus:

    datei links.txt:

    <?php
    $link[1] = 'seite1.php';

    datei seite0.php

    <a href="<?php include 'links.txt'; echo "$link[1]"; ?>">

    nun möchte ich diese konstruktion gern nocheinmal zur diskussion stellen. vielleicht fällt einem dazu nochwas besseres ein?

    Mit include setzt Du an _jeder_ Stelle, an der include steht, die Datei ein - verwendest Du zehn includes, hast Du auch die Adressdatei zehnmal drinstehen. Benutze lieber include_once oder noch besser require_once.
    Weiterhin solltest Du vielleicht die Ausgabe erst durch htmlentities() & Co. schicken.

    Und nur der Vollständigkeit halber: Es geht auch ohne das Monstrum PHP, mit SSI.

    addressen.shtml:

    <!--#set var="adresse1" value="blabla" -->

    und

    seite.shtml:

    <!--#include virtual="adressen.shtml" -->
     [..]
     <a href="<!--#echo var="adresse1" encoding="none" -->">

    (encoding vielleicht auch "url", könnte aber unerwartete Folgen haben)

    Gruß,
      soenk.e

    1. moin Sönke,

      Mit include setzt Du an _jeder_ Stelle, an der include steht, die Datei ein - verwendest Du zehn includes, hast Du auch die Adressdatei zehnmal drinstehen. Benutze lieber include_once oder noch besser require_once.

      da hatte ich gerade den hinweis von Dave bekommen, es doch in den dateikopf zu setzen.

      Weiterhin solltest Du vielleicht die Ausgabe erst durch htmlentities() & Co. schicken.

      wozu?

      Und nur der Vollständigkeit halber: Es geht auch ohne das Monstrum PHP, mit SSI.

      was ist hier der unterschied? wieso monstrum? werden nicht beide vorgehensweisen auf dem server abgearbeitet?

      gruß

      FaB

      1. Hi FaB,

        was ist hier der unterschied? wieso monstrum? werden nicht beide vorgehensweisen auf dem server abgearbeitet?

        doch doch, aber der PHP-Interpreter beherrscht dermassen viele Befehle, dass die ausführung von php-befehlen länger dauert als SSI.

        --
        sh:( fo:| ch:? rl:° br:> n4:( ie:{ mo:} va:) de:] zu:} fl:| ss:{ ls:& js:{
      2. Weiterhin solltest Du vielleicht die Ausgabe erst durch htmlentities() & Co. schicken.

        wozu?

        Um zum Beispiel vermeiden, daß ein Text à la "example.com/hallo.php?name=ich&alter=100" in der Seite erscheint ("&alter" ist falsch, es muß im HTML-Quelltext "&alter" lauten; auch in href-Attributen ist & alleinstehend nicht erlaubt). Vielleicht möchtest Du auch einige in URLs nicht erlaubte Zeichen durch %xx-Folgen ersetzen (urlencode()).
        Wenn Du beides schon beim Eingeben der Adressen in die PHP-Datei beachtest, kannst Du darauf natürlich verzichten.

        Und nur der Vollständigkeit halber: Es geht auch ohne das Monstrum PHP, mit SSI.

        was ist hier der unterschied? wieso monstrum? werden nicht beide vorgehensweisen auf dem server abgearbeitet?

        Ich habe es nie ausgemessen, aber es würde mich nicht wundern, wenn ein in vielerlei Hinsicht komplexer Interpreter wie PHP insgesamt langsamer ist bzw. deutlich mehr Resourcen verbrät als ein Interpreter, der nur wenige Befehle und eine simple Sprachstruktur versteht, so wie es bei SSI der Fall ist.
        Von daher würde ich, sofern es sich nur um diese Adresslisten handelt, lieber zu SSI greifen als zu PHP. Aber das ist sicher auch Geschmackssache.

        Gruß,
          soenk.e

        1. hallo Sönke

          Um zum Beispiel vermeiden, daß ein Text à la "example.com/hallo.php?name=ich&alter=100" in der Seite erscheint ("&alter" ist falsch, es muß im HTML-Quelltext "&alter" lauten;

          ok, habs verstanden, bei mir handelt es sich aber eher um dinge wie 'seite1.php', 'seite2.php'. merks mir aber für die zukunft.

          Von daher würde ich, sofern es sich nur um diese Adresslisten handelt, lieber zu SSI greifen als zu PHP. Aber das ist sicher auch Geschmackssache.

          werd ich mir mal durch den kopf gehen lassen, wurde ja schon von Dave angemerkt, dass es mit php länger dauern kann.

          gruß

          FaB

  3. Hi,

    dein Ansatz, bzw. Daves Lösung gefällt mir eigentlich recht gut.

    <a href="<?php echo '$link[1]'; ?>">link1</a>

    Mich stört allerdings der eingebettete PHP-Code, den man nun bei jedem Link hinzufügen muß. Wie wäre es denn mit einem XML-orientieren Ansatz: <a rid="link1"></a> ?

    Das Attribut rid steht für Resource ID und ist eine Referenz auf den Link. Mit wenigen PHP-Befehlen kann man dann z.B. nach dem Muster <a rid=""></a> suchen, den Wert zwischen den Anführungszeichen lesen und damit den passenden Link aus dem Array lesen. Anschließend entfernt man rid und setzt das Attribut href. Das kann man praktisch mit allen möglichen Attributen machen, so auch title oder target...

    Etwas komplexer ist dann eine Erweiterung auf Attribut-Variablen, die dann je nach Angabe aus einem mehrdimensionalen Array gelesen werden (z.B. wird Attrib href="$" durch href="test.html" ersetzt): <a rid="link1" href="$" target="$">$</a>

    Was meint Ihr dazu?

    Gruß,
    Danny

    1. moin Danny

      »»Wie wäre es denn mit einem XML-orientieren Ansatz: <a rid="link1"></a> ?

      gern, bin für jede variante offen. wie sieht es bei Deinem beispiel mit

      • browserunterstützung
      • formatierung mit css
      • und allem was man noch so berücksichtigen muss (mir fällt gerade nix weiter ein)

      aus?

      Mit wenigen PHP-Befehlen kann man dann z.B. nach dem Muster <a rid=""></a> suchen, den Wert zwischen den Anführungszeichen lesen und damit den passenden Link aus dem Array lesen. Anschließend entfernt man rid und setzt das Attribut href.

      klingt für meine anwendung ein wenig kompliziert/aufwändig, für größere projekte ist das gerade in hinblick auf xml (zukunft) ein interessanter ansatz, wenn auch meine xml-kenntnisse sich noch im beta stadium befinden.

      gruß

      FaB

        • browserunterstützung
        • formatierung mit css
        • und allem was man noch so berücksichtigen muss (mir fällt gerade nix weiter ein)

        Es handelt sich praktisch um einen Preprozessor, der im PHP-Kopf einer Datei den XML-Code durch gewöhnliches HTML ersetzen soll. Also bereits auf dem Server, d.h. der Browser kriegt davon nichts mit, weshalb sich auch nicht die Frage nach Kompatiblität, etc. stellt. Das gilt jedenfalls für den Benutzer der Webseite.

        Als Entwickler sollte man sicherlich ein paar Dinge beachten. Wenn Du z.B. einen WYSIWYG-Editor incl. Validator benutzt, wird dieser sicherlich über das Attribut "rid" stolpern, das ja kein gültiges HTML-Tag ist. In diesem Fall könnte man aber auf XHTML ausweichen und die DTD entsprechend anpassen, damit sollte es dann ohne Probleme funktionieren.

        Es klingt komplizierter als es letztlich ist, mit etwas Planung im Vorfeld ist das kein großes Problem. Sollte trotzdem entsprechendes Know-How fehlen, würde ich das an Deiner Stelle erstmal so einfach wie möglich realisieren.

        Gruß,
        Danny

      1. Ich bin's nochmal.

        klingt für meine anwendung ein wenig kompliziert/aufwändig, für größere projekte ist das gerade in hinblick auf xml (zukunft) ein interessanter ansatz, wenn auch meine xml-kenntnisse sich noch im beta stadium befinden.

        Vielleicht hat der Begriff XML in meiner Antwort etwas abgeschreckt. Das war einfach nur auf die Erweiterung das Tag <a> um ein selbst definiertes Attribut (im Beispiel rid="link1") bezogen. Praktisch sind dafür keine XML-Kenntnisse nötig.
        Aber in PHP solltest Du schon mal was mit regulären Ausdrücken gemacht haben, sonst kann die Suche nach bestimmten String-Mustern recht kompliziert werden.
        Wenn Du Hilfe brauchst, schreib ne kurze Mail. Für den Relaunch meiner Homepage möchte ich nämlich auch ein solches, möglichst simples Link-System haben, das ich wahrscheinlich in den nächsten Wochen in PHP programmieren werde. Wenn das Teil fertig ist, schicke ich Dir gerne den Code zu.

        Gruß,
        Danny