das ist mir vom Prinzip her klar, aber ich spreche nur wenig PHP und weiß deshalb nicht, wie ich welchen Code wo platziere. Sprich: Ich brauch den Code angepasst

Gruß,
Ayshe
Code: Alles auswählen
<?php
/********************************************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Hauptnavigation
* Author(s) : Jan Lengowski, Andreas Lindner, 4fb
* Copyright : Contenido - four for business, Andreas Lindner
* Created : 12.08.2005
* Modifier : Oliver Simon, simon-oliver.com
* Modified : 27.11.2005
*********************************************************************/
#System properties in use:
#Type: navigation, Name: idcat_homepage
#Contains idcat of tree to be displayed in main navigation
#Includes
cInclude("frontend", "includes/functions.navigation.php");
#If no tree is selected, use client setting
$start_cat = "CMS_VALUE[0]";
if ($start_cat=='') {
$cApiClient = new cApiClient($client);
$start_cat = $cApiClient->getProperty('navigation','idcat_homepage');
}
if ( !is_object($db2) ) {
$db2 = new DB_Contenido;
}
/**
* Check if a category is child
* of another category
*
* @return boolean true/false
* @author Jan Lengowski <Jan.Lengowski@4fb.de>
* @copyright four for business AG 2003
*/
function catIsChildOf($id, $idparent) {
global $cfg, $client, $lang;
$db = new DB_Contenido;
$parent = $id;
while ( $parent != 0 ) {
$sql = "SELECT
a.parentid
FROM
".$cfg["tab"]["cat"]." AS a,
".$cfg["tab"]["cat_lang"]." AS b
WHERE
a.idclient = '".$client."' AND
b.idlang = '".$lang."' AND
a.idcat = b.idcat AND
a.idcat = '".$parent."'";
$db->query($sql);
$db->next_record();
$parent = $db->f("parentid");
if ($parent == $idparent) {
return true;
}
}
return false;
}
if ( catIsChildOf($idcat, $start_cat) ) {
$sel_idcat = $idcat;
} else {
$sel_idcat = $start_cat;
}
/* 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;
/**
* Recursive function for creating
* the navigation array
* @param Int $idcat Category id
*/
function nav($idcat) {
global $navitems, $client, $lang, $cfg, $start_cat;
$db = new DB_Contenido;
$db2 = new DB_Contenido;
$sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat = '$idcat'";
$db->query($sql);
$db->next_record();
$parentid = $db->f("parentid");
if ( $parentid == 0 ) {
if ( $idcat != $start_cat ){
$navitems = array();
$sql = "SELECT
A.idcat,
C.name,
C.public,
C.idcatlang
FROM
".$cfg["tab"]["cat_tree"]." AS A,
".$cfg["tab"]["cat"]." AS B,
".$cfg["tab"]["cat_lang"]." AS C
WHERE
A.idcat = B.idcat AND
B.idcat = C.idcat AND
B.idclient = '$client' AND
C.idlang = '$lang' AND
C.visible = '1' AND
B.parentid = '".$start_cat."'
ORDER
BY A.idtree";
$db->query($sql);
while ($db->next_record()) {
/* Check for external redirects... */
$sql = "SELECT
a.external_redirect AS ext,
a.idartlang AS idartlang
FROM
".$cfg["tab"]["art_lang"]." AS a,
".$cfg["tab"]["cat_art"]." AS b,
".$cfg["tab"]["cat"]." AS c
WHERE
b.idcat = '".$db->f("idcat")."' AND
c.idclient = '".$client."' AND
c.idcat = b.idcat AND
a.idart = b.idart AND
a.idlang = '".$lang."'";
$db2->query($sql);
$flag = false;
while ($db2->next_record()&&!$flag) {
if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
{
$flag = true;
$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
$navitems[$db->f("idcat")] = array("idcat" => $db->f("idcat"),
"name" => htmldecode($db->f("name")),
"target" => $target,
"public" => $db->f("public"),
"idcatlang" => $db->f("idcatlang"));
}
}
}
}
return true;
}
$sql = "SELECT
A.idcat,
C.name,
C.public,
C.idcatlang
FROM
".$cfg["tab"]["cat_tree"]." AS A,
".$cfg["tab"]["cat"]." AS B,
".$cfg["tab"]["cat_lang"]." AS C
WHERE
A.idcat = B.idcat AND
B.idcat = C.idcat AND
B.idclient = '$client' AND
C.idlang = '$lang' AND
C.visible = '1' AND
B.parentid = '$parentid'
ORDER BY
A.idtree";
$db->query($sql);
while ($db->next_record()) {
/* Check for external redirects... */
$sql = "SELECT
a.external_redirect AS ext,
a.idartlang AS idartlang
FROM
".$cfg["tab"]["art_lang"]." AS a,
".$cfg["tab"]["cat_art"]." AS b,
".$cfg["tab"]["cat"]." AS c
WHERE
b.idcat = '".$db->f("idcat")."' AND
c.idclient = '".$client."' AND
c.idcat = b.idcat AND
a.idart = b.idart AND
a.idlang = '".$lang."'";
$db2->query($sql);
$flag = false;
while ($db2->next_record() && !$flag) {
if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
{
$flag = true;
$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
$tmp_nav[$db->f("idcat")] = array("idcat" => $db->f("idcat"),
"name" => htmldecode($db->f("name")),
"public" => $db->f("public"),
"idcatlang" => $db->f("idcatlang"),
"target" => $target);
}
}
}
$tmp_nav[$idcat]["sub"] = $navitems;
$navitems = $tmp_nav;
/* Function call */
nav($parentid);
} // end function
$sql = "SELECT
A.idcat,
C.name,
C.public,
C.idcatlang
FROM
".$cfg["tab"]["cat_tree"]." AS A,
".$cfg["tab"]["cat"]." AS B,
".$cfg["tab"]["cat_lang"]." AS C
WHERE
A.idcat = B.idcat AND
B.idcat = C.idcat AND
B.idclient = '$client' AND
C.idlang = '$lang' AND
C.visible = '1' AND
B.parentid = '$sel_idcat'
ORDER BY
A.idtree";
$db->query($sql);
while ( $db->next_record() ) {
/* Check for external redirects... */
$sql = "SELECT
a.external_redirect AS ext,
a.idartlang AS idartlang
FROM
".$cfg["tab"]["art_lang"]." AS a,
".$cfg["tab"]["cat_art"]." AS b,
".$cfg["tab"]["cat"]." AS c
WHERE
b.idcat = '".$db->f("idcat")."' AND
c.idclient = '".$client."' AND
c.idcat = b.idcat AND
a.idart = b.idart AND
a.idlang = '".$lang."'";
$db2->query($sql);
#$db2->next_record();
$flag = false;
while ($db2->next_record()&&!$flag) {
if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
{
$flag = true;
$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
$navitems[$db->f("idcat")] = array("idcat" => $db->f("idcat"),
"name" => htmldecode($db->f("name")),
"public" => $db->f("public"),
"idcatlang" => $db->f("idcatlang"),
"target" => $target);
}
}
}
/* Create Navigation Array */
if(($sel_idcat=='')||($sel_idcat=='0')){
$cApiClient = new cApiClient($client);
$sel_idcat = $cApiClient->getProperty('navigation', 'idcat_homepage');
}
nav($sel_idcat);
/* Start Output buffer */
ob_start();
foreach ($navitems as $key => $data) {
/* 1. Navigation level */
if (checkCatPermission($data['idcatlang'],$data['public'])) {
$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']) {
$tpl->generate('templates/navfirst_on.html');
}elseif(is_array($data['sub'])){
$tpl->generate('templates/navfirst_open.html');
} else {
$tpl->generate('templates/navfirst_off.html');
}
} // end if
} // end foreach
/* Read out buffer */
$html = ob_get_contents();
/* Clean buffer */
ob_end_clean();
/* Output buffer-contents */
echo $html;
?>
Code: Alles auswählen
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat'].'&lang='.$lang));
Code: Alles auswählen
<meta http-equiv="expires" content="0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="pragma" content="no-cache" />
Code: Alles auswählen
<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>
Code: Alles auswählen
<?php
/***** Browsercache abschalten****************************************/
echo '<meta http-equiv="cache-control" content="no-cache"/>'; echo "\n";
echo '<meta http-equiv="expires" content="-1"/>'; echo "\n";
?>
Hallo, ich hatte auch ziemliche Probleme mit dem Sprachwechsel.<meta http-equiv="expires" content="0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="pragma" content="no-cache" />
Hallo Herr B.HerrB hat geschrieben: cache-control ist eine Anweisung an den Proxy (wenn vorhanden) und den Browser, ob die Seite gecached werden soll. Die Seite an sich wird dadurch nicht langsamer - nur wird sie vom Browser jedesmal angefordert (anstatt dem Nutzer die lokal gespeicherte Version im Cache zu zeigen).
Heißt dann im Umkehrschluss wohl auch das die Cache-Controll nicht funktioniert bei gleicher URL?HerrB hat geschrieben: Das man die Veränderung nicht sieht, liegt nach wie vor daran, dass der Browser die Seite bereits im Cache hat. Er erkennt halt nicht, dass sich was ändert, da sich die URL nicht ändert. Das das mit &lang=x anders ist, ist klar, da es für den Browser eine neue URL ist.
Wenn das bedeutet das ich jedes Mal den Cache vor bzw. nach einem Sprachwechsel leeren soll / muss, ist das keine sehr erfreunliche Antwort.HerrB hat geschrieben: Das kann man leicht testen: Eine Seite in einer Sprache aufrufen, Sprache umstellen, Cache löschen und Seite nochmal öffnen - sie wird die Sprache wechseln und alle anderen Seiten auch, da sie nicht mehr im Cache zur Verfügung stehen und frisch geladen werden.
Gern.Sorry, aber ich glaube da gibt es noch Klärungs-
öhm, weiß nich'. Zumindest nicht bei Contenido.und Optimierungsbedarf.
Welche Angaben er nun tatsächlich verwendet, um festzustellen, dass es sich um eine aktualisierte Seite handelt, werden im Detail nur die Entwickler wissen - Dateigröße, Serverheader, Änderungsdatum, Bildanzahl und -bezeichnung ... - die Sprache des Textes ist es auf jeden Fall nicht. Eine neue URL ist für den IE definitiv eine neue Seite (bis er sie wieder gecached hat).Heißt dann im Umkehrschluss wohl auch das die Cache-Controll nicht funktioniert bei gleicher URL?
"Langsamer" ist halt relativ. Wenn es sich um eine bildlastige oder umfangreiche Seite handelt, wird eine Seite ohne Cache sicherlich schneller wieder angezeigt. Aber es braucht genauso lange, wie beim ersten Aufruf einer Seite - wenn die Seite mehr als x Sekunden zum Laden braucht, würde ich den Inhalt sowieso anders aufteilen.Wenn das so ist, wird die Seite beim Wechsel ja doch langsamer, schließlich werden ja dann immer alle Daten übertragen- Auch die, die eigentlich schon im lokalen Cache liegen!?
Nein (siehe unten).Desweiteren würde das bedeuteten das mein Kunde jedes Mal manuell das ?lang=x bei allen Links einfügen muss.
Nein, es heißt nur, dass man entweder die Cache-Einstellung des Browsers anpassen muss oder entsprechende meta-Tags in das Layout integrieren muss (cache-control).Wenn das bedeutet das ich jedes Mal den Cache vor bzw. nach einem Sprachwechsel leeren soll / muss, ist das keine sehr erfreunliche Antwort.
Na schauen wir mal: Welche Fälle gibt es?Bisher ist mir leider noch nicht klar ob ich wirklich das ?lang brauche oder nicht.