[Gelöst] Bei Linkklick im Menü bestimmte Headergrafik

Für Fragen und Diskussionen zum Layout und Design, Templates und Stylesheets sowie Themes
NiGHtOwL
Forum Members
Forum Members
Posts: 15
Joined: Tue Feb 26, 2008 4:16 am

[Gelöst] Bei Linkklick im Menü bestimmte Headergrafik

Post by NiGHtOwL »

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  :)
Last edited by NiGHtOwL on Sat Jun 28, 2008 4:35 pm, edited 1 time in total.
cyberman

Re: Bei Linkklick im Menü bestimmte Headergrafik

Post by cyberman »

1. Erstelle dir einen benutzerdefinierten Tag:

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);
2. Füge das direkt nach dem -Tag ein:

Code: Select all

{get_root_page_hierarchy assign="root_page_hierarchy"}
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)

Code: Select all

<img src="uploads/images/header/header{$root_page_hierarchy}.jpg" />
(aus der Ideen-UDT-Sammlung

http://wiki.cmsmadesimple.org/index.php ... _tags_here
NiGHtOwL
Forum Members
Forum Members
Posts: 15
Joined: Tue Feb 26, 2008 4:16 am

Re: Bei Linkklick im Menü bestimmte Headergrafik

Post by NiGHtOwL »

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.
NiGHtOwL
Forum Members
Forum Members
Posts: 15
Joined: Tue Feb 26, 2008 4:16 am

Re: Bei Linkklick im Menü bestimmte Headergrafik

Post by NiGHtOwL »

So weit klappt das nun echt sehr gut, es tut was ich möchte. Nun kommt aber eine Ernüchterung:
NiGHtOwL wrote:
Die Links im Submenü bleiben davon unberührt, tonangebend soll das Hauptmenü sein.
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.

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  :)
NaN

Re: Bei Linkklick im Menü bestimmte Headergrafik

Post by NaN »

Dazu könntest Du die Variable $page_alias im Template verwenden.
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}
 
Im Ordner "uploads/images/header/" brauchst Du dann nur noch die Headergrafiken der Unterseiten als "header[Seitenalias_Der_Unterseiten].jpg" zu speichern.
Last edited by NaN on Sat Jun 28, 2008 2:37 pm, edited 1 time in total.
NiGHtOwL
Forum Members
Forum Members
Posts: 15
Joined: Tue Feb 26, 2008 4:16 am

Re: Bei Linkklick im Menü bestimmte Headergrafik

Post by NiGHtOwL »

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:

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);
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:

Code: Select all

<img src="{header_grafik}" alt="" />
(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
Last edited by NiGHtOwL on Sat Jun 28, 2008 4:39 pm, edited 1 time in total.
NaN

Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik

Post by NaN »

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.
NiGHtOwL
Forum Members
Forum Members
Posts: 15
Joined: Tue Feb 26, 2008 4:16 am

Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik

Post by NiGHtOwL »

Ich denke mal darüber nach und melde mich wieder... kann aber paar Tage dauern.  Schönes Wochenende nochmals.
NiGHtOwL
Forum Members
Forum Members
Posts: 15
Joined: Tue Feb 26, 2008 4:16 am

Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik

Post by NiGHtOwL »

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. :-)
Last edited by NiGHtOwL on Mon Sep 29, 2008 6:13 pm, edited 1 time in total.
NaN

Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik

Post by NaN »

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:
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;     
}
[...]
Könntest Du vielleicht noch die Parameter und die Sache mit den Stylesheets kurz erläutern?
NiGHtOwL
Forum Members
Forum Members
Posts: 15
Joined: Tue Feb 26, 2008 4:16 am

Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik

Post by NiGHtOwL »

Ä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.
Last edited by NiGHtOwL on Mon Sep 29, 2008 6:15 pm, edited 1 time in total.
NaN

Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik

Post by NaN »

NiGHtOwL wrote:
OK, hast recht. Natürlich ist das Blödsinn und doppelt, habe es rausgenommen und oben auch geändert.
Also Blödsinn finde ich das nicht.
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.
NiGHtOwL
Forum Members
Forum Members
Posts: 15
Joined: Tue Feb 26, 2008 4:16 am

Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik

Post by NiGHtOwL »

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.
cyberman

Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik

Post by cyberman »

NiGHtOwL wrote: Wenn andere das nun noch brauchen können um so besser.
Dann solltest du es auch hier veröffentlichen ;)

http://wiki.cmsmadesimple.org/index.php ... _tags_here
NiGHtOwL
Forum Members
Forum Members
Posts: 15
Joined: Tue Feb 26, 2008 4:16 am

Re: [Gelöst] Bei Linkklick im Menü bestimmte Headergrafik

Post by NiGHtOwL »

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. :-)
Mit anderen Worten, ich klicke da rum, finde den Einstieg aber nicht. Ich würde das liebend gerne tun.
Post Reply

Return to “Layout und Design”