Seite 4 von 4 ErsteErste 1234
Ergebnis 61 bis 80 von 288

Thema: Allgemeiner Fragenthread II

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moin moin,

    ich hab n leichtes Problem mit einem Template System.
    Und zwar habe ich eine Anzahl von zu ersetzenden Wörtern in einem Array stehen, und weis nicht wie ich die Wörter nacheinander im template file ersetzen kann. Ich hab das testweise erstmal ohne template datei mit einem kurzen text in ner variable gemacht.

    l_de_main.php
    PHP-Code:
    <?php
    // Deutsch Hauptseite
             
    $l_de_main = array();
             
    $l_de_main['{$TITLE}'] = "Testwebsite";
             
    $l_de_main['{$WELCOME}'] = "Willkommen auf der Website";
             
    print_r($l_de_main);
    ?>
    index.php
    PHP-Code:
    <?php
    //startseite
    include "lang/l_de_main.php";
    $satz "Dies ist {$TITLE}, betaseite. {$WELCOME}!";
    $content str_replace($l_de_main$l_de_main$satz);
    echo 
    $content;
    ?>
    Ich weis schonmal dass "$content = str_replace($l_de_main, $l_de_main, $satz);" falsch ist, weis nicht wie ich das loesen kann.

    Edit: Eine Lösung wäre, dass ich 2 Arrays mache und die miteinander abgleiche, aber das wäre ein ziemlicher Mehraufwand.
    Ich hab auch schon überlegt die Satzteile in einer Datenbank zu speichern. Ich bin mir aber nicht sicher was effektiver ist, mysql tabelle oder datei.

    Geändert von rgb (10.09.2010 um 11:07 Uhr)

  2. #2
    Ich hab's einmal in einem professionellen CMS so gesehen:
    $content = str_replace(array_keys($l_de_main), array_values($l_de_main), $satz);
    Sollte funktionieren.

  3. #3
    Danke, ich hab es mal ausprobiert, funktioniert aber leider nicht.
    Ich hab es auch mal über umwege versucht, aber wenn ich die array keys bzw values in index.php ausgebe steht da nur 'Array'

    index.php
    PHP-Code:
    <?php
    //startseite
    include "lang/l_de_main.php";
    $satz "Dies ist {$TITLE}{$WELCOME}!";
    $l_de_mainkeys array_keys($l_de_main);
    echo 
    $l_de_mainkeys;
    echo 
    "<br>";
    $l_de_mainvalues array_values($l_de_main);
    echo 
    $l_de_mainvalues;
    echo 
    "<br>";
    $content str_replace($l_de_mainkeys$l_de_mainvalues$satz);
    echo 
    $content;
    ?>
    l_de_main.php
    PHP-Code:
    <?php
    // Deutsch Hauptseite
             
    $l_de_main = array();
             
    $l_de_main['{$TITLE}'] = "Testwebsite";
             
    $l_de_main['{$WELCOME}'] = "Willkommen";
             
    print_r(array_keys($l_de_main));
             echo 
    "<br>";
             
    print_r(array_values($l_de_main));
             echo 
    "<br>";
    ?>
    Die Ausgabe ist wie folgt:
    Zitat Zitat
    Array ( [0] => {$TITLE} [1] => {$WELCOME} )
    Array ( [0] => Testwebsite [1] => Willkommen )
    Array
    Array
    Dies ist . !

  4. #4
    Klappt nicht weil:
    PHP-Code:
    $satz "Dies ist {$TITLE}{$WELCOME}!"
    hat doppelte Anführungszeichen, dadurch wird {$TITLE} durch den Wert der PHP Variable $TITLE ersetzt.
    Lösungsmöglichkeit 1: ' verwenden.

    Lösungsmöglichkeit 2: Smarty verwenden. (hat genau diese Syntax, unterstützt aber auch Funktionen und Methoden )

    Lösungsmöglichkeit 3:
    Etwas wie folgendes:
    PHP-Code:
    <?php
    function displayTemplate($templateFile$vars){
      foreach(
    $vars as $key => $value){
        $
    $key $value;
      }
      require(
    $templateFile);
    }
    $l_de_main = array();
    $l_de_main['title'] = 'test';
    displayTemplate('main.tpl'$l_de_main);

    ?>

    // main.tpl :

    Dies ist <?php echo $title?>

    Geändert von Drakes (10.09.2010 um 16:37 Uhr)

  5. #5
    Hi,

    danke habs mittlerweile schon hinbekommen, indem ich eben die Variablen Namen geändert habe und die Arrays anders erstelle.
    Allerdings wurde ich auch schon woanders darauf hingewiesen, ein fertiges template system zu verwenden, was ich aber eigentlich nicht möchte, sich wohl aber nicht vermeiden lässt, weil selber schreiben scheint zu kompliziert.
    Allerdings auf keinen Fall mehr smarty, das habe ich vorher benutzt und war sehr unzufrieden. Kann mir jemand ein anderes template system empfehlen?

    Edit: Hier noch der Weg wie ich das Problem gelöst habe, die Werte werden nun Außerdem aus einer Datenbank ausgelesen.
    PHP-Code:
    <?php
    //startseite
    $site "main";

    include 
    "config.php";

    $satz "Dies ist L_MAIN_TITLE. L_MAIN_WELCOME!";

    //Datenbankabfrage nach Sprachvariablen

    $lang_query mysql_query("SELECT `langvar`, `varcont` FROM `bg_l_de` WHERE `site` = '$site'");
    $lv = array();
    $vc = array();
    while(
    $langrow mysql_fetch_assoc($lang_query))
    {
             
    $lv[] = $langrow['langvar'];
             
    $vc[] = $langrow['varcont'];
    }

    //Template Ausgabe
    $content str_replace($lv$vc$satz);
    echo 
    $content;
    ?>

  6. #6
    Zitat Zitat
    Code:
      foreach($vars as $key => $value){
        $$key = $value;
      }
    Kann man auch einfacher machen mit der extract-Funktion.

    Allerdings finde ich PHP-Templates persönlich extrem unübersichtlich.

    Edit:
    Dieses Template-System habe ich die Tage gefunden und finde es eig. ziemlich cool:
    http://www.twig-project.org/

  7. #7
    Ich verstehe nicht, warum du nicht einfach das Array durchiterierst und bei jedem Durchgang die Ersetzen-Funktion aufrufst? Oder auf die DB-Lösung angewandt:
    PHP-Code:
    <?php
    $content 
    "Dies ist L_MAIN_TITLE. L_MAIN_WELCOME!";

    $lang_query mysql_query("SELECT `langvar`, `varcont` FROM `bg_l_de` WHERE `site` = '$site'");

    while (
    $langrow mysql_fetch_assoc($lang_query))
    {
        
    $content str_replace($langrow['langvar'],
                               
    $langrow['varcont'],
                               
    $content);
    }

    echo 
    $content;
    ?>
    Ich bin schon unheimlich lange aus PHP draußen, deshalb nicht schimpfen, wenn ich da irgendwas falsch verstanden habe. (;

    Mal nebenbei bemerkt: Ich würde nicht für jede Sprache eine eigene Tabelle benutzen, sondern einfach ein Feld mit der Info. Der Primärschlüssel setzt sich dann aus Sprache und Ersetzungsmuster zusammen.

  8. #8
    Hi,

    ich code gerade eine einfach Seite in Html und css, dabei hab ich nun folgendes Problem,
    die Seite soll 3 Spalten besitzen.

    Code (CSS):
     
    #content {
    	width:980px;
    	height: 100%;
    	background-color: #FFF2DA;
     
    }
     
    #box1 {
    	float: left;
    	width: 200px;
    	height: 100%;
    	text-align:left;
    	background-color: #FFF2DA;
    }
     
    #box2 {
    	float: left;
    	width: 580px;
    	height: 100%;
    	text-align:left;
    	background-color: #FFF2DA;
    }
     
    #box3 {
    	float: right;
    	width: 200px;
    	height: 100%;
    	text-align:left;
    	background-color: #FFF2DA;
    }
     


    HTML-Code:
     <div id="content">
    			<div id="box1">
                             Das ist die Linke Spalte.
                            </div> 
    			<div id="box2">
    			Das ist die mittlere Spalte	         
                            </div>
                            <div id="box3">
                	        Das ist die rechte Spalte.
                            </div>
    </div>
    Mein Problem besteht dadrin, dass wenn ich in die "mittlere Spalte" , einen sehr langen Text schreibe, das die seitlichen Spalten sich von der Höhe nicht anpassen, weswegen ich mir überlegt habe, einfach den umschließenden div, in diesem Fall "content" einfach die gleiche Background Farbe zu geben, aber irgendwie hat, das immernoch keine Auswirkung.

    Um mein Problem besser zu veranschaulichen hier ein Screen.

  9. #9
    Floating divs haben die Angewohnheit, auch über die Größen des Elternelements zu gehen. Mach ganz zum Schluss ein <div style="clear: both;"></div> hin, dann passts.

  10. #10
    Danke, hat geklappt

  11. #11
    Moin,

    bräuchte mal Hilfe mit meinem neuen Design.
    Und zwar möchte ich es vermeiden, der content-div box eine feste größe zuzuweisen. Aber da in dieser Box bis auf weiter boxen kein Inhalt wie text steht, taucht die box garnicht erst auf wenn ich keine feste Größe zuweise, hat jemand eine Idee?

    http://www.rdn-online.com/hosted/test/index.html
    HTML-Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
             <meta http-equiv="content-type" content="text/html; charset=utf-8" />
             <title>Band Layout</title>
             <style type="text/css">
                     #background {
                             position: fixed;
                             left: 0px;
                             top: 0px;
                             width: 100%;
                             height: 100%;
                             background-image: url(images/hintergrund_kachel.jpg);
                             background-repeat: repeat-y;
                     }
                     #center {
                             width: 1000px;
                             top: 0px;
                             bottom: 0px;
                             background: #000000;
                             border: 1px solid #000000;
                             margin: 0 auto;
                     }
                     #header {
                             position: relative;
                             top: 0px;
                             bottom: 0px;
                             height: 205px;
                             background-image: url(images/header.png);
                             background-repeat: no-repeat;
                             z-index: 101;
                     }
                     #content {
                             position: relative;
                             background-color: transparent;
                             color: #FFFFFF;
                             top:0px;
                             bottom: 0px;
                             z-index: 101;
                     }
                     #band1 {
                             position: absolute;
                             left: 10px;
                             top: 10px;
                             width: 440px;
                             height: 300px;
                             background-color: transparent;
                             background-image: url(images/pics.png);
                             background-repeat: no-repeat;
                             z-index: 101;
                     }
                     #band2 {
                             position: absolute;
                             right: 10px;
                             top: 10px;
                             width: 440px;
                             height: 300px;
                             background-color: transparent;
                             background-image: url(images/band.png);
                             background-repeat: no-repeat;
                             z-index: 101;
                     }
                     #band3 {
                             position: absolute;
                             left: 10px;
                             bottom: 10px;
                             width: 440px;
                             height: 300px;
                             background-color: transparent;
                             background-image: url(images/dates.png);
                             background-repeat: no-repeat;
                             z-index: 101;
                     }
                     #band4 {
                             position: absolute;
                             right: 10px;
                             bottom: 10px;
                             width: 440px;
                             height: 300px;
                             background-color: transparent;
                             background-image: url(images/blog.png);
                             background-repeat: no-repeat;
                             z-index: 101;
                     }
                     #footer {
                             position: relative;
                             background: #b7d84b;
                             top:0px;
                             bottom: 0px;
                             height: 20px;
                             color: #008000;
                             z-index: 101;
                     }
    div.box {
         border: 1px solid #000000;
         position: relative;
         width: 1000px;
         margin: 0 auto;
    }
    div.box_contents {
         background-color:transparent;
         color: #FFFFFF;
         height: 650px;
         position: relative;
         width: 100%;
         z-index: 101;
    }
    div.box_background {
         background-color: #000000;
         height: 100%;
         filter:alpha(opacity=60);
         left: 0px;
         opacity: 0.60;
         position: absolute;
         top: 0px;
         width: 100%;
         z-index: 99;
    }
             </style>
    </head>
    <body>
             <div id="background"></div>
             <div class="box" id="box">
                     <div class="box_background"> </div>
                     <div id="header"></div>
                     <div class="box_contents">
                             <div id="band1"></div>
                             <div id="band2"></div>
                             <div id="band3"></div>
                             <div id="band4"></div>
                     </div>
                     <div id="footer">Copyright blabla</div>
             </div>
    </body>
    </html>
    Dann habe ich noch eine Frage bzgl.
    HTML-Code:
    <html xmlns="http://www.w3.org/1999/xhtml">
    Und zwar verstehe ich nicht so richtig was es mit diesem xmlns="..." auf sich hat, der Validator hat mir das so vorgeschlagen und ich habe mir das alles durchgelesen was da stand aber den Sinn doch nicht verstanden, kann jemand das einfach erläutern?

    Geändert von rgb (12.04.2012 um 21:28 Uhr)

  12. #12
    Ich weiß gar nicht, wo man da am Besten anfangen kann, da dort doch recht viele Fehler drinnen sind.
    Ich hab mal auf die Schnelle die Webseite nachgebastelt. Das liegt im Anhang als Zip-Datei.

    Transparenz ist noch so ne Sache. Da kann man lieber auf einen alten Trick zurückgreifen:
    Man nehme eine .png Datei, die 1x1 Pixel groß ist, mit einem Alpha-Kanal und benutzt dieses als Hintergrund.

    Diese ganze z-index Geschichte braucht man auch nicht und band1, band2, ... kann man auch zusammenfassen.

    (Muss aber zugeben, dass meine Kenntnisse ein wenig eingerostet sind, da ich kein Bock mehr auf diesen Mist Webentwicklung habe)

    xmlns heißt "XML Namespace". Um das zu verstehen, muss man wissen, dass HTML auf XML basiert. Der Namespace wird verwendet, um das Vokabular eindeutig zu identifizieren.
    Alle Elemente zwischen den Element-Paar <html> gehören in deinem Fall zum Namensraum "xhtml". Namensräume werden aber erst wichtig, wenn man mehrere XML-Sprachen mischen möchte. Es gibt ja mehr Sprachen, als nur HTML, die auf XML basieren. Ein Problem, was nämlich auftauchen kann, wenn man zwei Sprachen mischen möchte, die teilweise die selben Elementnamen besitzen. Ein Parser hätte Probleme, die Elemente richtig der Sprache zuzuordnen.
    Mit diesem Namespace-Mechanismus hätte man nun die Möglichkeit, die Sprachen von einander zu trennen.
    Angehängte Dateien

    Geändert von Whiz-zarD (13.04.2012 um 19:30 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •