Hallo,
Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.
Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.
Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
Style-Wechsler
Hi Leute,
sagt mal: Habt Ihr eine Idee, wie man dem User die Möglichkeit an die Hand geben könnte, das Design komplett zu wechseln? Ihr kennt ja diese Style-Switcher, die das Layout bei gleichbleibendem Inhalt komplett verändern.
Es gibt aus meiner Sicht zwei Möglichkeiten:
1. Es wird nur die CSS gewechselt.
2. Es wird das zugrunde liegende Template gewechselt.
Wie der Aufruf der jeweils anderen CSS-Datei, bzw. des Templates im Quellcode funktioniert, kann ich mir schon vorstellen, aber mir ist nicht klar, wie man einen dauerhaften Layoutwechsel macht, der also auch nach einem Seitenwechsel das vom User gewählte Layout beibehält. Ich denke, man müsste das entweder über eine bei allen Links vom System angehängte Variable machen (ähnlich clang) oder aber die Userwahl in einer Session-ID abspeichern.
Andere Ideen?
Auch über konkrete Codebeispiele zu meinen Lösungsideen (ich weiß z.B. nur theoretisch, wie man das mit der Session-ID macht) wäre ich sehr danbkbar.
Liebe Grüße,
Peter.
sagt mal: Habt Ihr eine Idee, wie man dem User die Möglichkeit an die Hand geben könnte, das Design komplett zu wechseln? Ihr kennt ja diese Style-Switcher, die das Layout bei gleichbleibendem Inhalt komplett verändern.
Es gibt aus meiner Sicht zwei Möglichkeiten:
1. Es wird nur die CSS gewechselt.
2. Es wird das zugrunde liegende Template gewechselt.
Wie der Aufruf der jeweils anderen CSS-Datei, bzw. des Templates im Quellcode funktioniert, kann ich mir schon vorstellen, aber mir ist nicht klar, wie man einen dauerhaften Layoutwechsel macht, der also auch nach einem Seitenwechsel das vom User gewählte Layout beibehält. Ich denke, man müsste das entweder über eine bei allen Links vom System angehängte Variable machen (ähnlich clang) oder aber die Userwahl in einer Session-ID abspeichern.
Andere Ideen?
Auch über konkrete Codebeispiele zu meinen Lösungsideen (ich weiß z.B. nur theoretisch, wie man das mit der Session-ID macht) wäre ich sehr danbkbar.
Liebe Grüße,
Peter.
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Hi Peter,
schau dir mal www.public-4u.de an.
Dort ist oben rechts ein Darstellungs -Selectfeld.
Wenn das das ist wie du es haben willst, sag bescheid
Gruß,
Markus
schau dir mal www.public-4u.de an.
Dort ist oben rechts ein Darstellungs -Selectfeld.
Wenn das das ist wie du es haben willst, sag bescheid
Gruß,
Markus
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Hi Peter,
du weisst zufällig, was eine SESSION in PHP ist? Damit hab ichs nämlich gemacht
Also:
Selektbox ins Template:
in der index.php from Frontend ganz am Anfang folgendes rein: (CVS Vers nötig!)
Im Template ganz oben folgendes rein:
Gruß,
Markus
du weisst zufällig, was eine SESSION in PHP ist? Damit hab ichs nämlich gemacht
Also:
Selektbox ins Template:
Code: Alles auswählen
<form action="index.php" method="post">
<input type="hidden" name="article_id" value="<?php echo $this->getValue('article_id') ?>">
<input type="hidden" name="clang" value="<?php echo $REX['CUR_CLANG'] ?>">
<select name="css">
<option value="css1">CSS 1</option>
<option value="css2">CSS 2</option>
<select>
</form>
Code: Alles auswählen
session_start();
Code: Alles auswählen
if ( empty($_SESSION['REX']['CSS'])) {
$_SESSION['REX']['CSS'] = 'css1';
}
if ( !empty( $_REQUEST['REX']['CSS'])) {
$_SESSION['REX']['CSS'] = $_REQUEST['REX']['CSS'];
}
switch( $_SESSION['REX']['CSS']) {
case 'css2': $css = 'style1.css'; break;
case 'css1':
default: $css = 'style1.css';
}
?>
<html>
<head>
<link rel="stylesheet" type="text/css" href="<?php echo $css ?>" media="screen" />
</head>
Gruß,
Markus
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
Markus,
es gibt noch ein Problem:
Wenn ich in der index.php vom Frontend das
session_start();
reinmache, gibt's massive Probleme im Backend.
Ich habe oft bei der Arbeit Frontend und Backend gleichzeitig offen, um die Änderungen zu kontrollieren. Und sobald das session_start() drin ist, passiert folgendes:
Ich fliege aus dem Backend raus und muss mich neu einloggen.
Ich erhalten Fehlermeldungen wie:
Warning: main(/layout/top.php): failed to open stream: No such file or directory in /server/redaxo/index.php on line 142
Warning: main(/layout/top.php): failed to open stream: No such file or directory in /server/redaxo/index.php on line 142
etc.
Hab ich das an die falsche Stelle gesetzt? Ich hab's ganz nach oben, in die zweite Zeile, direkt hinter:
<?
Peter.
es gibt noch ein Problem:
Wenn ich in der index.php vom Frontend das
session_start();
reinmache, gibt's massive Probleme im Backend.
Ich habe oft bei der Arbeit Frontend und Backend gleichzeitig offen, um die Änderungen zu kontrollieren. Und sobald das session_start() drin ist, passiert folgendes:
Ich fliege aus dem Backend raus und muss mich neu einloggen.
Ich erhalten Fehlermeldungen wie:
Warning: main(/layout/top.php): failed to open stream: No such file or directory in /server/redaxo/index.php on line 142
Warning: main(/layout/top.php): failed to open stream: No such file or directory in /server/redaxo/index.php on line 142
etc.
Hab ich das an die falsche Stelle gesetzt? Ich hab's ganz nach oben, in die zweite Zeile, direkt hinter:
<?
Peter.
Re: Style-Wechsler
moin Peter,pbickel hat geschrieben: 2. Es wird das zugrunde liegende Template gewechselt.
CSS Umschaltung geht auch per javascript und cookies wenns sein muß.. mach ich bis dato so, wobei die Lösung per session id natürlich sinnvoller ist wenn man eh mit php arbeitet, insofern les ich den thread mit Interesse..
Ich benutze bei meiner aktuellen redaxo Baustelle ein solches javascript für ne temporäre Umschaltung zu ner Druckansicht:
http://borselfm.dyndns.org/index.php
Wobei ich in dem Fall die dauerhafte styleumschaltung aushebele, da die Druckansicht eben nur ad hoc benötige.. über ein onload erzwinge ich bei jedem neuen seitenaufruf die Standardansicht.
Als richtige Styleumschaltung hab ich das script hier eingesetzt:
http://piemont-pur.de
http://bootsale.de etwas sinnfrei in dem Fall, aber egal.. ;-)
Diese Variante fände ich noch wesentlich interessanter, da man noch mehr Möglichkeiten hätte.. ich hab mal ne Frage dahingehend gepostet, ob man Templates per URL-Aufruf wählen/umschalten kann, aber da kam leider keine Antwort drauf, vermute also es geht so erstmal nicht..pbickel hat geschrieben: 2. Es wird das zugrunde liegende Template gewechselt.
Aber ich finde das wär ein schönes feature für kommende Versionen.. ;-)
greets,
Jan
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
Re: Style-Wechsler
Hallo Jan,
Auf die Idee mit Javascript kam ich noch nicht, aber da bin ich eh alles andere als ein Held, deswegen versuche ich erstmal mit der PHP-Variante klarzukommen.
Auch deshalb, weil immer alle von möglicherweise ausgeschaltetem Javascript reden, wobei ich bislang keinen derartigen Surfer getroffen habe ...
Ich mache folgendes:
Es gibt ein von allen Seiten verwendetes Main-Template, in dem nichts anderes steht, als Markus Styleswitcher, folgendermaßen modifiziert:
Jetzt muss man nur noch die switch case-Anweisung so anlegen, dass man für die style-Variable die jeweilige ID des zu verwendenden Templates einträgt.
Bin erst am Anfang meiner Experimente, aber es scheint zu funktionieren.
Viele Grüße,
Peter.
Das wird eine sehr schöne Website, Kompliment!jeandeluxe hat geschrieben: Ich benutze bei meiner aktuellen redaxo Baustelle ein solches javascript für ne temporäre Umschaltung zu ner Druckansicht:
http://borselfm.dyndns.org/index.php
Auf die Idee mit Javascript kam ich noch nicht, aber da bin ich eh alles andere als ein Held, deswegen versuche ich erstmal mit der PHP-Variante klarzukommen.
Auch deshalb, weil immer alle von möglicherweise ausgeschaltetem Javascript reden, wobei ich bislang keinen derartigen Surfer getroffen habe ...
Ich versuche gerade, Markus' Ansatz so umzustricken, dass das auch mit Templates geht. Und es scheint zu klappen.jeandeluxe hat geschrieben: ich hab mal ne Frage dahingehend gepostet, ob man Templates per URL-Aufruf wählen/umschalten kann, aber da kam leider keine Antwort drauf, vermute also es geht so erstmal nicht..
Ich mache folgendes:
Es gibt ein von allen Seiten verwendetes Main-Template, in dem nichts anderes steht, als Markus Styleswitcher, folgendermaßen modifiziert:
Code: Alles auswählen
<?
switch( $_SESSION['REX']['CSS']) {
case '2':
$style = '2';
break;
case '1':
default:
$style = '2';
}
include $REX[INCLUDE_PATH]."/generated/templates/".$style.".template";
?>
Bin erst am Anfang meiner Experimente, aber es scheint zu funktionieren.
Viele Grüße,
Peter.
Re: Style-Wechsler
Danke.. ;-)pbickel hat geschrieben:Hallo Jan,
Das wird eine sehr schöne Website, Kompliment!
Wollte es als Möglichkeit nur erwähnt haben.. de facto ist die PHP Variante im Kontext einer Redaxo Seite viel sinnvoller, zumal die js Umschaltung auch noch das Setzen von Cookies erfordert.. was für ne Spielerei wie ne Styleumschaltung eigentlich Unfug ist.pbickel hat geschrieben:Auf die Idee mit Javascript kam ich noch nicht, aber da bin ich eh alles andere als ein Held, deswegen versuche ich erstmal mit der PHP-Variante klarzukommen.
Auch deshalb, weil immer alle von möglicherweise ausgeschaltetem Javascript reden, wobei ich bislang keinen derartigen Surfer getroffen habe
Bin gespannt auf deine Lösung.pbickel hat geschrieben:Ich versuche gerade, Markus' Ansatz so umzustricken, dass das auch mit Templates geht. Und es scheint zu klappen.
Ich mache folgendes:
... (code)
Wobei meine Anforderungen für die Umformatierung zur Druckansicht etwas anders ist, da ich eigentlich nur eine nicht persistente Darstellung der Seite mittels eines anderen Templates bräuchte.
Daher war eben auch meine Frage im Raum gestanden ob Templates per URL schaltbar sind..
Insgesamt würde das wirklich ein weites Feld an zusätzlichen Möglichkeiten eröffnen, wie z.B. Code-Entrümpelung für reine Textdarstellung (Auflösung von div Boxen), komplette Umgestalltung auf HTML Ebene, für behindertengerechten Zugang optimierte Templates, ..etc.
U.a. würde eine echte Template-Umschaltung auch die Probleme einer reinen CSS Umschaltung ausräumen. Nach meiner Erfahrung muß explizit jedes CSS Attribut im alternativen Stylesheet "überschrieben" werden, damit es nicht aus Versehen in der alternativen Ansicht zum Zuge kommt.. Auch räumte man damit Probleme aus wenn z.B. mehr als ein Stylesheet die Standard Formatierung definiert.
cheers,
Jan
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Hi Peter
Das session_start() muss ins HEADER-Template rein.
z.b. so
Gruß,
Markus
Sorry, fehler von mir.pbickel hat geschrieben: es gibt noch ein Problem:
Wenn ich in der index.php vom Frontend das
session_start();
reinmache, gibt's massive Probleme im Backend.
Das session_start() muss ins HEADER-Template rein.
z.b. so
Code: Alles auswählen
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="de">
<head>
.
.
.
Markus
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
Mist, will in meiner Variante noch nicht klappen.
Ich hab wie bereits geschrieben Deine Varianbte so modifiziert, dass keine CSS-Datei, sondern ein komplett anderes Template geladen wird.
Mein Haupttemplate enhtält nur:
Das Haupttemplate ruft dann also z.B. das eigentliche Darstellungs-Template mit der ID auf.
Klappt auch, aber sobald ich dieses session_start() am Anfang auskommentiere, erhalte ich im Frontend nun folgenden Fehler:
Fatal error: Call to a member function on a non-object in /.../redaxo/include/classes/class.article.inc.php on line 130
Hast Du noch eine Idee, Markus?
Peter.
Ich hab wie bereits geschrieben Deine Varianbte so modifiziert, dass keine CSS-Datei, sondern ein komplett anderes Template geladen wird.
Mein Haupttemplate enhtält nur:
Code: Alles auswählen
<?
// session_start();
if ( empty($_SESSION['REX']['CSS'])) {
$_SESSION['REX']['CSS'] = '1';
}
if ( !empty( $_REQUEST['REX']['CSS'])) {
$_SESSION['REX']['CSS'] = $_REQUEST['REX']['CSS'];
}
switch( $_SESSION['REX']['CSS']) {
case '1':
$style = '2';
break;
case '2':
$style = '4';
default:
$style = '2';
}
include $REX[INCLUDE_PATH]."/generated/templates/".$style.".template";
?>
Klappt auch, aber sobald ich dieses session_start() am Anfang auskommentiere, erhalte ich im Frontend nun folgenden Fehler:
Fatal error: Call to a member function on a non-object in /.../redaxo/include/classes/class.article.inc.php on line 130
Hast Du noch eine Idee, Markus?
Peter.
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Hi Peter,
sieht für mich so aus, als würde der Fehler hier liegen:
Aber ich weiss noch nicht warum...
kann ich nen Zugang bekommen?
Gruß,
Markus
sieht für mich so aus, als würde der Fehler hier liegen:
Code: Alles auswählen
<input type="hidden" name="article_id" value="<?php echo $this->getValue('article_id') ?>">
kann ich nen Zugang bekommen?
Gruß,
Markus
- Thomas.Blum
- Entwickler
- Beiträge: 5063
- Registriert: 24. Aug 2004, 22:11
- Wohnort: Dresden
- Kontaktdaten: Website
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
Hi,
also wen's interessiert - hier meine Lösung.
Markus' Ansatz hat bei mir leider nicht funktioniert. Dafür hat mir Thomas ein Code-Schnipsel geschickt, das zum Ziel führte.
Ins Basis-Template ganz an den Anfang:
Der Rest ist dann nur noch Kinderspiel.
Wenn man CSS-Dateien mit indiviuellem Hintergrund wechseln will:Zu sehen beispielsweise unter www.seg-holstein.de
Wenn man sogar die ganzen Templates wechseln will:Mehr darf dann normalerweise nicht im Basis-Template stehen, da hier ja die kompletten Templates includet werden.
Und schließlich noch der Link für den Besucher zum Wechseln des Layouts:
Viel Spaß,
Peter.
also wen's interessiert - hier meine Lösung.
Markus' Ansatz hat bei mir leider nicht funktioniert. Dafür hat mir Thomas ein Code-Schnipsel geschickt, das zum Ziel führte.
Ins Basis-Template ganz an den Anfang:
Code: Alles auswählen
<?php
session_start();
if ( isset($_GET['style']) ) {
$_SESSION['style'] = $_GET['style'];
} elseif ( !isset($_SESSION['style']) ) {
$_SESSION['style'] = '1';
}
?>
Wenn man CSS-Dateien mit indiviuellem Hintergrund wechseln will:
Code: Alles auswählen
<?
switch ($_SESSION['style']) {
case '1':
$css = 'background1.css';
break;
case '2':
$css = 'background2.css';
break;
}
?>
<link href="files/<? echo $css; ?>" rel="stylesheet" media="screen" />
Wenn man sogar die ganzen Templates wechseln will:
Code: Alles auswählen
<?php
switch ($_SESSION['style']) {
case '1':
$layout = '2';
break;
case '2':
$layout = '5';
$break;
}
include $REX[INCLUDE_PATH]."/generated/templates/".$layout.".template";
?>
Und schließlich noch der Link für den Besucher zum Wechseln des Layouts:
Code: Alles auswählen
<?
Layout:
echo " <a href='".$_SERVER[PHP_SELF]."?article_id=".$this->getValue('article_id')."&style=1'>1</a> |";
echo " <a href='".$_SERVER[PHP_SELF]."?article_id=".$this->getValue('article_id')."&style=2'>2</a> |";
?>
Peter.
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Hi
Gruß,
Markus
Das geht noch kürzer:pbickel hat geschrieben: Und schließlich noch der Link für den Besucher zum Wechseln des Layouts:Code: Alles auswählen
<? Layout: echo " <a href='".$_SERVER[PHP_SELF]."?article_id=".$this->getValue('article_id')."&style=1'>1</a> |"; echo " <a href='".$_SERVER[PHP_SELF]."?article_id=".$this->getValue('article_id')."&style=2'>2</a> |"; ?>
Code: Alles auswählen
<?
Layout:
echo " <a href='". rex_getUrl( '', '', '&style=1') ."'>1</a> |";
echo " <a href='". rex_getUrl( '', '', '&style=2') ."'>2</a> |";
?>
Markus
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
- Thomas.Blum
- Entwickler
- Beiträge: 5063
- Registriert: 24. Aug 2004, 22:11
- Wohnort: Dresden
- Kontaktdaten: Website
Hej Peter,
redaxo/include/functions/function_rex_modrewrite.inc.php
zwischen den ersten Anführungszeichen kannst du optional eine andere ArtieklId setzen. Zwischen den zweiten Anführungszeichen eine SprachId falls du auf eine andere Sprache verweisen möchtest.
vg Thomas
redaxo/include/functions/function_rex_modrewrite.inc.php
Code: Alles auswählen
$url = rex_getUrl($id, $clang, $params);
vg Thomas
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
Falls übrigens jemand Lust hat, meine Lösung zu verfeinern und dann den Code zu posten:
Eine interessante Sache wäre noch, das gewählte Layout in einem Cookie zu speichern und beim nächsten Besuch abzufragen. So würde das gewählte Layout nicht nur für die Dauer des Besuchs erhalten bleiben.
Schöne Grüße,
Peter.
Eine interessante Sache wäre noch, das gewählte Layout in einem Cookie zu speichern und beim nächsten Besuch abzufragen. So würde das gewählte Layout nicht nur für die Dauer des Besuchs erhalten bleiben.
Schöne Grüße,
Peter.
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website
Hi Peter,
das bekommst du doch auch alleine hin:
http://www.php.net/manual/de/function.setcookie.php
Gruß,
Markus
das bekommst du doch auch alleine hin:
http://www.php.net/manual/de/function.setcookie.php
Gruß,
Markus
- Peter.Bickel
- Beiträge: 1856
- Registriert: 25. Jan 2005, 21:17
- Wohnort: Schleswig-Holstein
- Kontaktdaten: Website
- Markus.Staab
- Entwickler
- Beiträge: 9634
- Registriert: 29. Jan 2005, 15:50
- Wohnort: Aschaffenburg/Germany
- Kontaktdaten: ICQ Website