Pro Seite ein anderes Design / Themes
am 11.08.2008 - 14:20 Uhr in
Hallo liebe Drupaler
Ist es möglich, dass wenn ich zb: eine Praktikanten-Website hätte, dass ich zb:
wenn ich auf Praktikant1 klicke - die Seite rot wird,
beim Prak.2 Gelb und so weiter (ohne Login - unabhängig, wer sich die Seiten anschaut)
Danke viel mal für eure Hilfe
Ganz lieben Gruss
Majce
- Anmelden oder Registrieren um Kommentare zu schreiben

Ja, per hook_init
am 11.08.2008 - 14:45 Uhr
den folgenden Code in ein Modul einbauen und "mymodule" in den entsprechenden Modulnamen ändern,
anschließend kannst du mit Links der Form ?style=mystyle zwischen aktiven Themes umschalten.
<?php
/*
* switch theme
*/
function mymodule_init() {
if (($style=$_GET['style']) && $style!=$_SESSION['style']) {//if it isnt the current theme.
$themes = list_themes();// get avaliable themes.
if ($themes[$style]) {//theme is valid.
$_SESSION['style'] = $style;
}
}
//set theme
if ($_SESSION['style'] && $_SESSION['style']!=$GLOBALS['user']->theme) {
$GLOBALS['custom_theme'] = $_SESSION['style'];
}
}
?>
Edmund
------
Drupal Migrationen, Modul- und Themeentwicklung, Drupal Hosting - http://www.katp.de
CSS
am 11.08.2008 - 14:55 Uhr
Moin!
Eine weitere Alternative wäre, abhängig vom Pfad oder der Node-Id einfach eine CSS-Klasse zum body hinzufügen und diese in der style.css entsprechend farblich belegen.
Also in der template.php:
<?php
function DeinThemeName_body_class($left, $right) {
if ($left != '' && $right != '') {
$class = 'sidebars';
}
else {
if ($left != '') {
$class = 'sidebar-left';
}
if ($right != '') {
$class = 'sidebar-right';
}
}
if ((arg(0) == 'node') && is_numeric(arg(1)) {
$class .= ' node-'. arg(1);
}
if (isset($class)) {
print ' class="'. $class .'"';
}
}
?>
Jetzt hast Du bei allen nodes im Body noch eine zusätzliche Klasse, die Du per CSS auswerten kannst.
node-1 {background: #ffffff;}node-2 {background: #fafafa;}
...
Das ist natürlich etwas Schreibaufwand, falls Du viele verschiedene Seiten machen möchtest, die dann auch noch unterschiedliche Farben haben.
Stefan
Nachtrag
am 11.08.2008 - 14:59 Uhr
In http://www.drupalcenter.de/node/11742 wurden auch Lösungen zu diesem Problem gezeigt.
CSS im Body Tag und CSS Kaskaden
am 11.08.2008 - 15:18 Uhr
Anderer Loesungsweg:
Es kommt darauf an welches Theme Du verwendest.
Sehe Dir mal den HTML Quellcode einzelner zu veaendernder Seiten an.
Dabei ganz speziell den Body Tag.
Hat er ereignis- oder anzeigenbezogene CSS Klassen. Wenn ja ist dies der Ausgangspunkt einer kaskadierenden CSS Formatierung bezogen auf die jeweilige mit einem konkreten Body Tag angezeigte Seite.
Hat er keine ereignis- oder anzeigebezogenen CSS Klassen? Dann organisiere Dir diese im Body Tag. Danach weiter wie voran.
Bei dieser Vorgehensweise sind keine separaten CSS Dateien notwendig da durch die verschiedenen Kaskadierungen separate Formatanweisungen innerhalb einer einzelnen CSS Datei erfolgen koennen.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
klapper@drupal.org
am 12.08.2008 - 10:08 Uhr
den folgenden Code in ein Modul einbauen und "mymodule" in den entsprechenden Modulnamen ändern,
anschließend kannst du mit Links der Form ?style=mystyle zwischen aktiven Themes umschalten.
<?php
/*
* switch theme
*/
function mymodule_init() {
if (($style=$_GET['style']) && $style!=$_SESSION['style']) {//if it isnt the current theme.
$themes = list_themes();// get avaliable themes.
if ($themes[$style]) {//theme is valid.
$_SESSION['style'] = $style;
}
}
//set theme
if ($_SESSION['style'] && $_SESSION['style']!=$GLOBALS['user']->theme) {
$GLOBALS['custom_theme'] = $_SESSION['style'];
}
}
?>
Edmund
------
Drupal Migrationen, Modul- und Themeentwicklung, Drupal Hosting - http://www.katp.de
Hallo Edmund.
Danke für deine Antwort, doch Fragen hätte ich immer noch dazu:
in welches MODUL (meinst du nicht vielleicht Themes) soll ich diesen Code einbauen?
<?phpfunction mymodule_init()
{
if (($style=$_GET['style']) && $style!=$_SESSION['style'])
{
$themes = list_themes();// get avaliable themes.
if ($themes[$style]) {//theme is valid.
$_SESSION['style'] = $style;
}
}
if ($_SESSION['style'] && $_SESSION['style']!=$GLOBALS['user']->theme) {
$GLOBALS['custom_theme'] = $_SESSION['style'];
}
}
?>
ich habe vier aktive Themen, pixture, pixture1, pixture2, pixture3, wärest du vielleicht so lieb und würdest mir helfen, indem du mir ein Beispiel machst?
Komme nicht so ganz nach!
Danke viel mal für deine bisherige Hilfe
Lieben Gruss
Maja
sorry, aber es muss ein
am 12.08.2008 - 10:50 Uhr
sorry, aber es muss ein Modul sein, da nur dort ein hook_init benutzt werden
kann.
Du kannst Dir ganz einfach ein neues Modul schreiben.
1. Verzeichnis sites/all/modules/deinmodul anlegen
2. eine Info Datei deinmodul.info dort anlegen (kopiere irgendwoher eins,
umbennenen, öffnen und namen austauschen)
3. deinmodul.module anlegen und dort den code aus dem beispiel einkopieren
(unter dem name deinmodul_init)
4. modul in admin/build/modules aktivieren
fertig!
Wenn du ein einfaches Beispiel für ein Modul brauchst, schaue dir mal 'ping'
an (ist ein Kernmodul).
Kopiere einfach alles und bennene ping in irgendwas um (in allen Dateien),
lösche den Inhalt von ping.module und kopiere den Code von oben ein.
Viele Grüße
Edmund
------
Drupal Migrationen, Modul- und Themeentwicklung, Drupal Hosting - http://www.katp.de
Ich danke euch allen
am 12.08.2008 - 14:50 Uhr
Ich möchte mich bei allen Usern bedanken, die mir geholfen haben!
Danke an euch alle und einen lieben Gruss
Majce