[Gelöst] CSS style switch (!= Theme switch)
am 01.12.2012 - 20:35 Uhr in
Hallo zusammen,
ich will auf meiner Seite Usern ermöglichen verschiedene Farbstile zu wählen. Deswegen will ich aber nicht für jede Farbe ein neues Theme bereit stellen, da so auch alle anderen Theme-Teile (images, js, markup usw.) jedesmal neu geladen werden müssen. Ich bin dabei über das Modul Styleswitcher gestolpert. Was mir dabei nicht wirklich gefallen mag, ist dass es über einen Block läuft, ich hätte lieber eine Profil-Lösung (Profil Einstellungen), wie bei der klassischen Theme-Auswahl. Außerdem ist das Modul für 7.x noch Dev und die Issues wollen mir auch nicht so ganz gefallen.
Meine Frage: Kennt jemand alternative Lösungen, oder Module, bzw. hat eventuell Erfahrung mit dem oben genannten Modul unter 7.x?
Vielen Dank im Voraus,
Genesis
- Anmelden oder Registrieren um Kommentare zu schreiben
So weit ich verstanden habe,
am 01.12.2012 - 21:32 Uhr
So weit ich verstanden habe, handelt es sich um angemeldete User, oder?
Da könnte man auch über eine Selectlist im Profil eine Auswahl treffen. So könnte man eine Variable erzeugen, und konditional die entsprechende css-Datei ins Theme laden.
Oder?
Don't code today what you can't debug tomorrow
Ariya Hidayat
Okay, ich bin kein PHPler,
am 01.12.2012 - 21:43 Uhr
Okay, ich bin kein PHPler, ich versuchs mal zu rekapitulieren. :)
Ich erstelle eine selectlist. Kein Problem. Dann lasse ich das Feld im Head-Bereich ausgeben, und wechsle dort mit der entsprechenden Ausgabe das Theme, entweder direkt per Ausgabe, oder als if/case-abfrage? Gibt es dadurch nicht Probleme beim Caching, weil die Dateien nicht via .info-Datei eingebunden werden?
Oder habe ich es komplett falsch verstanden? Dann entschuldige ich mich schon mal.
In jedem Fall schon mal danke für die Hilfe!!!
so ähnlich habe ich mir das
am 01.12.2012 - 22:36 Uhr
so ähnlich habe ich mir das vorgestellt in der template.php:
function yourtheme_preprocess_html(&$variables) {
$color = $user->data['neue_variable'];
switch ($color) {
case 'red':
drupal_add_css(drupal_get_path('theme', 'yourtheme').'/css/red.css');
break;
case 'green':
drupal_add_css(drupal_get_path('theme', 'yourtheme').'/css/green.css');
break;
case 'yellow':
drupal_add_css(drupal_get_path('theme', 'yourtheme').'/css/yellow.css');
break;
}
}
völlig ungetestet, nur eine Skizze...
Wobei ich jetzt noch nicht genau wüsste, wie die neue Variable in das $user-Objekt kommt, oder ob sie schon drinnen ist, wenn man sie dem Profil hinzufügt.
Ich glaube wenn man dass css mit drupal_add_css hinzufügt, sollte man keine Probleme mit der Aggregation bekommen.
Ich hoffe ich liege jetzt nicht komplett falsch...
Don't code today what you can't debug tomorrow
Ariya Hidayat
Hallo Oteno, ich danke dir
am 01.12.2012 - 22:35 Uhr
Hallo Oteno,
ich danke dir vielmals für die Hilfe. Werde erst morgen zum Testen kommen. Aber ich denke, daran kann ich mich entlang hangeln!
Noch mal vielen, vielen Dank.
Werde die Ergebnisse dann noch mal einstellen, für etwaige spätere Interessenten. :)
Okay, ich bin hier etwas
am 02.12.2012 - 21:47 Uhr
Okay, ich bin hier etwas weiter gekommen, aber es gibt noch ein Problem... Aktuell sieht der Code so aus:
function THEMENAME_preprocess_html(&$variables) {
global $user;
$user_fields = user_load($user->uid);
$color = $user_fields->field_prftheme['und']['0']['value'];
switch ($color) {
case 'Standard':
drupal_add_css( drupal_get_path('theme','THEMENAME') . '/css/standard.css','theme');
break;
case 'Blau':
drupal_add_css( drupal_get_path('theme','THEMENAME') . '/css/blue.css','theme');
break;
}
}
Das funktioniert soweit auch, sprich er switched die Dateien entsprechend. Allerdings wird der Pfad falsch ausgegeben, bzw. die Datei falsch eingebaut. Das schaut dann nämlich so aus:
<style type="text/css" media="all">
<!--/*--><![CDATA[/*><!--*/
sites/all/themes/THEMENAME/css/blue.css
/*]]>*/-->
</style>
Warum er den Pfad so ausgibt verstehe ich nicht so recht. Ich habe nun schon X Sachen ausprobiert, aber immer endet es so.
Mache ich irgendwas falsch, oder habe ich was übersehen?
Auch wenn ich hier etwas mit
am 03.12.2012 - 09:00 Uhr
Auch wenn ich hier etwas mit mir selbst rede. Durch Zufall bin ich heute morgen bei der Suche über eine andere Version gestolpert, und damit hat es dann funktioniert. Hier noch mal die funktionierende Variante, und noch mal großen Dank an Oteno.
function THEMENAME_preprocess_html(&$variables) {
global $user;
$user_fields = user_load($user->uid);
$color = $user_fields->field_prftheme['und']['0']['value'];
switch ($color) {
case 'Standard':
drupal_add_css( drupal_get_path('theme','THEMENAME') . '/css/standard.css', array('group' => CSS_THEME));
break;
case 'Blau':
drupal_add_css( drupal_get_path('theme','THEMENAME') . '/css/blue.css', array('group' => CSS_THEME));
break;
}
}
Super, freut mich.
am 03.12.2012 - 09:51 Uhr
Super, freut mich.
Don't code today what you can't debug tomorrow
Ariya Hidayat