We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 47188
    • 4 Posts
    Believe me, I've looked through the forums quite a bit to find the answer to this question and there just doesn't seem to be the answer I'm looking for anywhere.

    First, I'm running on the latest Revo and I want to redirect to my mobile sub-domain, but I need it to go to a specific page, so if I post a link http://mysite.com/page.html to social media or such, a person on a mobile device will be automatically redirected to http://m.mysite.com/page.html. Changing the template according to device is not an option.

    Now at one time there was an excellent add-on called Mobile Redirect which the person behind brainhandles.com created (much kudos goes out to them), it was simple:

    First you created a snippet and call it Mobile_Redirect or whatever you wanted

    <?php
    /*     Mobile_redirect
           01/28/11    1:40 pm cet
           01/28/11    6:14 am est
           11/24/09   10:31 am est
    
           original code: http://www.brainhandles.com/techno-thoughts/detecting-mobile-browsers
           usage: call in the top of your template
           [[!Mobile_redirect? &mID=`1`]]
           [[!Mobile_redirect? &url=`http://redirectdomain.com`]]
           [[!Mobile_redirect? &exclude=`iPad`]]
    
           link back to main page:
           add &views=1 to the link
           ex: <a href="http://yourmainsite.com?views=1">Link Back to Main site</a>
    */
    
    // set the MODx document ID of the mobile page
    $mid = isset($mID) ? $mID : "";
    
    // set the url you want to redirect to
    // http://domain.com   or   http://sub.domain.com
    $url = isset($url) ? $url : 'http://m.mysite.com';
    
    // add any names you want to exclude
    $exclude = isset($exclude) ? explode(',', $exclude) : array();
    
    if(isset($_GET['views']) || $_SESSION['views'] =='1'){
        $_SESSION['views'] = 1;
    }else{
        if(isset($_SERVER["HTTP_X_WAP_PROFILE"]) || preg_match("/wap\.|\.wap/i",$_SERVER["HTTP_ACCEPT"])) {
            if($mid =="" && $url !=""){
                header("Location: ".$url."");
            }else{
                $goto = $modx->makeUrl($mid);
                $modx->sendRedirect($goto);
            }
        }
        if(isset($_SERVER["HTTP_USER_AGENT"])){
            $uastring = $_SERVER["HTTP_USER_AGENT"]; 
            if(preg_match("/Creative\ AutoUpdate/i",$_SERVER["HTTP_USER_AGENT"])) { 
                return false;
            }
            $check_for_mobiles = true;
            foreach($exclude as $not_mobil){
                if( stripos($uastring, $not_mobil) !== false ) {
                    $check_for_mobiles = false;
                    break;
                }
            }
            
            if ( $check_for_mobiles == true ) {
                $mobiles = array("webOS","midp", "j2me", "avantg", "iphone", "docomo", "novarra", "palmos", "palmsource", "240x320", "opwv", "chtml", "pda", "windows\ ce", "mmp\/", "blackberry", "mib\/", "symbian", "wireless", "nokia", "hand", "mobi", "phone", "cdm", "up\.b", "audio", "SIE\-", "SEC\-", "samsung", "HTC", "mot\-", "mitsu", "sagem", "sony", "alcatel", "lg", "erics", "vx", "NEC", "philips", "mmm", "xx", "mobi", "panasonic", "sharp", "wap", "sch", "rover", "pocket", "benq", "java", "pt", "pg", "vox", "amoi", "bird", "compal", "kg", "voda", "sany", "kdd", "dbt", "sendo", "sgh", "gradi", "jb", "\d\d\di", "moto");
                foreach($mobiles as $mobil){
                    if( stripos($uastring, $mobil) !== false ){
                        if($mid =="" && $url !=""){
                            header("Location: ".$url."");
                        }else{
                            $goto = $modx->makeUrl($mid);
                            $modx->sendRedirect($goto);
                        }
                        exit;
                    }
                }
            }
        }
    }



    Next you placed a snippet call on your page above the head section:

    [[!Mobile_redirect? &url=`http://m.mysite.com/` ]]


    but, to my surprise I found that if I placed one call on my home page and another on all interior pages (see following) it would work redirecting like a charm!

    [[!Mobile_redirect? &url=`http://m.mysite.com/` &exclude=`iPad`]]
    
    [[!Mobile_redirect? &url=`http://m.mysite.com/[[~[[*id]]]]` &exclude=`iPad`]]
    


    Now, what really made this add on perfect was the ability to return to the main site as is commented in the original snippet, all one had to do was add the following to their website's menu:

    <a href="http://mysite.com?views=1">Go To Main Site</a>


    Ok, so what's the problem if everything worked well? Well the add-on is no longer maintained by the folks at brainhandles.com.

    After two years, I have decided to stop maintaining and updating this code. I'm not currently using it and it was getting to be in need of an overhaul with all the devices that keep changing the landscape. I'd suggest the open source DetectMobileBrowser.com.


    Ok, cool, so I go on over to DetectMobileBrowser.com and get the PHP code:


    <?php
    $useragent=$_SERVER['HTTP_USER_AGENT'];
    if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4)))
    header('Location: http://mysite.com/mobile');
    ?>


    Though it works, it will not redirect to a specific page, even if I change the Location to http://m.mysite.com/[[~[[*id]]]]. No matter how I try, It will simply redirect to the home page, which isn't good if you're trying to leverage social media for marketing...you simply can't send someone to scour through a pile of articles now can you?


    So, my question is this; as a front end designer who trembles at the thought of treading where the big kids play with PHP, I can't seem to integrate the two so that in the future, as the code from DetectMobileBrowser.com updates, I can simply update the Mobile_redirect snippet. I would love to keep an updated device list as provided by DetectMobileBrowser.com, but with the functionality of the original Brainhandles code.


    Any help on this would be so very, very, very appreciated. Heck, even if you could post an updated Mobile_redirect snippet with the detectmobilebrowser.com code so that I could see the logic would make me forever in debt to you!


    Cheers

    This question has been answered by tux384. See the first response.

    • discuss.answer
      • 47188
      • 4 Posts
      Vasis over at stackoverflow answered and updated the code for me, those guys rock, but I thought I would come right back to share because I've noticed a few who are looking for this question to be answered. Use the following snippet update and be sure to clear cache on your mobile browsers before testing. The return link also works as it did in the original snippet.

      <?php
      /*     Mobile_redirect
             01/28/11    1:40 pm cet
             01/28/11    6:14 am est
             11/24/09   10:31 am est
      
             original code: http://www.brainhandles.com/techno-thoughts/detecting-mobile-browsers
             usage: call in the top of your template
             [[!Mobile_redirect? &mID=`1`]]
             [[!Mobile_redirect? &url=`http://redirectdomain.com`]]
             [[!Mobile_redirect? &exclude=`iPad`]]
      
             link back to main page:
             add &views=1 to the link
             ex: <a href="http://yourmaindemonstrationsite.com?views=1">Link Back to Main site</a>
      */
      
      // set the MODx document ID of the mobile page
      $mid = isset($mID) ? $mID : "";
      
      // set the url you want to redirect to
      // http://domain.com   or   http://sub.domain.com
      $url = isset($url) ? $url : 'http://m.demonstrationsite.com';
      
      // add any names you want to exclude
      $exclude = isset($exclude) ? explode(',', $exclude) : array();
      
      if(isset($_GET['views']) || $_SESSION['views'] =='1'){
          $_SESSION['views'] = 1;
      }else{
          $useragent=$_SERVER['HTTP_USER_AGENT'];
          if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))) {
              if($mid =="" && $url !=""){
                  header("Location: ".$url."");
              }else{
                  $goto = $modx->makeUrl($mid);
                  $modx->sendRedirect($goto);
              }
          }
      }
      
        • 9995
        • 1,613 Posts
        thanks, I just came to the conclusion to use ?view=1 for my mailings so on mobile the newsletter links to newspages can be shown and doesn't redirect to the homepage smiley
        [ed. note: fourroses666 last edited this post 12 years, 6 months ago.]
          Evolution user, I like the back-end speed and simplicity smiley