Text per CSS vordefinieren?

DieTa

DieTa

Aktives Mitglied
Thread Starter
Dabei seit
17.09.2003
Beiträge
3.388
Reaktionspunkte
32
Guten Morgen,

ich bin gerade dabei meine Firmenseite zu bauen die 3sprachig, eventuell 4sprachig werden soll (DE, EN, SE, NL). (Grund sind Kunden aus den jeweiligen Ländern).

Die Texte möchte ich aus einer (mySQL) Datenbank laden, andererseits überlege ich gerade ob man Texte nicht viel einfacher per CSS vordefinieren kann. Der Hintergedanke ist hier, dass die Seite nicht neu lädt, sondern die CSS Datei per AJAX neu geladen und nur aktualisiert wird. Wäre einfach "schicker".

Ist sowas möglich? Also Texte als Variablen in CSS vorzudefinieren? Oder sollte ich hier doch auf mySQL mit PHP zurückgreifen?

Gruss
Dennis
 
Hi lengsel,

in Deinem Beispiel wird aber eigentlich nur gezeigt wie man den <p>-Tag formatiert?

Was wäre denn empfehlenswerter?
 
Danke für die Links Matt :)
Werde mich da einlesen! Vom drüberschauen her sieht es vielversprechend aus.

Wo genau AJAX anfängt habe ich wohl doch noch nicht so raus... :)
 
Würde ich auch nicht mit JavaScript oder erst recht AJAX machen. Wie oft wechselt denn ein Kunde die angezeigte Sprache?

Dafür musst Du dann den zusätzlichen Programmierungsaufwand und u.U. das Ausschließen von Personengruppen mit AJAX-unfähigen Browsern in Kauf nehmen.
 
CSS ist entstanden um den Inhalt von der Darstellung zu trennen. Jetzt den Inhalt vom HTML noch in das CSS File zu packen ist wohl weniger Sinnvoll. Was bleibt dann noch im HTML File übrig ausser ein paar Reste?
 
Wenn es nur statische Inhalte sein sollen, die nicht oft geändert werden müssen, kannst Du auch in eine Datei auslagern, die nur die Texte enthält, eine Datenbank ist dann überflüssig.

Abhängig von der angeklickten Sprache inkludierst Du dann die jeweilige Sprachdatei.

2nd
 
ich mach das immer so, dass ich am Anfang die gewählte Sprache in eine PHP-Session schreibe.

Je nach Sprache wird dann z.B. die Datei:

files/d/index.php
files/e/index.php
...

geladen und in die Seite eingefügt.


ein Codebeispiel:
PHP:
<?php
    session_start();

    if(isset($_GET['sprache']))
    {
        $sprache = $_GET['sprache'];
        session_register(sprache);
    }
?>

<a href="index.php?sprache=d">deutsch</a><br />
<a href="index.php?sprache=e">english</a><br />

<?php
    if(isset($_SESSION['sprache']))
    {
        @include('files/'.$_SESSION['sprache'].'/index.php');
    }
    else
    {
        @include('files/d/index.php');
    }
?>
 
@Jakob: Da für die ganze Seite AJAX eingesetzt wird, komme ich um Browserweiche eh nicht rum...

@stoph: Danke für den Hinweis - weiß ich - aber wäre doch ne Idee gewesen ;)

@2nd Reality: Wäre auch eine Idee.. sogar ne ziemlich gute :) Du meinst mit dem @include-Befehl in PHP? (z.B. - wäre aber meine favourisierte Sprache).

@simusch: Geil! Das werde ich mal ausprobieren. Ich schreibe jetzt erstmal die Texte in Deutsch, übersetze sie ins Englische und dann werde ich das damit mal ausprobieren!

Das Forum hier verblüfft mich immer wieder - das ist das nonplusultra hier und man braucht kein anderes mehr, weil irgendwer hier immer was zu dem Thema weiß, was man wissen möchte :thumbsup:
 
Prinzipiell meine ich daselbe wie simusch.

Ich habe mal eine Seite gemacht, in der ich die Texte in eine PHP-Datei ausgelagert hatte und als Variablen/Konstanten definiert hatte.

Beispiel deutsche Datei:

HTML:
...
...
$homeText = "Hallo und Willkommen, hier bei Dieta geht es ab!";
...
...
...


Beispiel englische Datei:

HTML:
...
...
$homeText = "Hello and Welcome to Dieta!";
...
...
...

Diese Datei kann man englisch.php/deutsch.php etc. nennen. Abhängig von der gewählten Sprache inkludierst Du so wie in dem Beispiel von simusch dann jeweils diese Datei.

Den darstellenden Skripten ist es ja egal, was sich hinter den Variablen/Konstanten verbirgt (also ob englische oder deutsche Texte):

PHP:
<p><?=$homeText?></p>

War verständlich?

Noch kurz zu simuschs Skript:

PHP:
 $sprache = $_GET['sprache'];
 session_register(sprache);

Wieso nicht so ohne session_register? Die Funktioner sollte aufgrund von register_globals nicht mehr verwendet werden. Das sollte reichen:

PHP:
 $sprache = $_GET['sprache'];

Und insgesamt würde ich das Skript so laufen lassen:

PHP:
<?php
    session_start();
?>

<a href="index.php?sprache=d">deutsch</a><br />
<a href="index.php?sprache=e">english</a><br />

<?php
    if(isset($_GET['sprache'])) $_SESSION['sprache'] = $_GET['sprache']; else $_SESSION['sprache'] = 'd';
    include('files/'.$_SESSION['sprache'].'/index.php');
?>

Bisschen kürzer, unabhängig von register_globals und funktioniert auch ;) Aber ich bin weit weg davon, gut PHP programmieren zu können...

2nd
 
Zuletzt bearbeitet:
2ndreality schrieb:
Ich habe mal eine Seite gemacht, in der ich die Texte in eine PHP-Datei ausgelagert hatte und als Variablen/Konstanten definiert hatte.

Hab ich früher auch gemacht, halte ich nicht für praktikabel. Wenn du in einer Datei eine neue Variable einfügst, weil irgendwo neuer Text reinkommt, und das vergisst, in einer der anderen Sprachen nachzuführen, steht da dann gar nichts. Mit gettext (siehe mein Link oben) steht dann dort wenigstens ein Satz, wenn auch in einer anderen Sprache.

Noch kurz zu simuschs Skript:

PHP:
 $sprache = $_GET['sprache'];
 session_register(sprache);

Wieso nicht so ohne session_register? Die Funktioner sollte aufgrund von register_globals nicht mehr verwendet werden. Das sollte reichen:

PHP:
 $sprache = $_GET['sprache'];

Das mit den Sessions macht schon Sinn. Sonst müsstest du jedes mal die ausgewählte Sprache mit jedem Link übergeben...

[edit] Hinterher rumeditieren ist unfair :D

Matt
 
Nee Matt, mir ging es nicht um die Session, sondern um das session_register, sorry für das PostReplyEditing :eek:
 
2ndreality schrieb:
Und insgesamt würde ich das Skript so laufen lassen:

PHP:
<?php
    session_start();
?>

<a href="index.php?sprache=d">deutsch</a><br />
<a href="index.php?sprache=e">english</a><br />

<?php
    if(isset($_GET['sprache'])) $_SESSION['sprache'] = $_GET['sprache']; else $_SESSION['sprache'] = 'd';
    include('files/'.$_SESSION['sprache'].'/index.php');
?>

Das ist aber nicht wirklich sinnvoll. Du solltest nicht nur prüfen, ob $_GET["sprache"] gesetzt ist, sondern auch, ob $_SESSION["sprache"] gesetzt ist. Sonst fällst du nämlich auf jeder neuen Seite auf deutsch zurück, weil du das gnadenlos über $_SESSION["sprache"] drüberbügelst und die Session macht nicht wirklich Sinn.

PHP:
// Setzt die Sprache auf einen neuen Wert, wenn der User einen entsprechenden Link angeklickt hat
if(isset($_GET["sprache"])) {
  $_SESSION["sprache"] = $_GET["sprache"];
}
// Setzt die Sprache auf einen Standardwert, wenn diese bislang nicht gesetzt ist
if(!isset($_SESSION["sprache"])) {
  $_SESSION["sprache"] = "d";
}
include('files/'.$_SESSION['sprache'].'/index.php');

Matt
 
Jo, das wäre dann der erste Fehler gewesen, den ich beim Testen bemerkt und ausgebessert hätte, hier habe ich aber nur im Kopf konzipiert und da reicht mein Horizont nur bis zum nächsten Strichpunkt ;)

Hier die korrigierte Version von mir:

PHP:
<?php
    session_start();
?>

<a href="index.php?sprache=d">deutsch</a><br />
<a href="index.php?sprache=e">english</a><br />

<?php
    if(isset($_GET['sprache'])) $_SESSION['sprache'] = $_GET['sprache']; elseif (!isset($_SESSION['sprache'])) $_SESSION('sprache')= 'd';
    include('files/'.$_SESSION['sprache'].'/index.php');
?>
 
Guten morgen und erstmal vielen vielen Dank für die hilfreichen Scripts.

Mein Problem ist nun eigentlich (nachdem ich nach mehrmaligem Lesen die Scripte verstanden habe), dass ich nicht angezeigt bekomme. Aber ich fange mal vorne an.

files/d/index.php
PHP:
<?php
$homeText = "&Uuml;ber uns";
?>

files/e/index.php
PHP:
<?php
$homeText = "About us";
?>

index.php
PHP:
[...]
<body>
<?php
 session_start();
?>

<div id="container">
 <img src="images/logo2.png">
   <div align="right"><a href="index.php?sprache=d">Deutsch</a> | <a href="index.php?sprache=e">English</a>

<?php
 if(isset($_GET['sprache'])) $_SESSION['sprache'] = $_GET['sprache'];
 elseif (!isset($_SESSION['sprache'])) $_SESSION('sprache')='d';
 include('files/'.$_SESSION['sprache'].'/index.php');
?>
</div>

<?=$homeText;?>

[...]

Die Ausgabe der Variable $homeText habe ich mit und ohne ";" ausprobiert, aber der zeigt mir gar nix an...

Woran könnte es liegen? Läuft hier momentan auf meinem Testrechner (Windows mit XAMPP).

Vielen Dank schonmal! :)


---- KORREKTUR ----

Ja, es ist schon noch ziemlich früh am Morgen - ich hatte die Dateien nicht im HTDOCS sondern auf dem Desktop liegen, dann kann PHP natürlich NICHT funktionieren.

Allerdings bekomme ich nun (nach verschieben in das richtige Verzeichnis folgender Fehlermeldung:
Fatal error: Can't use function return value in write context in C:\Programme\xampp\htdocs\testfile\index.php on line 84

Welche enthält:
PHP:
elseif (!isset($_SESSION['sprache'])) $_SESSION('sprache')= 'd';
 
Zuletzt bearbeitet:
So und noch nen Update :)

Mit msslovi0s Script funktioniert das nun mit dem umschalten wunderbar, allerdings bekomme ich jetzt IN der Datei oben folgende Fehlermeldungen:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Programme\xampp\htdocs\testfile\index.php:9) in C:\Programme\xampp\htdocs\testfile\index.php on line 72

Warning: session_start() [function.session-start]: Cannot send cache limitier - headers already sent by (output started at C:\Programme\xampp\htdocs\testfile\index.php:9) in C:\Programme\xampp\htdocs\testfile\index.php on line 72

in Zeile 72 steht:
PHP:
session_start();

Muss ich irgendwo ein "session_end();" einbauen? Hört sich eher kontraproduktiv an.
 
Hallo DieTa,

DieTa schrieb:
...
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Programme\xampp\htdocs\testfile\index.php:9) in C:\Programme\xampp\htdocs\testfile\index.php on line 72
..
besagt, dass du als aller erstes das session_start ausführen musst. Vor jeglicher anderen Ausgabe. Also am besten ganz oben in die Datei, in die erste Zeile ohne Leerzeilen, Leerzeichen oder sonstiges schreiben, z.B. so
<?php session_start(); ?>
 
Ich fall vom Glauben ab! Das wars!

Danke! Vielen vielen dank an Euch alle! :D
 
DieTa schrieb:
---- KORREKTUR ----

Ja, es ist schon noch ziemlich früh am Morgen - ich hatte die Dateien nicht im HTDOCS sondern auf dem Desktop liegen, dann kann PHP natürlich NICHT funktionieren.

Allerdings bekomme ich nun (nach verschieben in das richtige Verzeichnis folgender Fehlermeldung:
Fatal error: Can't use function return value in write context in C:\Programme\xampp\htdocs\testfile\index.php on line 84

Welche enthält:
PHP:
elseif (!isset($_SESSION['sprache'])) $_SESSION('sprache')= 'd';
$_SESSION['sprache'] wäre richtig gewesen.

Kleiner Tipp: setz mal error_reporting(E_ALL) an den Anfang deines Scripts, dann musst du nicht so lange nach möglichen Fehlern suchen.
 
Zurück
Oben Unten