2017-07-15 1 views

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.

+0

Cool! Merci bummzack pour l'aide! Votre réponse résout le problème. – alex