[Gelöst] Bei Linkklick im Menü bestimmte Headergrafik
[Gelöst] Bei Linkklick im Menü bestimmte Headergrafik
Hallo,
ich kenne leider den Ausdruck nicht dafür und weiß somit nicht wonach ich genau suchen muss.
Ich beschreibe mal was ich möchte:
Ich habe ein Hauptmenü mit Submenü. Im Hauptmenü beispielsweise Home, Über uns, Anfahrt.
Bei Home erscheint eine Headergrafik (Banner oben horizontal) mit einem Haus darauf. Klickt man nun auf Anfahrt dann wechselt die Headergrafik zu einer mit einem Auto darauf. (dies alles nur als veranschaulichendes Beispiel)
Die Links im Submenü bleiben davon unberührt, tonangebend soll das Hauptmenü sein.
Ich hoffe das war nun verständlich.
Ich bin für jeden Tipp dankbar.
Grüße
ich kenne leider den Ausdruck nicht dafür und weiß somit nicht wonach ich genau suchen muss.
Ich beschreibe mal was ich möchte:
Ich habe ein Hauptmenü mit Submenü. Im Hauptmenü beispielsweise Home, Über uns, Anfahrt.
Bei Home erscheint eine Headergrafik (Banner oben horizontal) mit einem Haus darauf. Klickt man nun auf Anfahrt dann wechselt die Headergrafik zu einer mit einem Auto darauf. (dies alles nur als veranschaulichendes Beispiel)
Die Links im Submenü bleiben davon unberührt, tonangebend soll das Hauptmenü sein.
Ich hoffe das war nun verständlich.
Ich bin für jeden Tipp dankbar.
Grüße
Last edited by NiGHtOwL on Sat Jun 28, 2008 4:35 pm, edited 1 time in total.
Re: Bei Linkklick im Menü bestimmte Headergrafik
1. Erstelle dir einen benutzerdefinierten Tag:
2. Füge das direkt nach dem -Tag ein:
3. Die Headerbilder musst du jetzt mit header1, header2 usw. benamsen
4. Im Template musst du jetzt für den Header folgendes eingeben (natürlich entsprechend deiner Verzeichnisstruktur angepasst)
(aus der Ideen-UDT-Sammlung
http://wiki.cmsmadesimple.org/index.php ... _tags_here
Code: Select all
global $gCms;
global $smarty;
$manager =& $gCms->GetHierarchyManager();
$var = 'root_page_id';
if( isset($params['assign']) && $params['assign'] != '' )
{
$var = $params['assign'];
}
$result = "NO RESULT";
$thisPage = $gCms->variables['content_id'];
$currentNode = &$manager->sureGetNodeById($thisPage);
while( isset($currentNode) && $currentNode->getLevel() >= 0 )
{
$currentContent =& $currentNode->getContent();
$result = $currentContent->Hierarchy();
$currentNode =& $currentNode->getParentNode();
}
$smarty->assign($var,$result);
Code: Select all
{get_root_page_hierarchy assign="root_page_hierarchy"}
4. Im Template musst du jetzt für den Header folgendes eingeben (natürlich entsprechend deiner Verzeichnisstruktur angepasst)
Code: Select all
<img src="uploads/images/header/header{$root_page_hierarchy}.jpg" />
http://wiki.cmsmadesimple.org/index.php ... _tags_here
Re: Bei Linkklick im Menü bestimmte Headergrafik
Dankeschön für die Antwort.
So etwas erschlägt mich als relativ Unwissender immer. Ich werde mir das mal in Ruhe zu Gemüt führen und testen.
Berichte dann hier.
So etwas erschlägt mich als relativ Unwissender immer. Ich werde mir das mal in Ruhe zu Gemüt führen und testen.
Berichte dann hier.
Re: Bei Linkklick im Menü bestimmte Headergrafik
So weit klappt das nun echt sehr gut, es tut was ich möchte. Nun kommt aber eine Ernüchterung:
Der empfohlene Code nimmt ja nur die Rootpages, so wie ursprünglich von mir auch gewünscht. Nun geht's nicht anders und das Submenü muss auch herhalten.
Bin für jegliche Tipps zur Verwirklichung dankbar
So wollte ich es ursprünglich. Nun hab ich bei Zusammenstellung der Menüpunkte gemerkt dass ich nicht um wechselnde Headergrafiken auch bei Sumenü Level1 und 2 nicht umherkomme. Nicht bei allen Unterpunkten, bei einigen schon.NiGHtOwL wrote:
Die Links im Submenü bleiben davon unberührt, tonangebend soll das Hauptmenü sein.
Der empfohlene Code nimmt ja nur die Rootpages, so wie ursprünglich von mir auch gewünscht. Nun geht's nicht anders und das Submenü muss auch herhalten.
Bin für jegliche Tipps zur Verwirklichung dankbar
Re: Bei Linkklick im Menü bestimmte Headergrafik
Dazu könntest Du die Variable $page_alias im Template verwenden.
Das Bild im Header würde ich dann so festlegen:
Im Ordner "uploads/images/header/" brauchst Du dann nur noch die Headergrafiken der Unterseiten als "header[Seitenalias_Der_Unterseiten].jpg" zu speichern.
Das Bild im Header würde ich dann so festlegen:
Code: Select all
{if $page_alias=='Alias der Unterseite' || $page_alias=='Alias einer anderen Unterseite' ... }
<img src="uploads/images/header/header{$page_alias}.jpg" />
{else}
<img src="uploads/images/header/header{$root_page_hierarchy}.jpg" />
{/if}
Last edited by NaN on Sat Jun 28, 2008 2:37 pm, edited 1 time in total.
Re: Bei Linkklick im Menü bestimmte Headergrafik
Ich habe Hilfe und Unterstützung von einem Freund bekommen. Er hat dafür das root_page_hierarchy ganz verworfen und diesen benutzerdefinierten Tag geschrieben:
Nun kann ich die Seiten wo es wechselt s.o. im code benennen. Der Code schaut nach dem Seitenalias. Dort wo es nicht benannt ist da sucht es so lange bis in einer höheren "Eltern-Page" was gefunden wird.
Beispiel:
Home
.Beruflich
..Maurerarbeiten
..Installationsarbeiten
Privat
.Musik
..Konzerte
.Fotografie
..Objektfotografie
..Portraitfotografie
Kontakt
Impresseum
Unter den 5 Hauptpunken ist jeweils eine Grafik benannt. Beispielsweise hat Installationsarbeiten auch eine Grafik. Mauererarbeiten hat keine, dann nimmt das Script wieder die Grafik von Beruflich. Ich finde das eine tolle Lösung. Fügt man später noch eine Seite hinzu so öffnet man einfach dieses benutzerdefinierte Tag und fürgt dort eine Zeile für die Grafik hinzu.
Im Template setzt man an die Stelle wo die Grafik erscheinen soll dies:
(ich habe in unserem Beispiel den benutzerdefinierten Tag header_grafik genannt)
Ich hoffe dies wird auch noch einigen anderen hilfreich sein. Mir gefällt das Ding.
Schönes Wochenende und Danke
Code: Select all
global $gCms, $header_grafiken, $header_grafik_standard, $hrmanager;
$header_grafiken = array(
'home' => 'uploads/Testtemplate/header1.jpg',
'beruflich' => 'uploads/Testtemplate/header2.jpg',
'privat' => 'uploads/Testtemplate/header3.jpg',
'kurzprofil' => 'uploads/Testtemplate/header4.jpg',
'kontakt' => 'uploads/Testtemplate/header5.jpg',
'impressum' => 'uploads/Testtemplate/header6.jpg',
'datenschutz' => 'uploads/Testtemplate/header7.jpg',
'sitemap' => 'uploads/Testtemplate/header8.jpg',
);
$header_grafik_standard = 'uploads/Testtemplate/header.jpg';
function get_node_alias($node) {
if (isset($node)) {
return $node->getContent()->Alias();
}
return 'home';
}
function get_header_img($currentNode) {
global $gCms, $header_grafiken, $header_grafik_standard;
$alias = get_node_alias($currentNode);
if (isset($header_grafiken[$alias])) {
return $header_grafiken[$alias];
} else {
if ($currentNode->getLevel() > 0) {
$parentNode = $currentNode->getParentNode();
return get_header_img($parentNode);
} else {
return $header_grafik_standard;
}
}
}
$hrmanager =& $gCms->GetHierarchyManager();
$thisPage = $gCms->variables['content_id'];
$currentNode = &$hrmanager->sureGetNodeById($thisPage);
echo get_header_img($currentNode);
Beispiel:
Home
.Beruflich
..Maurerarbeiten
..Installationsarbeiten
Privat
.Musik
..Konzerte
.Fotografie
..Objektfotografie
..Portraitfotografie
Kontakt
Impresseum
Unter den 5 Hauptpunken ist jeweils eine Grafik benannt. Beispielsweise hat Installationsarbeiten auch eine Grafik. Mauererarbeiten hat keine, dann nimmt das Script wieder die Grafik von Beruflich. Ich finde das eine tolle Lösung. Fügt man später noch eine Seite hinzu so öffnet man einfach dieses benutzerdefinierte Tag und fürgt dort eine Zeile für die Grafik hinzu.
Im Template setzt man an die Stelle wo die Grafik erscheinen soll dies:
Code: Select all
<img src="{header_grafik}" alt="" />
Ich hoffe dies wird auch noch einigen anderen hilfreich sein. Mir gefällt das Ding.
Schönes Wochenende und Danke
Last edited by NiGHtOwL on Sat Jun 28, 2008 4:39 pm, edited 1 time in total.
Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik
Keine schlechte Idee.
Kannst den Tag gerne hier vorstellen: http://wiki.cmsmadesimple.org/index.php ... _tags_here
In dem Array einfach ein neues Alias mit einem neuen Header-Bild hinzuzufügen ist zwar keine große Sache, aber was ist mit Usern, die nicht die Berechtigung haben UDTs zu ändern?
Wäre es da nicht besser, wenn der UDT anstelle eines vordefinierten Arrays mit vordefinierten Aliases (Wie ist denn der Plural von Alias, verdammt?!?) alle Alias...es aus der DB auslesen würde und dann in einem Ordner namens z.B. "header_img" nach Grafiken sucht, die den gleichen Namen haben, wie das jeweilige Alias und diesem dann das Bild zuordnet.
Ein dynamisches Array sozusagen.
So kann man durch einfaches Hinzufügen einer Grafik im Ordner "header_img" mit dem Namen eines Seitenalias, das bisher noch kein eigenes Bild im Header hatte automatisch eins zuordnen. Ohne deswegen den Code des UDTs ändern zu müssen.
Einfach Bild hochladen, fertig.
Ist nur eine Idee.
Kannst den Tag gerne hier vorstellen: http://wiki.cmsmadesimple.org/index.php ... _tags_here
In dem Array einfach ein neues Alias mit einem neuen Header-Bild hinzuzufügen ist zwar keine große Sache, aber was ist mit Usern, die nicht die Berechtigung haben UDTs zu ändern?
Wäre es da nicht besser, wenn der UDT anstelle eines vordefinierten Arrays mit vordefinierten Aliases (Wie ist denn der Plural von Alias, verdammt?!?) alle Alias...es aus der DB auslesen würde und dann in einem Ordner namens z.B. "header_img" nach Grafiken sucht, die den gleichen Namen haben, wie das jeweilige Alias und diesem dann das Bild zuordnet.
Ein dynamisches Array sozusagen.
So kann man durch einfaches Hinzufügen einer Grafik im Ordner "header_img" mit dem Namen eines Seitenalias, das bisher noch kein eigenes Bild im Header hatte automatisch eins zuordnen. Ohne deswegen den Code des UDTs ändern zu müssen.
Einfach Bild hochladen, fertig.
Ist nur eine Idee.
Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik
Ich denke mal darüber nach und melde mich wieder... kann aber paar Tage dauern. Schönes Wochenende nochmals.
Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik
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:
und auf Anwenden klicken.
6.
Gehe zum verwendeten Template und füge an folgender Stelle ein:
7.
Gestalte im passenden Stylesheet eine id für das div#header.
Beispiel:
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.
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'];
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;
}
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.
Last edited by NiGHtOwL on Mon Sep 29, 2008 6:13 pm, edited 1 time in total.
Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik
Erstmal danke für die Vostellung.
Sieht mir nach einem gelungenen Tag aus.
Allerdings frage ich mich gerade, ob Dir da vielleicht ein kleiner Tippfehler unterlaufen ist.
Denn hier bin ich etwas verwirrt:
Sieht mir nach einem gelungenen Tag aus.
Allerdings frage ich mich gerade, ob Dir da vielleicht ein kleiner Tippfehler unterlaufen ist.
Denn hier bin ich etwas verwirrt:
Könntest Du vielleicht noch die Parameter und die Sache mit den Stylesheets kurz erläutern?NiGHtOwL wrote:
[...]
3.
Name: header_grafik
[...]
{* 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" *}
{* End Header *}
7.
Gestalte im passenden Stylesheet eine id für das div#header.
Beispiel:[...]div#header {
height: 150px; /* adjust according your image size */
background: #666666 url(uploads/images/headers/{$header_grafik_cache}) no-repeat;
margin:0;
}
Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik
Ähm ja, sorry Tippfehler. Ich hab es verbessert.
Mit dem CSS für das div schau ich noch was nach und schreib es hier rein.
OK, hast recht. Natürlich ist das Blödsinn und doppelt, habe es rausgenommen und oben auch geändert.
Sollte nun alles stimmen. Danke für's schauen.
Mit dem CSS für das div schau ich noch was nach und schreib es hier rein.
OK, hast recht. Natürlich ist das Blödsinn und doppelt, habe es rausgenommen und oben auch geändert.
Sollte nun alles stimmen. Danke für's schauen.
Last edited by NiGHtOwL on Mon Sep 29, 2008 6:15 pm, edited 1 time in total.
Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik
Also Blödsinn finde ich das nicht.NiGHtOwL wrote:
OK, hast recht. Natürlich ist das Blödsinn und doppelt, habe es rausgenommen und oben auch geändert.
Wenn es funktioniert, finde ich die Lösung mit dem Stylesheet sogar ziemlich genial.
Man sollte vielleicht nur erwähnen, dass es da verschiedene Möglichkeiten gibt.
Entweder als -Tag oder als Hintergrundgrafik.
Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik
OK, dann denke ich wäre nun allen geholfen. Zumindest mir schon, denn ich finde die Lösung prima.
Wenn andere das nun noch brauchen können um so besser.
Wenn andere das nun noch brauchen können um so besser.
Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik
Dann solltest du es auch hier veröffentlichenNiGHtOwL wrote: Wenn andere das nun noch brauchen können um so besser.
http://wiki.cmsmadesimple.org/index.php ... _tags_here
Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik
Mit anderen Worten, ich klicke da rum, finde den Einstieg aber nicht. Ich würde das liebend gerne tun.NiGHtOwL wrote:
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.