We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 8168
    • 1,118 Posts
    Hi, I really don’t know PHP - but would be interested to know if this code idea would work...

    if(!strstr($modx->documentContent, "casestudy")) { // check to see if its a case study
    $overrideTemplate = $_COOKIE['portfolioItem'];
    }



    So...

    If this was included in the Template Switcher plugin - would any MODx document that had the code <!--casestudy--> included within it, switch the template its rendered within to "portfolioItem"



    Would that work?

    I would ideally like this function to be called on a designated button click in one of the MODx documents located on an a href




    Cheers
      • 28042 ☆ A M B ☆
      • 24,524 Posts
      The ! means "not", or the opposite (it’s called a "bang") so if you get rid of the bang, it would work; if you’re using cookies to store this information. If you just want to have the template switched to a template named portfolioItem, then you just want
      if(strstr($modx->documentContent, "casestudy")) { // check to see if its a case study
      $overrideTemplate = 'portfolioItem';
      }
      


      The COOKIE bit in the original code is so the visitor can select the template he likes and will get that template whenever he comes to the site.

        Studying MODX in the desert - http://sottwell.com
        Tips and Tricks from the MODX Forums and Slack Channels - http://modxcookbook.com
        Join the Slack Community - http://modx.org
        • 8168
        • 1,118 Posts
        Thanks Susan! I see... Thanks

        How would one go about setting the value of the cookie in this way?

        For example I have a mobile detection script and I would love for a user to be able to switch it off on click of a button and reload the page with this switched off - this would be the ideal solution i am after!

        Code from the Mobile Detection is below:

        function mobile_device_detect($iphone=true,$android=true,$opera=true,$blackberry=true,$palm=true,$windows=true,$mobileredirect=false,$desktopredirect=false){
        
        	$mobile_browser   = false; // set mobile browser as false till we can prove otherwise
        	$user_agent       = $_SERVER['HTTP_USER_AGENT']; // get the user agent value - this should be cleaned to ensure no nefarious input gets executed
        	$accept           = $_SERVER['HTTP_ACCEPT']; // get the content accept value - this should be cleaned to ensure no nefarious input gets executed
        
        	switch(true){ // using a switch against the following statements which could return true is more efficient than the previous method of using if statements
        
        		case (eregi('ipod',$user_agent)||eregi('iphone',$user_agent)); // we find the words iphone or ipod in the user agent
        			$mobile_browser = $iphone; // mobile browser is either true or false depending on the setting of iphone when calling the function
        			if(substr($iphone,0,4)=='http'){ // does the value of iphone resemble a url
        				$mobileredirect = $iphone; // set the mobile redirect url to the url value stored in the iphone value
        			} // ends the if for iphone being a url
        		break; // break out and skip the rest if we've had a match on the iphone or ipod
        
        		case (eregi('android',$user_agent));	// we find android in the user agent
        			$mobile_browser = $android; // mobile browser is either true or false depending on the setting of android when calling the function
        			if(substr($android,0,4)=='http'){ // does the value of android resemble a url
        				$mobileredirect = $android; // set the mobile redirect url to the url value stored in the android value
        			} // ends the if for android being a url
        		break; // break out and skip the rest if we've had a match on android
        
        		case (eregi('opera mini',$user_agent)); // we find opera mini in the user agent
        			$mobile_browser = $opera; // mobile browser is either true or false depending on the setting of opera when calling the function
        			if(substr($opera,0,4)=='http'){ // does the value of opera resemble a rul
        				$mobileredirect = $opera; // set the mobile redirect url to the url value stored in the opera value
        			} // ends the if for opera being a url 
        		break; // break out and skip the rest if we've had a match on opera
        
        		case (eregi('blackberry',$user_agent)); // we find blackberry in the user agent
        			$mobile_browser = $blackberry; // mobile browser is either true or false depending on the setting of blackberry when calling the function
        			if(substr($blackberry,0,4)=='http'){ // does the value of blackberry resemble a rul
        				$mobileredirect = $blackberry; // set the mobile redirect url to the url value stored in the blackberry value
        			} // ends the if for blackberry being a url 
        		break; // break out and skip the rest if we've had a match on blackberry
        
        		case (preg_match('/(palm os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine)/i',$user_agent)); // we find palm os in the user agent - the i at the end makes it case insensitive
        			$mobile_browser = $palm; // mobile browser is either true or false depending on the setting of palm when calling the function
        			if(substr($palm,0,4)=='http'){ // does the value of palm resemble a rul
        				$mobileredirect = $palm; // set the mobile redirect url to the url value stored in the palm value
        			} // ends the if for palm being a url 
        		break; // break out and skip the rest if we've had a match on palm os
        
        		case (preg_match('/(windows ce; ppc;|windows ce; smartphone;|windows ce; iemobile)/i',$user_agent)); // we find windows mobile in the user agent - the i at the end makes it case insensitive
        			$mobile_browser = $windows; // mobile browser is either true or false depending on the setting of windows when calling the function
        			if(substr($windows,0,4)=='http'){ // does the value of windows resemble a rul
        				$mobileredirect = $windows; // set the mobile redirect url to the url value stored in the windows value
        			} // ends the if for windows being a url 
        		break; // break out and skip the rest if we've had a match on windows
        
        		case (preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|pda|psp|treo)/i',$user_agent)); // check if any of the values listed create a match on the user agent - these are some of the most common terms used in agents to identify them as being mobile devices - the i at the end makes it case insensitive
        			$mobile_browser = true; // set mobile browser to true
        		break; // break out and skip the rest if we've preg_match on the user agent returned true 
        
        		case ((strpos($accept,'text/vnd.wap.wml')>0)||(strpos($accept,'application/vnd.wap.xhtml+xml')>0)); // is the device showing signs of support for text/vnd.wap.wml or application/vnd.wap.xhtml+xml
        			$mobile_browser = true; // set mobile browser to true
        		break; // break out and skip the rest if we've had a match on the content accept headers
        
        		case (isset($_SERVER['HTTP_X_WAP_PROFILE'])||isset($_SERVER['HTTP_PROFILE'])); // is the device giving us a HTTP_X_WAP_PROFILE or HTTP_PROFILE header - only mobile devices would do this
        			$mobile_browser = true; // set mobile browser to true
        		break; // break out and skip the final step if we've had a return true on the mobile specfic headers
        
        		case (in_array(strtolower(substr($user_agent,0,4)),array('1207'=>'1207','3gso'=>'3gso','4thp'=>'4thp','501i'=>'501i','502i'=>'502i','503i'=>'503i','504i'=>'504i','505i'=>'505i','506i'=>'506i','6310'=>'6310','6590'=>'6590','770s'=>'770s','802s'=>'802s','a wa'=>'a wa','acer'=>'acer','acs-'=>'acs-','airn'=>'airn','alav'=>'alav','asus'=>'asus','attw'=>'attw','au-m'=>'au-m','aur '=>'aur ','aus '=>'aus ','abac'=>'abac','acoo'=>'acoo','aiko'=>'aiko','alco'=>'alco','alca'=>'alca','amoi'=>'amoi','anex'=>'anex','anny'=>'anny','anyw'=>'anyw','aptu'=>'aptu','arch'=>'arch','argo'=>'argo','bell'=>'bell','bird'=>'bird','bw-n'=>'bw-n','bw-u'=>'bw-u','beck'=>'beck','benq'=>'benq','bilb'=>'bilb','blac'=>'blac','c55/'=>'c55/','cdm-'=>'cdm-','chtm'=>'chtm','capi'=>'capi','comp'=>'comp','cond'=>'cond','craw'=>'craw','dall'=>'dall','dbte'=>'dbte','dc-s'=>'dc-s','dica'=>'dica','ds-d'=>'ds-d','ds12'=>'ds12','dait'=>'dait','devi'=>'devi','dmob'=>'dmob','doco'=>'doco','dopo'=>'dopo','el49'=>'el49','erk0'=>'erk0','esl8'=>'esl8','ez40'=>'ez40','ez60'=>'ez60','ez70'=>'ez70','ezos'=>'ezos','ezze'=>'ezze','elai'=>'elai','emul'=>'emul','eric'=>'eric','ezwa'=>'ezwa','fake'=>'fake','fly-'=>'fly-','fly_'=>'fly_','g-mo'=>'g-mo','g1 u'=>'g1 u','g560'=>'g560','gf-5'=>'gf-5','grun'=>'grun','gene'=>'gene','go.w'=>'go.w','good'=>'good','grad'=>'grad','hcit'=>'hcit','hd-m'=>'hd-m','hd-p'=>'hd-p','hd-t'=>'hd-t','hei-'=>'hei-','hp i'=>'hp i','hpip'=>'hpip','hs-c'=>'hs-c','htc '=>'htc ','htc-'=>'htc-','htca'=>'htca','htcg'=>'htcg','htcp'=>'htcp','htcs'=>'htcs','htct'=>'htct','htc_'=>'htc_','haie'=>'haie','hita'=>'hita','huaw'=>'huaw','hutc'=>'hutc','i-20'=>'i-20','i-go'=>'i-go','i-ma'=>'i-ma','i230'=>'i230','iac'=>'iac','iac-'=>'iac-','iac/'=>'iac/','ig01'=>'ig01','im1k'=>'im1k','inno'=>'inno','iris'=>'iris','jata'=>'jata','java'=>'java','kddi'=>'kddi','kgt'=>'kgt','kgt/'=>'kgt/','kpt '=>'kpt ','kwc-'=>'kwc-','klon'=>'klon','lexi'=>'lexi','lg g'=>'lg g','lg-a'=>'lg-a','lg-b'=>'lg-b','lg-c'=>'lg-c','lg-d'=>'lg-d','lg-f'=>'lg-f','lg-g'=>'lg-g','lg-k'=>'lg-k','lg-l'=>'lg-l','lg-m'=>'lg-m','lg-o'=>'lg-o','lg-p'=>'lg-p','lg-s'=>'lg-s','lg-t'=>'lg-t','lg-u'=>'lg-u','lg-w'=>'lg-w','lg/k'=>'lg/k','lg/l'=>'lg/l','lg/u'=>'lg/u','lg50'=>'lg50','lg54'=>'lg54','lge-'=>'lge-','lge/'=>'lge/','lynx'=>'lynx','leno'=>'leno','m1-w'=>'m1-w','m3ga'=>'m3ga','m50/'=>'m50/','maui'=>'maui','mc01'=>'mc01','mc21'=>'mc21','mcca'=>'mcca','medi'=>'medi','meri'=>'meri','mio8'=>'mio8','mioa'=>'mioa','mo01'=>'mo01','mo02'=>'mo02','mode'=>'mode','modo'=>'modo','mot '=>'mot ','mot-'=>'mot-','mt50'=>'mt50','mtp1'=>'mtp1','mtv '=>'mtv ','mate'=>'mate','maxo'=>'maxo','merc'=>'merc','mits'=>'mits','mobi'=>'mobi','motv'=>'motv','mozz'=>'mozz','n100'=>'n100','n101'=>'n101','n102'=>'n102','n202'=>'n202','n203'=>'n203','n300'=>'n300','n302'=>'n302','n500'=>'n500','n502'=>'n502','n505'=>'n505','n700'=>'n700','n701'=>'n701','n710'=>'n710','nec-'=>'nec-','nem-'=>'nem-','newg'=>'newg','neon'=>'neon','netf'=>'netf','noki'=>'noki','nzph'=>'nzph','o2 x'=>'o2 x','o2-x'=>'o2-x','opwv'=>'opwv','owg1'=>'owg1','opti'=>'opti','oran'=>'oran','p800'=>'p800','pand'=>'pand','pg-1'=>'pg-1','pg-2'=>'pg-2','pg-3'=>'pg-3','pg-6'=>'pg-6','pg-8'=>'pg-8','pg-c'=>'pg-c','pg13'=>'pg13','phil'=>'phil','pn-2'=>'pn-2','pt-g'=>'pt-g','palm'=>'palm','pana'=>'pana','pire'=>'pire','pock'=>'pock','pose'=>'pose','psio'=>'psio','qa-a'=>'qa-a','qc-2'=>'qc-2','qc-3'=>'qc-3','qc-5'=>'qc-5','qc-7'=>'qc-7','qc07'=>'qc07','qc12'=>'qc12','qc21'=>'qc21','qc32'=>'qc32','qc60'=>'qc60','qci-'=>'qci-','qwap'=>'qwap','qtek'=>'qtek','r380'=>'r380','r600'=>'r600','raks'=>'raks','rim9'=>'rim9','rove'=>'rove','s55/'=>'s55/','sage'=>'sage','sams'=>'sams','sc01'=>'sc01','sch-'=>'sch-','scp-'=>'scp-','sdk/'=>'sdk/','se47'=>'se47','sec-'=>'sec-','sec0'=>'sec0','sec1'=>'sec1','semc'=>'semc','sgh-'=>'sgh-','shar'=>'shar','sie-'=>'sie-','sk-0'=>'sk-0','sl45'=>'sl45','slid'=>'slid','smb3'=>'smb3','smt5'=>'smt5','sp01'=>'sp01','sph-'=>'sph-','spv '=>'spv ','spv-'=>'spv-','sy01'=>'sy01','samm'=>'samm','sany'=>'sany','sava'=>'sava','scoo'=>'scoo','send'=>'send','siem'=>'siem','smar'=>'smar','smit'=>'smit','soft'=>'soft','sony'=>'sony','t-mo'=>'t-mo','t218'=>'t218','t250'=>'t250','t600'=>'t600','t610'=>'t610','t618'=>'t618','tcl-'=>'tcl-','tdg-'=>'tdg-','telm'=>'telm','tim-'=>'tim-','ts70'=>'ts70','tsm-'=>'tsm-','tsm3'=>'tsm3','tsm5'=>'tsm5','tx-9'=>'tx-9','tagt'=>'tagt','talk'=>'talk','teli'=>'teli','topl'=>'topl','tosh'=>'tosh','up.b'=>'up.b','upg1'=>'upg1','utst'=>'utst','v400'=>'v400','v750'=>'v750','veri'=>'veri','vk-v'=>'vk-v','vk40'=>'vk40','vk50'=>'vk50','vk52'=>'vk52','vk53'=>'vk53','vm40'=>'vm40','vx98'=>'vx98','virg'=>'virg','vite'=>'vite','voda'=>'voda','vulc'=>'vulc','w3c '=>'w3c ','w3c-'=>'w3c-','wapj'=>'wapj','wapp'=>'wapp','wapu'=>'wapu','wapm'=>'wapm','wig '=>'wig ','wapi'=>'wapi','wapr'=>'wapr','wapv'=>'wapv','wapy'=>'wapy','wapa'=>'wapa','waps'=>'waps','wapt'=>'wapt','winc'=>'winc','winw'=>'winw','wonu'=>'wonu','x700'=>'x700','xda2'=>'xda2','xdag'=>'xdag','yas-'=>'yas-','your'=>'your','zte-'=>'zte-','zeto'=>'zeto','acs-'=>'acs-','alav'=>'alav','alca'=>'alca','amoi'=>'amoi','aste'=>'aste','audi'=>'audi','avan'=>'avan','benq'=>'benq','bird'=>'bird','blac'=>'blac','blaz'=>'blaz','brew'=>'brew','brvw'=>'brvw','bumb'=>'bumb','ccwa'=>'ccwa','cell'=>'cell','cldc'=>'cldc','cmd-'=>'cmd-','dang'=>'dang','doco'=>'doco','eml2'=>'eml2','eric'=>'eric','fetc'=>'fetc','hipt'=>'hipt','http'=>'http','ibro'=>'ibro','idea'=>'idea','ikom'=>'ikom','inno'=>'inno','ipaq'=>'ipaq','jbro'=>'jbro','jemu'=>'jemu','java'=>'java','jigs'=>'jigs','kddi'=>'kddi','keji'=>'keji','kyoc'=>'kyoc','kyok'=>'kyok','leno'=>'leno','lg-c'=>'lg-c','lg-d'=>'lg-d','lg-g'=>'lg-g','lge-'=>'lge-','libw'=>'libw','m-cr'=>'m-cr','maui'=>'maui','maxo'=>'maxo','midp'=>'midp','mits'=>'mits','mmef'=>'mmef','mobi'=>'mobi','mot-'=>'mot-','moto'=>'moto','mwbp'=>'mwbp','mywa'=>'mywa','nec-'=>'nec-','newt'=>'newt','nok6'=>'nok6','noki'=>'noki','o2im'=>'o2im','opwv'=>'opwv','palm'=>'palm','pana'=>'pana','pant'=>'pant','pdxg'=>'pdxg','phil'=>'phil','play'=>'play','pluc'=>'pluc','port'=>'port','prox'=>'prox','qtek'=>'qtek','qwap'=>'qwap','rozo'=>'rozo','sage'=>'sage','sama'=>'sama','sams'=>'sams','sany'=>'sany','sch-'=>'sch-','sec-'=>'sec-','send'=>'send','seri'=>'seri','sgh-'=>'sgh-','shar'=>'shar','sie-'=>'sie-','siem'=>'siem','smal'=>'smal','smar'=>'smar','sony'=>'sony','sph-'=>'sph-','symb'=>'symb','t-mo'=>'t-mo','teli'=>'teli','tim-'=>'tim-','tosh'=>'tosh','treo'=>'treo','tsm-'=>'tsm-','upg1'=>'upg1','upsi'=>'upsi','vk-v'=>'vk-v','voda'=>'voda','vx52'=>'vx52','vx53'=>'vx53','vx60'=>'vx60','vx61'=>'vx61','vx70'=>'vx70','vx80'=>'vx80','vx81'=>'vx81','vx83'=>'vx83','vx85'=>'vx85','wap-'=>'wap-','wapa'=>'wapa','wapi'=>'wapi','wapp'=>'wapp','wapr'=>'wapr','webc'=>'webc','whit'=>'whit','winw'=>'winw','wmlb'=>'wmlb','xda-'=>'xda-',))); // check against a list of trimmed user agents to see if we find a match
        			$mobile_browser = true; // set mobile browser to true
        		break; // break even though it's the last statement in the switch so there's nothing to break away from but it seems better to include it than exclude it
        
        	} // ends the switch 
        
        	// tell adaptation services (transcoders and proxies) to not alter the content based on user agent as it's already being managed by this script
        	header('Cache-Control: no-transform'); // http://mobiforge.com/developing/story/setting-http-headers-advise-transcoding-proxies
        	header('Vary: User-Agent, Accept'); // http://mobiforge.com/developing/story/setting-http-headers-advise-transcoding-proxies
        
        	// if redirect (either the value of the mobile or desktop redirect depending on the value of $mobile_browser) is true redirect else we return the status of $mobile_browser
        	if($redirect = ($mobile_browser==true) ? $mobileredirect : $desktopredirect){
        		header('Location: '.$redirect); // redirect to the right url for this device
        		exit;
        	}else{ 
        		return $mobile_browser; // will return either true or false 
        	}
        
        } // ends function mobile_device_detect
        
        if(!strstr($modx->documentContent, "donotswitch")) { // this page is not switchable
        	if(mobile_device_detect(true,true,true,true,true,true,false,false)){
        		$overrideTemplate = $template;
        	} else if (isset($_COOKIE['template']) && $usecookie == 'true') {
        		$overrideTemplate = $_COOKIE['template']; 
        	}
        	if (isset($overrideTemplate)) {
        		$table = $modx->getFullTableName("site_templates");
        		$result = $modx->db->select("id, content",$table,"templatename = '".$overrideTemplate."'");
        		if($modx->db->getRecordCount($result) == 1) {
        			$row = $modx->db->getRow($result);
        			$modx->documentObject['template']=$row['id'];
        			$modx->documentContent = $row['content'];
        		} else {
        			$this->messageQuit("Error retrieving template.");
        		}
        		if($usecookie == 'true') {
        			setcookie("template",$overrideTemplate,time()+604800, "/", "", 0);
        		}
        	}
        }



        This way - on clicking a button on the mobile template - they can reload the current page and set a cookie to i am not a mobile and therefore view the site it its desktop view format... Does that make sense?

        Thanks!
          • 28042 ☆ A M B ☆
          • 24,524 Posts
          Have the button be the submit input in a small form, and use the POST value to determine which template to use. Added to that, the value of the button could be changed depending on which template is being used; the button’s value would be changed to the opposite template.
          if($_POST['template'] == 'mobile') { 
              $overrideTemplate = 'mobile';
              $modx->documentContent = str_replace('value="mobile"', 'value="not-mobile"', $modx->documentContent);
          { else } // it's not mobile so it must be the other
              $overrideTemplate = 'not-mobile';
              $modx->documentContent = str_replace('value="not-mobile"', 'value="mobile"', $modx->documentContent);    
          }

          Note the double == there; that is a comparison "is equal to" (there is also ===, but that’s another story!) A single = means assignment, the variable on the left is assigned the value on the right. That is a very common beginners (and not-so-beginners!) mistake.
          if($variableName = 'value') { // do something...

          will always return true, and something will always be done, since you’re assigning ’value’ to the variable, not comparing the two.
            Studying MODX in the desert - http://sottwell.com
            Tips and Tricks from the MODX Forums and Slack Channels - http://modxcookbook.com
            Join the Slack Community - http://modx.org
            • 8168
            • 1,118 Posts
            Thanks Susan,

            I will have a go at integrating that - could you give me a 1 liner explanation of what it is doing? PHP really does not mean anything to me... Thanks ever so much!
              • 8168
              • 1,118 Posts
              Hiya,

              What code should be applied to the mini form to action this?

              <form action="" method="post">

              <input name="switch" type="button" />

              </form>



              Cheers,

              And does the code you have written go into the TemplateSwitcher Plugin code?
                • 28042 ☆ A M B ☆
                • 24,524 Posts
                When you submit a form, all the values of the fields and buttons in the form are sent to the action="..." of the form; (or it simply refreshes the same page if no action attribute is present) are sent in a POST array of name=value. In PHP, this is retrieved in the $_POST array.

                So if you use a small form
                <form id="switchTemplate" action="[~[*id*]~]" method="post">
                <fieldset>
                <input type="submit" name="template" value="mobile" />
                </fieldset>
                </form>

                then when the user clicks that "mobile" button you will have the $_POST[’template’] value of "mobile". The if(...) statement should be fairly clear; IF the value is "mobile", then switch the template. Or ELSE (it’s not "mobile") switch the template to the not-mobile template.

                The str_replace function has three arguments: the first is the string you’re looking for, the second is the string you want to replace it with, and the third is where you are looking. I just put that there as an example; I don’t think that the documentContent would actually have the form yet; MODx has not yet parsed any tags like chunk tags or the [*content*] tag. That would have to be done with a later system event. Actually, it would probably be best to do that with a snippet that determines what template is being used and puts the opposite value in the input tag attributes.
                <form id="switchTemplate" action="[~[*id*]~]" method="post">
                <fieldset>
                <input type="submit" name="template" value="[!selectTemplate!]" />
                </fieldset>
                </form>

                Such a snippet would look like this:
                <?php
                $templateId = $documentObject['template']; // get the ID of the template being used
                if($templateId == 3) { // is it the ID of the mobile template?
                    return 'not-mobile';  // set the value to the name of the not-mobile template
                } else { // it's not the mobile template,
                    return 'mobile'; // so set the value to the name of the mobile template
                }
                ?>
                

                You would edit the ID number of the mobile template to the ID of your actual mobile template; if you go to Elements -> Manage Elements, the Templates tag the ID of each template is in parentheses next to the template’s name.
                  Studying MODX in the desert - http://sottwell.com
                  Tips and Tricks from the MODX Forums and Slack Channels - http://modxcookbook.com
                  Join the Slack Community - http://modx.org
                  • 28042 ☆ A M B ☆
                  • 24,524 Posts
                  This is how development is done; you have an idea, then you get a better idea, you try it, then get even better ideas, until finally you have something that not only works but is elegant and easy to use.
                    Studying MODX in the desert - http://sottwell.com
                    Tips and Tricks from the MODX Forums and Slack Channels - http://modxcookbook.com
                    Join the Slack Community - http://modx.org
                    • 8168
                    • 1,118 Posts
                    kool....

                    So If i set up a snippet called "selectTemplate" with this code within it

                    <?php
                    $templateId = $documentObject['template']; // get the ID of the template being used
                    if($templateId == 3) { // is it the ID of the mobile template?
                        return 'not-mobile';  // set the value to the name of the not-mobile template
                    } else { // it's not the mobile template,
                        return 'mobile'; // so set the value to the name of the mobile template
                    }
                    ?>


                    And add this little form to the page,

                    <form id="switchTemplate" action="[~[*id*]~]" method="post">
                    <fieldset>
                    <input type="submit" name="template" value="[!selectTemplate!]" />
                    </fieldset>
                    </form>


                    when clicked it should do the trick?
                      • 28042 ☆ A M B ☆
                      • 24,524 Posts
                      Used in conjunction with the plugin, yes.
                      Plugin code:
                      <?php
                      if(!strstr($modx->documentContent, "donotswitch")) { // this page is not switchable
                          if(isset($_POST['template']) && $_POST['template'] == 'mobile') { // edit this to the button's value
                              $overrideTemplate = 'mobile'; // edit this to your mobile template name
                          } else {
                              $overrideTemplate = 'not-mobile'; // edit this to your non-mobile template name
                          }
                          if (isset($overrideTemplate)) {
                            $table = $modx->getFullTableName("site_templates");
                            $result = $modx->db->select("id, content",$table,"templatename = '".$overrideTemplate."'");
                            if($modx->db->getRecordCount($result) == 1) {
                              $row = $modx->db->getRow($result);
                              $modx->documentObject['template']=$row['id'];
                              $modx->documentContent = $row['content'];
                            } else {
                              $this->messageQuit("Error retrieving template.");
                            }
                            if($usecookie == 'yes') {
                              setcookie("template",$overrideTemplate,time()+604800, "/", "", 0);
                            }
                          }
                      } // end if page is switchable
                      ?>
                      

                      You’ll need to edit the names used for the templates and for the value of the button.
                        Studying MODX in the desert - http://sottwell.com
                        Tips and Tricks from the MODX Forums and Slack Channels - http://modxcookbook.com
                        Join the Slack Community - http://modx.org