So, hat etwas gedauert. Hier nun fertiges Ergebnis:
Es war dieser Thread der mich veranlasste einen benutzerdefinierten Tag zu entwerfen.
Letztendlich ist dies alles mit großer Hilfe und Unterstützung eines Freundes von mir entstanden und ich kann sagen dass alles hervorragend funktioniert.
OK, was soll dieser Tag bezwecken?
Ich wollte dass sich die Headergrafik bei jedem Klick auf einen Menülink ändert, passend zur Thematik.
Normalerweise geht das nur sehr umständlich indem man eben für jede Grafik ein eigenes Theme erstellt oder aber man macht es über CSS. Beide Methoden werden sehr aufwändig wenn man eine Vielzahl von Seiten hat.
Bei diesem Tag wird sich der Alias_Seitenname zunutze gemacht. Der Tag schaut, wie der Seitenalias heißt und schaut ob eine Bilddatei mit diesem Namen vorhanden ist. Ist dies nicht der Fall, so wird ins nächsthöhere Level gesprungen, so lange eben bis eine Grafik gefunden ist. Selbst einer 404 Site kann man dann eine eigene Headergrafik zuweisen.
Der Tag selbst erstellt eine Datei namens headercache.php im Cache von CS Made Simple. Dort sind werden beim Seitenstart alle vorhandenen Headergrafiken mit Namen eingelesen und aufgelistet. Von dort erfolgt der Zugriff und die richtige Grafik wird angezeigt. Kommt eine Seite hinzu listet die headercache die passende Grafik auf, sofern erstellt und hochgeladen.
Also wird immer nur eine kleine Datei eingelesen die dann dafür verantwortlich ist die richtige Grafik darzustellen.
Alles was lediglich auf der Adminseite erfolgen muss ist den erstellten Grafiken den richtigen Dateinamen zu geben.
Dieser sieht so aus: seitenaliasname_header.jpg (auch sind PNG oder GIF möglich.
Beispiel: Unsere Seite trägt den Namen Produkte. Seitenalias ist produke. Wir erstellen eine Grafik mit Namen produkte_header.jpg und laden diese hoch.
Was ist zu tun damit das alles funktioniert?
1.
Gehe im Adminpanel zu Erweiterungen -> Benutzerdefinierte Tags.
2.
Füge einen neuen benutzerdefinierten Tag hinzu
3.
Name: header_grafik_cache
4.
Füge folgenden Code ein:
Code: Select all
global $gCms, $header_dir, $header_data, $header_prefix, $cachefilename;
$header_dir = (isset($params['dir'])) ? $params['dir'] : 'uploads/images/headers/';
$header_prefix = (isset($params['prefix'])) ? $params['prefix'] :'header_';
function cache_headers() {
global $cachefilename, $header_dir, $header_prefix;
$header_data = array(
'cache_date' => time(),
'images' => array()
);
$dh = opendir($header_dir);
while ($item = readdir($dh)) {
if (is_file($header_dir . $item)) {
if (preg_match('/^' . preg_quote($header_prefix) . '(.*?)\./', $item, $matches)) {
$header_data['images'][$matches[1]] = $header_dir . $item;
}
}
}
closedir($dh);
$handle = fopen($cachefilename, "w");
fwrite($handle, '<?php return; ?>'.serialize($header_data));
fclose($handle);
return $header_data;
}
function get_node_alias($node) {
if (isset($node)) {
$content = $node->getContent();
return $content->Alias();
}
return 'default';
}
function get_header_img($currentNode) {
global $gCms, $header_data;
$alias = get_node_alias($currentNode);
if (isset($header_data['images'][$alias])) {
return $header_data['images'][$alias];
} else {
if ($currentNode->getLevel() > 0) {
$parentNode = $currentNode->getParentNode();
return get_header_img($parentNode);
} else {
return $header_data['images']['default'];
}
}
}
$cachefilename = TMP_CACHE_LOCATION . '/headercache.php';
if (file_exists($cachefilename)) {
$handle = fopen($cachefilename, "r");
$data = fread($handle, filesize($cachefilename));
fclose($handle);
$header_data = unserialize(substr($data, 16));
}
// refresh header_data cache
if (!isset($header_data) || (isset($header_data) && $header_data['cache_date'] < $gCms->variables['pageinfo']->content_modified_date)) {
$header_data = cache_headers();
}
$hrmanager =& $gCms->GetHierarchyManager();
$thisPage = $gCms->variables['content_id'];
$currentNode = &$hrmanager->sureGetNodeById($thisPage);
if ($gCms->variables['pageinfo']->content_id != -1) echo get_header_img($currentNode);
else echo $header_data['images']['404'];
und auf Anwenden klicken.
6.
Gehe zum verwendeten Template und füge an folgender Stelle ein:
Code: Select all
{* Start Header, with logo image that links to the default start page. Logo image is changed in the stylesheet "For template: Top menu + left submenu + 1 column" *}
<div id="header">
<img src="{header_grafik_cache dir="uploads/images/headers/" prefix="header_"}" alt="" />
</div>
{* End Header *}
7.
Gestalte im passenden Stylesheet eine id für das div#header.
Beispiel:
Code: Select all
div#header {
height: 150px; /* adjust according your image size */
background: #666666;
}
8.
Gestalte dir Grafiken und lade sie hoch in das Verzeichnis ./uploads/images/headers (muss erstellt werden).
Fertig.
Fragen bitte an mich, Dank an meinen Kumpel
Ich würde das gerne unter Share your Tags veröffentlichen, habe aber noch nicht rausgefunden wie.
Jedenfalls viel Freude mit diesem Tag - für jene die es brauchen können.
