J'ai fait pour mon site un thème supplémentaire pour les cecutients (personnes ayant une faible vision). Puis-je modifier dynamiquement le thème du site en appuyant sur un bouton de la page principale?Puis-je modifier dynamiquement le thème SilverStripe?
3
A
Répondre
4
Oui, vous pouvez le faire. Je vous suggère de mettre en place une action sur votre contrôleur qui mettra à jour le thème. Vous pouvez ensuite stocker le thème actif dans la session et l'utiliser chaque fois qu'une page est visitée.
Voici comment j'accomplis cette (dans votre Page_Controller
):
class Page_Controller extends ContentController
{
private static $allowed_actions = ['changeTheme'];
public function init(){
parent::init();
if ($theme = Session::get('theme')) {
Config::inst()->update('SSViewer', 'theme', $theme);
}
}
public function changeTheme()
{
$theme = $this->request->param('ID');
$existingThemes = SiteConfig::current_site_config()->getAvailableThemes();
if (in_array($theme, $existingThemes)) {
// Set the theme in the config
Config::inst()->update('SSViewer', 'theme', $theme);
// Persist the theme to the session
Session::set('theme', $theme);
}
// redirect back to where we came from
return $this->redirectBack();
}
}
Maintenant vous avez une action changeTheme
dans votre Page_Controller
, cela signifie que vous pouvez l'utiliser sur chaque page. Ensuite, vous pouvez simplement déclencher un changement de thème avec un lien, par exemple:
<%-- replace otherTheme with the folder-name of your theme --%>
<a href="$Link('changeTheme')/otherTheme">Change to other theme</a>
Dans le modèle Page.ss
de votre base thème, vous pouvez ajouter un lien vers le thème de cecutients. Et dans le thème pour les cecutients, vous ajoutez un lien vers le thème de base.
Cool! Merci bummzack pour l'aide! Votre réponse résout le problème. – alex