Template Instance

Gesperrt
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Template Instance

Beitrag von MyAccount »

Hallo,

ich versuche mich gerade darin, die Servicenavigation mit einem Template aus dem Ordern /templates/ zu schmücken. :-)

Bei der Hauptnavigation funktioniert das ja wunderbar, aber ich finde mich in der Output-Datei der Hauptnavigation nicht wirklich zurecht. Sind zuviele while{} und foreach{}-Schleifen, als das ich wirklich was erkennen würde.

Code: Alles auswählen

/* Include Template Class */
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');

/**
 * Array storing alle the
 * navigation data
 */
$navitems = array();


/* Template Instance */
$tpl = new Template;
Das hier und das

Code: Alles auswählen

foreach ($navitems as $key => $data) {

    $tpl->reset();
    $tpl->set('d', 'NAME',  $data['name']);
    $tpl->set('d', 'TARGET', $data['target']);
    $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
    $tpl->next();

    if ($idcat == $data['idcat'] || is_array($data['sub'])) {
        $tpl->generate('templates/service_on.html');
    } else {
        $tpl->generate('templates/service_off.html');
    }

einfach in die Output der Servicenavigation kopiert, bringt nicht wirklich was. Wer kann mir da weiterhelfen? Wie sollte der genaue Ablauf aussehen? Vielleicht hab ich nur die Anleitung nicht gefunden? :lol: Dann wäre ich über einen Hinweis sehr erfreut.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

eine beschreibung hab ich da mal geposted:
-> http://www.contenido.de/forum/viewtopic.php?t=3569
*** make your own tools (wishlist :: thx)
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Danke emergence,

wie immer eine echte Freude. Ich hab deine Beschreibung gelesen. Das mit dem 's' für statisch und 'd' für dynamisch habe ich aber leider nicht ganz verstanden, kann mir aber vorstellen, was du meinst. Die Hauptnavigation durchläuft das Template mehrfach und deswegen braucht man das 'd'! :lol:

Wann aber brauche ich denn ein 's'? Hast du vielleicht ein sinnvolles Beispiel.

Wie auch immer, das mit dem Templates ist schon klar, aber ich weiß nicht, wie ich das hinbekommen soll.

Wie bekomme ich die Daten aus der Servicenavigations-Datenbank-Abfrage in die Template{NAME}-Variablen wie es in der Hauptnavigation auch gemacht wird? Bei mir wird komischerweise der erste Punkt der Servicenavigation 2mal angezeigt und dann der Rest der Servicenavigation je einmal.

Gibt es dazu auch eine Anleitung? Ich glaube das liegt an den Schleifen.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

MyAccount hat geschrieben:wie immer eine echte Freude.
:roll: erwecke ich wirklich diesen eindruck... ?
MyAccount hat geschrieben:Ich hab deine Beschreibung gelesen. Das mit dem 's' für statisch und 'd' für dynamisch habe ich aber leider nicht ganz verstanden, kann mir aber vorstellen, was du meinst. Die Hauptnavigation durchläuft das Template mehrfach und deswegen braucht man das 'd'! :lol:
nun, da ich nicht weiss wie du es dir vorstellst kann ich dir weder zustimmen noch widersprechen....
MyAccount hat geschrieben:Wann aber brauche ich denn ein 's'? Hast du vielleicht ein sinnvolles Beispiel.
hmm... etwas sinnvolles...

stell dir vor du möchtest eine einfache tabelle mit x-beliebigen werten unter einander stehen haben... kopf und fusszeile der tabelle sollen aber fixiert sein... dann könnte das so aussehen

zb

Code: Alles auswählen

<table><tr><td colspan="3">{HEAD}<td><tr>
<!-- BEGIN:BLOCK --> 
<tr><td>{EINS}</td><td>{ZWEI}</td><td>{DREI}</td></tr>
<!-- END:BLOCK -->
<tr><td colspan="3">{BOTTOM}<td><tr>
</table>
{HEAD} belegst du einmal mittels $tpl->set('s', 'HEAD', "MEIN KOPF");
{BOTTOM} belegst du einmal mittels $tpl->set('s', 'BOTTOM', "DER ABSCHLUSS");

die werte innerhalb von block werden in einer schleife pro zeile mittels
$tpl->set('d', 'EINS', $var1);
$tpl->set('d', 'ZWEI', $var2);
$tpl->set('d', 'DREI', $var3);
definiert...
für die nächste zeile wird einfach $tpl->next(); definiert (bezieht sich nur auf 'd' werte)

ausgegeben wird das ganze dann mittels
$tpl->generate('templates/TEMPLATE.html');
eine zuweisung in eine variable ist mittels zb
$html = $tpl->generate('templates/TEMPLATE.html', 1);
möglich...
MyAccount hat geschrieben:Gibt es dazu auch eine Anleitung?

leider keine die ich kennen würde...

was man jetzt daraus macht, bleibt jeden selbst überlassen...
*** make your own tools (wishlist :: thx)
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Ja,

Deine Postings sind immer kompetent und, im Gegensatz zu meinen, auf das Wesentliche begrenzt. Deswegen ist es immer eine Freude. :-)

Deine Erklärung mit {HEAD}, {EINS}, usw... habe ich begriffen. Danke. Ich werde mir mal die Hauptnavigation mit einer 4. Ebene aufbauen. Da werde ich wohl so tief in den Code schauen müssen, dass ich die Schleifen für die Servicenavigation wohl mit der Zeit auch hinbekommen werden. hehe
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Ist zwar schon eine Weile her, passt aber genau hier hin.

Code: Alles auswählen

{NEWSHEAD}
<br />
<!-- BEGIN:BLOCK -->
<a href="{HREF}">{HEAD}</a>
<br />
<!-- END:BLOCK -->
Den {NEWSHEAD} habe ich statisch definiert.

Code: Alles auswählen

        $tpl->reset();
        $tpl->set('s', 'NEWSHEAD',  $newshead);
        $tpl->set('d', 'HEAD',  urldecode($head));
        $tpl->set('d', 'HREF',  $link);
        $tpl->next();

        $tpl->generate('templates/news.html');
Geht aber trotzdem nicht. Die NEWSHEAD wird auch mit wiederholt.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

wie sieht den der gesammte output aus ?
du hast vermutlich nen fehler in deiner schleife...
*** make your own tools (wishlist :: thx)
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Komme gerade nicht an das Skript ran. :-) Werde Dir das dann per PM schicken, OK?

Danke schon mal
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ehrlich gesagt wäre mir forum lieber...
ist nicht gesagt das ich die antwort kenne... vielleicht findets jemand anderes zuerst...
*** make your own tools (wishlist :: thx)
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Hat eine Weile gedauert, was?! Sorry.

Code: Alles auswählen

<?php
/* Include Template Class */
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');

/* Template Instance */
$tpl = new Template;

// second db class instance
$db2 = new DB_Contenido;

// selected category
$selcat = "CMS_VALUE[0]";

 if($selcat!="0" && $selcat!=""){

// select all articles in category widthout start article
$query = "SELECT
            ARTLANG.idart,
            ARTLANG.idartlang
          FROM
            ".$cfg["tab"]["cat_art"]." AS CATART, ".
              $cfg["tab"]["art_lang"]." AS ARTLANG ".
          "WHERE
            CATART.idcat = '$selcat'
            AND
            ARTLANG.idart = CATART.idart
            AND
            ARTLANG.idlang = '$lang'
            AND
            "."ARTLANG.online = '1'
          ORDER BY  CATART.idart ASC LIMIT 0,8";

// execute query
$db->query($query);

unset($articleID);
unset($linkID);

// get id's of sub articles
while ($db->next_record()) {
  $articleID[] = $db->f("idartlang");
  $linkID[] = $db->f("idart");
} // end while

// loop through subarticles

$newshead = "CMS_VALUE[2]";

if (is_array($articleID)) {

    foreach ($articleID as $key => $value) {

          // select all CMS variables of the article
          $sql = "SELECT *                   
                  FROM ".$cfg["tab"]["content"]."
                  WHERE idartlang = '$value'
                    AND idtype = '1' AND typeid = '8'";
          $db->query($sql);
          $db->next_record();
          $newstext = $db->f("value");

          if ( strlen($head) > "CMS_VALUE[3]") {
            $newstext = substr($newstext, 0, "CMS_VALUE[3]");
            $newstext .= '..';
          }


        /* Für Template ergänzt */
        
        $tpl->reset();
        $tpl->set('s', 'NEWSHEAD',  $newshead);
        $tpl->set('d', 'NEWSTEXT',  urldecode($newstext));
        $tpl->set('d', 'HREF',  $sess->url(strtolower(str_replace (array("Ä", "Ö", "Ü", "ä", "ö", "ü", "ß", " ", ".", ":", ",", ";", "!", "?"), array("Ae", "Oe", "Ue", "ae", "oe", "ue", "ss", "_", "", "", "", "", "", ""),$newshead)).'_'.$client.'_'.$lang.'_'.$selcat.'_'.$linkID[$key].'.html'));
        $tpl->next();

        $tpl->generate('templates/news.html');

    } // end while


        unset($newshead);
        unset($newstext);
        
    } // end foreach
    
} // end if (is_array)

?>
$tpl->reset();
$tpl->set('s', 'NEWSHEAD', $newshead);


Den Teil daraus, hab ich mal innerhalb der Schleife und mal ganz oben gehabt. Spielt keine Rolle. Die Ausgabe wird falsch.
Das ist das Template:

Code: Alles auswählen

{NEWSHEAD}
<!-- BEGIN:BLOCK -->
<p><a class="newsticker" href="{HREF}">{NEWSTEXT}</a></p>
<!-- END:BLOCK -->
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm ganz auf die schnelle, sollte gehen...
meine anmerkungen hab ich im code ergänzt... vielleicht ist es so hilfreicher...

Code: Alles auswählen

<?php 
/* Include Template Class */ 
include_once($cfg["path"]["contenido"] . 'classes/class.template.php'); 

/* Template Instance */ 
$tpl = new Template; 

// second db class instance 
$db2 = new DB_Contenido; 

// selected category 
$selcat = "CMS_VALUE[0]"; 

if($selcat!="0" && $selcat!=""){ 

// select all articles in category widthout start article 
$query = "SELECT 
            ARTLANG.idart, 
            ARTLANG.idartlang 
          FROM 
            ".$cfg["tab"]["cat_art"]." AS CATART, ". 
              $cfg["tab"]["art_lang"]." AS ARTLANG ". 
          "WHERE 
            CATART.idcat = '$selcat' 
            AND 
            ARTLANG.idart = CATART.idart 
            AND 
            ARTLANG.idlang = '$lang' 
            AND 
            "."ARTLANG.online = '1' 
          ORDER BY  CATART.idart ASC LIMIT 0,8"; 

// execute query 
$db->query($query); 

unset($articleID); 
unset($linkID); 

// get id's of sub articles 
while ($db->next_record()) { 
  $articleID[] = $db->f("idartlang"); 
  $linkID[] = $db->f("idart"); 
} // end while 

// loop through subarticles 

$newshead = "CMS_VALUE[2]"; 

if (is_array($articleID)) { 

    $tpl->reset(); // ein reset in der schleife setzt den zähler jedesmal auf 0
    $tpl->set('s', 'NEWSHEAD',  $newshead); // der statische teil muss nicht in der schleife stehen...

    foreach ($articleID as $key => $value) { 

          // select all CMS variables of the article 
          $sql = "SELECT *                    
                  FROM ".$cfg["tab"]["content"]." 
                  WHERE idartlang = '$value' 
                    AND idtype = '1' AND typeid = '8'"; 
          $db->query($sql); 
          $db->next_record(); 
          $newstext = $db->f("value"); 

          if ( strlen($head) > "CMS_VALUE[3]") { 
            $newstext = substr($newstext, 0, "CMS_VALUE[3]"); 
            $newstext .= '..'; 
          } 


        /* Für Template ergänzt */ 
        
        $tpl->set('d', 'NEWSTEXT',  urldecode($newstext)); 
        $tpl->set('d', 'HREF',  $sess->url(strtolower(str_replace (array("Ä", "Ö", "Ü", "ä", "ö", "ü", "ß", " ", ".", ":", ",", ";", "!", "?"), array("Ae", "Oe", "Ue", "ae", "oe", "ue", "ss", "_", "", "", "", "", "", ""),$newshead)).'_'.$client.'_'.$lang.'_'.$selcat.'_'.$linkID[$key].'.html')); 
        $tpl->next(); // für jedes dynamische element den zähler eins raufsetzen

    } // end while 

        unset($newshead); 
        unset($newstext); 
        
    } // end foreach 

    $tpl->generate('templates/news.html'); // erst nach der foreach schleife erfolgt die ausgabe...
    
} // end if (is_array) 

?>
*** make your own tools (wishlist :: thx)
MyAccount
Beiträge: 383
Registriert: Do 17. Jul 2003, 10:21

Beitrag von MyAccount »

Einfach super. Danke

Ehrlich gesagt, keine Ahnung, warum ich das falsch gemacht hatte. Deine Kommentare im Code sind mir eigentlich bekannt. ;-)

Wahrscheinlich zu wenig Schlaf, was?!
Gesperrt