Hat jemand ne Idee wie ich die Klasse, die ich für eine Seite in der Seitenstruktur vergeben kann, an die Unterseiten vererben könnte?
Hat jemand ne Idee wie ich die Klasse, die ich für eine Seite in der Seitenstruktur vergeben kann, an die Unterseiten vererben könnte?
Wenn es keine passende Erweiterung gibt, könntest Du Dir höchstens mal die Variable $GLOBALS ausgeben lassen. Vielleicht wird der Wert ja irgendwo "mitgeschleppt".
Grüße,
Christian
Contao-Partner am Niederrhein
Templating - Komplettservice - Erweiterungen
Infos: http://delahaye.de
Ich würde unter Layout bei dem Feld Body ein inserttag einfügen, z.B. dieses:
{{env::main_alias}}, so hat der body einer Unterseite immer den Alias der Hauptseite als Klasse.
In der $GLOBALS scheint nix zu stehen von der Klasse.
Ja das mit dem Insert-Tag hatte ich im alten Forum auch gefunden, möchte ich aber ungern verwenden. Ich verwende für jede Hauptseite eine andre Farbe und da is die Vergabe des Farbnamens angebrachter und man is da flexibler beim Farben tauschen
Es gibt sicher auch andre Wege das zu lösen, aber am einfachsten wäre das über die Body-Klasse.
Contao-Partner am Niederrhein
Templating - Komplettservice - Erweiterungen
Infos: http://delahaye.de
Doch das geht schon, auch für Unterunterseiten , aber ist halt nicht wirklich das, was ich gern hätte.
So ein Insert-Tag währe nicht schlecht, bei dem man das x durch einen Beliebigen Parameter ersetzen könnte.HTML-Code:{{env::main_x}}
Geändert von thepixture (09.09.2009 um 13:23 Uhr)
Das meine ich ja: Es bleibt nicht beim Titel des Über-Über-Übergeordneten (etc), sondern zieht sich durch. In der Variable $GLOBALS wird eine entsprechende Angabe nur kodiert mitgeschleppt: "objPage" hat ein Array "trail", was die IDs der übergeordneten Seiten enthält.
Die kannst Du ja ggf. per php/mysql nutzen, um die gewünschten Angaben zu extrahieren.Code:[trail] => Array ( [0] => 52 [1] => 133 [2] => 134 [3] => 146 )
Grüße,
Christian
Contao-Partner am Niederrhein
Templating - Komplettservice - Erweiterungen
Infos: http://delahaye.de
Ich sieh gerade, dass es dir um verschiedene Styles geht, warum weist du den einzelnen Seiten dann nicht einfach ein unterschiedliches Layout zu?
Das mit dem Inserttag in der Body-Klasse ist schon die beste Lösung.
Du kannst auch {{env::main_alias}} {{env:age_alias}} reinschreiben. Dann hast du die übergeordnete und die aktuelle Seite als Klasse im Body-Tag
Ich versteh nicht wieso dir das nicht reicht, was brauchst du denn noch?
Per CSS kannst du nun jedes Element exakt nur für diese Seite ansprechen.
"Ich sieh gerade, dass es dir um verschiedene Styles geht, warum weist du den einzelnen Seiten dann nicht einfach ein unterschiedliches Layout zu?"
Das wäre blödsinnig, weil er dann evtl. 10, 20 Layouts erstellen müsste, viel Spaß beim aktualisieren...
Geändert von Stranger (09.09.2009 um 17:10 Uhr)
Du willst dich bei mir bedanken?
Ich freue mich über Geschenke von meiner Amazon-Wunschliste.
Contao-Anwender seit 2008
Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert
Mein Unternehmen aus Blankenburg (Harz): Fast & Media
@Christian:
Bei {{env::main_alias}} wird immer nur der Aliasname des Hauptpunktes genommen. Das was du meinst wäre {{env:age_title}}. Das Zeug aus den $GLOBALS zu frikeln is mir dann doch zu sehr 'mit Kanonen auf Spatzen geschossen'.
@Stranger:
Ja, sieht so aus als wäre es die beste Lösung.
Bequemlichkeit , weil wenn die alias bzw. Punkte mal umbenannt werden, müssen die ganzen CSS-Angaben auch angepasst werden und das wollt ich umgehen.Ich versteh nicht wieso dir das nicht reicht, was brauchst du denn noch?
Richtig!Das wäre blödsinnig, weil er dann evtl. 10, 20 Layouts erstellen müsste, viel Spaß beim aktualisieren...
Nunja, da hätte er dann aber den Schutz, dass er beim Umbenennen der Seite keine Anpassungen machen müsste. Und mal ehrlich - wie häufig ändert sich ein Seitenlayout denn bitte? Naja, nun kennst du die üblichen Vorgehensweisen und kannst dich entscheiden.
@Nils: Später sicher nicht mehr so oft, aber im Laufe der Entwicklung ändert es sich sehr sehr oft bei komplexen Websites. Ein Modul kommt hinzu oder fliegt raus... eine CSS Datei kommt hinzu oder fliegt raus usw. Das würde ja ewig dauern ständig 20 Seitenlayouts zu ändern.
Du willst dich bei mir bedanken?
Ich freue mich über Geschenke von meiner Amazon-Wunschliste.
Contao-Anwender seit 2008
Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert
Mein Unternehmen aus Blankenburg (Harz): Fast & Media
Also ich hab das jetzt über über die Bodyklasse und Insert-Tags gelöst. Dann einfach CSS-Dateien mit dem Namen der generierten Klasse aus dem main_alias angelegt. Die werden dann als zusätzliches Headtag eingebunden.
So brauch ich nur die Namen der CSS-Dateien umbenennen, wenn sich was ändert.HTML-Code:<link media="all" type="text/css" href="{{env::main_alias}}.css" rel="stylesheet"/>
Edit: Wobei ich gerade feststelle, dass ich nichtmal die Bodyklasse dazu brauche.
Geändert von thepixture (11.09.2009 um 11:08 Uhr)
Also ehrlich gesagt suche ich auch schon länger nach der Möglichkeit Klassen zu vererben. Die Lösung mit insert-tags funktioniert aber nicht mehr bei einer tieferen Verschachtelung. Und Seitenlayouts kommen natürlich gar nicht in Frage.
Daher werde ich mir das Modul pageimage entsprechend anpassen. Das macht nämlich genau dasselbe nur mit Bildern.
Eine kleine Anpassung am Template und es sollte laufen
hallo emkayy,
ich würde auch die klassenvererbung benötigen. Hast du das mit dem Module von Andreas hinbekommen?
lg klaus
Hallo,
ich stehe nun vor dem selben Problem. Die Variante mit dem pageimage (@33emkayy) finde ich super. Bist du da zu einer Lösung gekommen? Wenn ja, wie hast du das Modul angepasst.
Besten Dank.
Mit dem trail aus der global $objPage und der aktuellen pageId hast du doch alles was du brauchst.
Eine kleine db abfrage und du holst dir die Styles aus dem ersten eintrag des trail arrays.
Wenn du nicht tiefer als eine Ebene schichtest tun die inserttags es auch.
Grüße,
Tim
http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.
Ein dank an Tim G, von dem dieses Snippet stammt.PHP-Code:
<?php // additional body classes
global $objPage;
$arrClasses = array();
// all parent ids
foreach($objPage->trail as $pid)
{
if($pid == $objPage->rootId)
{
$arrClasses[] = 'root'.$pid;
continue;
}
$arrClasses[] = 'parent'.$pid;
}
// inherited classes from parent pages
$this->import('Database');
$objParents = $this->Database->prepare("SELECT * FROM tl_page WHERE id IN(".implode(',', $objPage->trail).") AND published=1 AND type!='root'")->execute();
$arrParentClasses = $objParents->fetchEach('cssClass');
$arrClasses[] = implode(' ', $arrParentClasses);
// levels
$level = count($objPage->trail) - 1;
$arrClasses[] = 'level_' . $level;
// page title
$arrClasses[] = standardize($this->pageTitle);
// class depending on website start point
#if($objPage->rootId == 2) $arrClasses[] = '';
// append body class
$this->class .= ' '.implode(' ',$arrClasses);
?>
Dies einfach in das Template fe_page.html5 kopieren.
Bei Bedarf noch nicht benötigte Bereiche aus kommentieren.
Fertig.
Getestet mit Contao 3.0.1. Funktioniert prima.
Geändert von Nook (16.07.2013 um 09:59 Uhr)
Super. Vielen Dank für das Snippet.
Einen Wunsch hätte ich dazu noch:
Bitte bitte bitte ins Wiki damit ! ;-)
Viele Grüße
Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
[Arbeitet bei -> Paus Design & Medien]
"I can EXPLAIN it to you, but I can't UNDERSTAND it for you."
Ich komm mit dem wiki nicht klar.
Schreibts ruhig rein.
Sent from my iphone using Tapatalk
http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.
Sorry - aber bitte wohin genau einfach kopieren? (Contao 3.0.1)
Dies einfach in das Template tl_page kopieren.
Bei Bedarf noch nicht benötigte Bereiche aus kommentieren.
Fertig.
Getestet mit Contao 3.0.1. Funktioniert prima.
Irgendwo zwischen </head> und Anfang <body>
http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.
Prima. Danke für die Hilfe.
Perfekt, vielen Dank für das Thema und die zahlreichen Antworten.
Kurz zu meinem Problem:
Ich habe bei den obersten Seiten (in der Struktur) jeweils eine Klasse / Farbe hinterlegt die auf den Unterseiten die jeweilige Farbe abbildet.
Diese Klasse (und nicht die anderen Angaben die das gesamte Script abfragt) sollte jetzt vererbt werden, damit der Style überall automatisch übernommen wird.
BSP DER STRUKTUR:
Für alle die das selbe brauchen wie ich, hier der Code (stark verkürzt aus dem Beitrag von Nook, Snipped von Tim G):Code:STARTPUNKT EINER WEBSEITE - OBERSEITE X (farbklasse1) -- UNTERSEITE X1 -- UNTERSEITE X2 - OBERSEITE Y (farbklasse2) -- UNTERSEITE Y1 - OBERSEITE Z (farbklasse3)
Code:<?php // additional body classes // global $objPage; // läuft zumindest in Contao 2.11.11 auch ohne $this->import('Database'); $objParents = $this->Database->prepare("SELECT * FROM tl_page WHERE id IN(".implode(',', $objPage->trail).") AND published=1 AND type!='root'")->execute(); $this->class .= ' '.implode(' ',$objParents->fetchEach('cssClass')); ?>
EDIT:
Mir ist aufgefallen, dass bei geladener Oberseite die CSS Klasse doppelt angezeigt wird.
Also habe ich das ganze so erweitert, dass die Abfrage der Klasse nur erfolgt, wenn man auf einer Unterseite ist.
Hinweis: Das ganze funktioniert NUR mit den auf den Oberseiten definierten Klassen.
Code:</head> <?php // additional body classes if($objPage->id != $objPage->trail[1]){ // "aktuelle Objektklasse" UNGLEICH "dem zweiten Trail" $this->import('Database'); $objParents = $this->Database->prepare("SELECT * FROM tl_page WHERE id = '".$objPage->trail[1]."' AND published=1 AND type!='root'")->execute(); $this->class .= ' '.implode(' ',$objParents->fetchEach('cssClass')); } ?> <body ...
Geändert von Flaschenzug (08.05.2013 um 19:37 Uhr)
Die Lösung von Flaschenzug ist perfekt. Unverständlich warum sowas nicht zum Core gehört oder ist das bei Contao 3 dabei?
Du willst dich bei mir bedanken?
Ich freue mich über Geschenke von meiner Amazon-Wunschliste.
Contao-Anwender seit 2008
Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert
Mein Unternehmen aus Blankenburg (Harz): Fast & Media
Hallo,
möchte auch gern Klassen auf Unterseiten vererben. Habe das Script von Flaschenzug in das fe_page Template eingefügt, aber es klappt leider nicht (hab ein Contao 3.3.2). Muss an dem Script für Contao 3 irgendwas angepasst werden?
Viele Grüße
hippo
EDIT:
Ah ok - jetzt bekomme ich folgende Fehlermeldung
Kenne mich leider mit SQL noch nicht so gut aus. Wäre super wenn jemand eine Idee hat.Code:[[TL_CSS]] [[TL_HEAD]] Fatal error: Uncaught exception Exception with message Query error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''.implode(' at line 1 (SELECT * FROM tl_page WHERE id IN('.implode() thrown in system/modules/core/library/Contao/Database/Statement.php on line 283 #0 system/modules/core/library/Contao/Database/Statement.php(254): Contao\Database\Statement->query() #1 templates/fe_page.html5(33): Contao\Database\Statement->execute() #2 system/modules/core/library/Contao/BaseTemplate.php(92): include('/opt/lampp/htdo...') #3 system/modules/core/library/Contao/Template.php(244): Contao\BaseTemplate->parse() #4 system/modules/core/classes/FrontendTemplate.php(46): Contao\Template->parse() #5 system/modules/core/classes/FrontendTemplate.php(81): Contao\FrontendTemplate->parse() #6 system/modules/core/pages/PageRegular.php(183): Contao\FrontendTemplate->output(true) #7 index.php(263): Contao\PageRegular->generate(Object(Contao\PageModel), true) #8 index.php(447): Index->run() #9 {main}
EDIT [GELÖST]:
Man muss die Objectvariablen mit $GLOBALS davor schreiben:
$objPage wird zu $GLOBALS['objPage']
$objParents wird zu $GLOBALS['objParents']
Bei mir funktioniert es nun mit:
PHP-Code:
<?php // additional body classes
if($GLOBALS['objPage']->id != $GLOBALS['objPage']->trail[1]){ // "aktuelle Objektklasse" UNGLEICH "dem zweiten Trail"
$this->import('Database');
$GLOBALS['$objParents'] = $this->Database->prepare("SELECT * FROM tl_page WHERE id = '".$GLOBALS['objPage']->trail[1]."' AND published=1 AND type!='root'")->execute();
$this->class .= ' '.implode(' ',$GLOBALS['$objParents']->fetchEach('cssClass'));
}
?>
Geändert von hippo (11.12.2014 um 10:49 Uhr)
Lustig, ich weiß nicht wie alt der Beitrag von mir ist (mit dem Klassen vererben, aber genau heute habe ich das auch wieder gebraucht - eine Wochen nach dir).
Stand vor dem selben problem wie du, habe es so gelöst.
Muss mal direkt schauen, ob das mit $GLOBALS genauso funktioniert, das wäre dann die elegantere Variante denke ich.Code:<?php // additional body classes global $objPage; if($objPage->id != $objPage->trail[1]){ $this->import('Database'); $objParents = $this->Database->prepare("SELECT * FROM tl_page WHERE id = '".$objPage->trail[1]."' AND published=1 AND type!='root'")->execute(); $this->class .= ' '.implode(' ',$objParents->fetchEach('cssClass')); } ?>
EDIT: Also funktioniert auch super, wobei ich es noch etwas angepasst habe:
1. habe ich aus dem $GLOBALS[objParents] eine normale unglobale Variable gemacht
2. habe ich das "AND published=1" rausgeworfen, weil das eher hinderlich ist (zumindest in meinen Tests, denn ich teste an einer versteckten Seite)
Code:if($GLOBALS['objPage']->id != $GLOBALS['objPage']->trail[1]){ // "aktuelle Objektklasse" UNGLEICH "dem zweiten Trail" $this->import('Database'); $objParents = $this->Database->prepare("SELECT * FROM tl_page WHERE id = '".$GLOBALS['objPage']->trail[1]."' AND type!='root'")->execute(); $this->class .= ' '.implode(' ',$objParents->fetchEach('cssClass')); }
Geändert von Flaschenzug (18.12.2014 um 11:20 Uhr)
Hi,
Da hier doch nochmal vor kurzem was gepostet wurde wollte Ich euch meine eine Extensions zeigen die Ich gebaut habe um das Problem mit Vererbbaren css Klassen unter Contao zu lösen.
Github: https://github.com/MrTool/contao-hierarchicalBodyClass
Packagist: https://packagist.org/packages/mrtoo...cal-body-class
Die Extension ist für composer verfügbar und derzeit auf die >= 3.3 beschränkt da ich zurzeit nur unter dieser Version getestet habe.
Lg
Mr. Tool
Gibts ne möglichkeit das ganze für 3.4 zu testen?
Wäre super wenn ich es zur Hand hätte
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen