Zur Navigation

Funktion abfragen

1 Selo

Hallo Jörg,

ich habe eine Funktion, die mir ein Div als sichtbar schaltet.
Dabei darf die Seite nicht neu geladen oder im Browser verschoben werden.

Das ist die Funktion:
<!-- function oeffnen(a){
  var e=document.getElementById(a);
  if(!e)return true;
  if(e.style.display=="none"){
    e.style.display="block"
  } else {
    e.style.display="none"
  }
  return true;
}
//--> </script>

Hier kommt der auslösende Link:
<a onclick="return oeffnen('ein')" href="javascript:void(0)">Textfeld öffnen></a>

Und hier die Ausführung:
<div id="ein" style="display:none;">
<a onclick="return oeffnen('ein')" href="javascript:void(0)">Textfeld schließen</a>
<?php
 include ("einfuegen.html");
 ?>
</div>

Meine Frage:
Kann ich hier vielleicht mit einer if Abfragen prüfen, ob das Div- Element geöffnet ist und dann erst die Datei einfuegen.html per include einlesen lassen, wenn dieses per Mausklick geöffnet wird?

Noch besser wäre für mich, wenn die ganze Funktion nur mit PHP laufen würde. Trotz umfangreichen Versuchen ist mir das leider nicht gelungen.

Viele Grüße von Lothar

03.03.2013 17:48

2 Horst_M

Zitat von Selo

Noch besser wäre für mich, wenn die ganze Funktion nur mit PHP laufen würde. Trotz umfangreichen Versuchen ist mir das leider nicht gelungen.
Du müsstest hier schon klar zwischen clientseitig mit JavaScript und serverseitig mit PHP unterscheiden. Mit JS kannst Du im Normalfall keine Anweisungen mehr an den Server senden, dass der das Dokument noch einmal mit einer include-Datei einfuegen.html parsen soll. Was hingegen möglich wäre, in dieser Seite auf PHP zu verzichten und den Inhalt von einfuegen.html per Ajax abzuholen und mit JavaScript einzufügen.

Dazu bedarf es dann auch keiner zwei Links, sondern das könnte alles mit einem Klick und einer Funktion erfolgen, wobei die Funktion dann etwas umfangreicher würde.

Nun gut, jeder macht es anders, das waren nur meine Vorstellungen, wie ich erst einmal an die Sache herangehen würde.

03.03.2013 19:20

3 Selo

Hallo Horst,

von Ajax habe ich keine Ahnung.

Mein Plan wäre gewesen, die ganze Sache nur in PHP auszuführen.

Oder im obigen Skript eine Bedingung abzufragen in der Art:
<?php
if (irgend ein Wert==true) {
 include ("einfuegen.html");
}
 ?>

Beides bekomme ich nicht hin.

03.03.2013 20:36

4 Jörg Kruse

Diese beiden Bedingungen gehen nicht zusammen:

Mein Plan wäre gewesen, die ganze Sache nur in PHP auszuführen.

Dabei darf die Seite nicht neu geladen oder im Browser verschoben werden.

Die beiden Alternativen hat Horst_M schon genannt. Entweder die Seite wird mit entsprechenden Parametern, die das PHP-Script auswerten kann, neu aufgerufen, dann kannst du auf JavaScript verzichten. Oder du nutzt JavaScript + Ajax, so dass der Inhalt eingefügt werden kann, ohne dass die Seite neu geladen werden muss.

PHP läuft nur auf dem Server und kann von einem Klick im Browser nur über eine URL erfahren: entweder der URL eines Seitenaufrufs oder einer Ajax-URL. (Edit: es geht auch über Cookies, oder POST-Daten - aber auch dazu bedarf es eines Seiten- oder Ajax-Aufrufs)

03.03.2013 21:46 | geändert: 03.03.2013 21:49

5 Selo

Hallo Jörg,

vielen Dank für die Antwort zu vorgerückter Stunde. Nach Euren Beschreibungen habe ich nun leider ein Problem, dass ich nicht lösen kann.

Die ganze Sache brauche ich eigentlich nur deshalb, weil nicht der ganze Text ständig im Quelltext aller Seiten stehen soll. Deshalb soll der Inhalt nur geladen wird, wenn es jemand braucht.

Eine ander Möglichkeit fällt mir leider nicht ein.

Viele grüße und Danke

03.03.2013 22:49

6 Horst_M

Um Besucher nicht mit zu viel Text zu erschlagen, wird zuweilen ein JavaScript Accordion verwendet. Dabei ist der Text im Quelletext vorhanden und wird bei deaktivierten JS angezeigt. Falls JS nicht deaktiviert ist, wird der Text dann bei onload ausgeblendet und erst bei einem Klick wieder eingeblendet. Dazu ist nicht mehr erforderlich, als eine Funktion, die bei Klick zwischen display="none" und inline oder block wechselt.

Hat den Vorteil, dass die Seite auch für Screenreader lesbar bleibt und kein Text für Suchmaschinen versteckt wird. Auf ein Verstecken für Suchmaschinen könntest Du auch verzichten, wenn der Text per iFrame eingebunden wird. Der iFrame könnte notfalls ebenfalls per Klick ein- und ausgeblendet werden. Bots hätten dann die Möglichkeit die Seite im iFrame einmal zu betrachten und gut ist.

Wenn es Dir aber nur darum geht, einen Text vor Suchmaschinen zu verstecken, bei allen Seiten würde ich das nie und nimmer empfehlen. So ein Vorhaben wird als Cloaking bezeichnet und könnte zu einer Abwertung führen. Es spricht nichts gegen eine Ajax-Lösung, doch auf allen Seiten? Es gibt sicherlich noch weitere Ansätze und Lösungen, wie JSONP, wobei die zusätzlichen Daten in einer Datei abgelegt werden könnten, die normal in einem JS Script-Bereich eingeschlossen und ausgeben wird.

04.03.2013 11:11 | geändert: 04.03.2013 11:14

7 Selo

Hallo Horst, zuerst Danke für die viele Mühe Deiner Antwort. Vielleicht hätte ich schon am Anfang die ganze Sache besser erklären sollen. Natürlich möchte ich nichts verstecken.
Hier ist einmal eine Beispielseite:
http://www.asien.l-seifert.de/nepal-2012/Unterricht.html

Unter dem Bild rechts befindet sich ein Grafik mit Buttons. Wenn man die anklickt, öffnet sich ein Fenster mit den Buttons zu den Netzwerken, wo man die Bilder posten kann.

Es sind also nur Links und Scripte zu anderen Seiten, die der normale Seitenbesucher nicht benötigt.
Nun verlängert das Laden nur unnötig die Ladezeit der Seiten und behindern somit das Anschauen der Bilder. Es sind auf zwei verschidenen Webseiten über 2000 Bilder.

Mit Iframe habe ich auch probiert, da war der Text, den man ja mit src="http://www.datei.htm" einbindet, trotzdem im Quelltext. Da ich gerade probehalber den Pagespeedservices von google nutze, haben mir die auch leider in jeden Link ein einzelnes iframe integriert, es war also alles kaputt im Iframe. Die bei Google erst zu konsultieren wegen diesem Fehler halte ich für sinnlos.

Überlegt habe ich mir auch, die Sache mit einem Formular zu lösen. Damit könnte ich die Parameter an die Links übergeben und ein Popup-Fenster öffnen. Aber Popup ist wohl auch nicht die richtige Lösung.

viele Grüße von Lothar

04.03.2013 12:09

8 Horst_M

Mit diesem Pagespeedservices kenne ich mich nicht aus, doch zerschossen sollte ja eigentlich nichts werden. Hier mal ein Demo, kannst Du testen, so wie es ist:

datei.html
<!DOCTYPE html>
<html>

<head>
<title>Testdatei</title>
</head>

<body>
Ich bin nur eine Testdatei.<br>
Mehr bin ich nicht!
</body>
</html>

Und dazu eine testdatei.html:
<!DOCTYPE html>
<html>

<head>
<title>Test Textfeld</title>
</head>

<body>

<!-- Im Dokument -->
<p><a href="javascript:Wechsel()">Link für Textfeld</a></p>
<div id="abc">Platzhalter</div>


<!-- Im Footer -->
<script type="text/javascript">

var gerade = 1;
var abc = document.getElementById("abc");

function Wechsel() {gerade++;

    if ( gerade % 2 == 0) {abc.style.display = "inline";
    }
    else {abc.style.display = "none";
    }
}

window.onload = function() {

    abc.innerHTML = "<iframe src=\"datei.html\" name=\"Test\" width=\"300\" height=\"200\" scrolling=\"no\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\">";
    abc.style.display = "none";
}
</script>
</body>
</html>

Die window.onload Funktion wird erst aufgerufen, wenn das Fenster mit der Seite fertig geladen ist und sollte somit die Ladezeit der Seite bis zur Anzeige der Seite im Browser nicht beeinflussen.

Die Wechsel-Funktion wechselt zwischen none und inline, je nachdem ob die Zahl gerade oder ungerade ist.

04.03.2013 13:53 | geändert: 04.03.2013 13:55

9 Selo

Hallo Horst,
vielen Dank. Ich habe es gerade ausprobiert. Mit dem Iframe bekomme ich es nicht hin. Eines der Skript funktioniert nicht mehr und es werden vor allem auch keine Parameter für die Links übergeben. So funktionieren alle nicht mehr.
Dann habe ich versucht, statt dem Iframe die Datei per PHP zu includen, das geht leider auch nicht.
    abc.innerHTML = "<?php include ("bookmarks.html"); ?>";
Mit diesem code wird die Datei ständig im footer eingeblendet. Da habe ich bestimmt etwas falsch gemacht.

04.03.2013 14:44

10 Horst_M

Da muss ich passen, wird mir zu viel. Parameter-Werte Paare lassen sich zwar auch an Seite im iFrame übergeben, zum Beispiel wenn man diese in einem QueryString mit übergibt. Ich weiß aber nicht, wie ich das in drei Zeilen verständlich genug erklären könnte und an diesen Bookmarks würde ich vermutlich eher drei Tage oder länger sitzen.

Edit: Was möglich sein sollte, alles was Du jetzt in einfuegen.html hast in eine einfuegen.js zu schreiben und diese bei onload aufzurufen und auszugeben.

04.03.2013 15:41 | geändert: 04.03.2013 15:51