ilch Forum » Ilch Clan 1.1 » Design und Templates » Mobile Template

Geschlossen
  1. #1
    User Pic
    Mats Mitglied
    Registriert seit
    25.10.2019
    Beiträge
    7
    Beitragswertungen
    0 Beitragspunkte
    Hallo in die runde, bin gerade dabei ein Responsive Design auf 1.1 zu erstellen. Was soweit man es auf nem Desktop PC / oder Ähnlich sehr gut funktioniert.

    Jedoch würde ich gerne sofern es in ilch machbar wäre auch eine index_mobile.htm für mobile aufrufe in der nur wesentliche Infos bereit gestellt werden.

    Nun habe ich ein wenig das große G befragt, und folgendes für mich recht passende gefunden.

    <?PHP
    
    class clsMobileDetection{
    
    //************************************************** variables **********************************************************************
    /**
     * user-agent
     * @var string
     */
    	private $strUserAgent = '';
    
    /**
     * DNS
     * @var string
     */
    	private $strDNS = '';
    
    /**
     * Protocol
     * @var string
     */
    	private $strProt = 'http';
    
    /**
     * indicator mobile device true/false
     * @var boolean
     */
    	private $bolMobileDevice = false;
    	
    /**
     * mobile user-agent pattern on any position
     * @var string
     */
    	private $strPattern1 = "(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|xda|xiino";
    
    /**
     * mobile user-agent pattern starting with
     * @var string
     */
    	private $strPattern2 = "^(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\-)";
    
    /**
     * DNS splitted by "."
     * @var array
     */
    	private $arrDNS = array();
    
    /**
     * assembled redirect string
     * @var string
     */
    	private $strRedirect = '';
    
    /**
     * index for analyze of DNS
     * @var integer
     */
    	private $intIdx;
    
    /**
     * simple counter
     * @var integer
     */
    	private $i;
    
    //************************************************** methods *************************************************************************
    /**
     * Constructor set 
     *
     * @param none
     * @return none
     */
    	function __construct() {
    
    		$this->strUserAgent	= strtolower($_SERVER['HTTP_USER_AGENT']);
    		$this->strDNS		= $_SERVER['SERVER_NAME'];
    
    		if (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) == 'on' || $_SERVER['HTTPS'] == 1)) $this->strProt .='s';	// change protocol to https, if necessary 
    
    		$this->detectMobileAgent();
    	}
    
    //************************************************************************************************************************************
    /**
     * detection of user agents respectively bypass depneds on the parameter noMobile/mobile
     *
     * @param none
     * @return none
     */
    	private function detectMobileAgent() {
    
    		foreach ($_GET as $key=>$value) {
    			if (strtolower($key) == 'nomobile' && strtolower($value) == 'true') {		// get parameter NoMobile=true exists => the redirection will be bypassed
    				$this->bolMobileDevice = false;
    				setcookie('noMobile',1,time()+(60*60*24*30));							// save the decision in a cookie for one month
    				return;
    			} else if (strtolower($key) == 'mobile' && strtolower($value) == 'true') {	// get parameter Mobile=true exists => the redirection will be forced
    				setcookie('noMobile','',time()-3600);									// delete the cookie
    				$this->bolMobileDevice = true;
    				return;
    			}
    		}
    		
    		if (isset($_COOKIE['noMobile']) && $_COOKIE['noMobile'] == 1) {					// cookie is set => no redirect to mobile version
    			$this->bolMobileDevice = false;
    			setcookie('noMobile',1,time()+(60*60*24*30));								// refresh cookie
    			return;
    		}
    
    		if ($this->bolMobileDevice === false) {
    																						// check the user agents
    			if (preg_match("/$this->strPattern1/",$this->strUserAgent) || preg_match("/$this->strPattern2/",$this->strUserAgent)) {
    				$this->bolMobileDevice = true;
    			}
    
    		}
    
    		if ($this->bolMobileDevice === false) {
    			if (strpos($_SERVER['HTTP_ACCEPT'],'application/vnd.wap.xhtml+xml') !== false) {
    				$this->bolMobileDevice = true;
    			}
    		}
    		
    	}
    
    //************************************************************************************************************************************
    /**
     * result of the detection: mobile device true/false
     *
     * @param none
     * @return boolean indicator mobile device true/false
     */
    	public function IsMobile() {
    
    		return $this->bolMobileDevice;
    
    	}
    
    //************************************************************************************************************************************
    /**
     * redirect to a subdomain if mobile, e.g. http://m.my-pages.com
     *
     * @param none
     * @return string modified DNS-part of the redirect string
     */
    	private function RedirectToSubDomain() {
    		if (sizeof($this->arrDNS) <= 2) {			// variant http://my-pages.com
    			$intIdx = 0;
    		} else {									// variant http://www.my-pages.com
    			$intIdx = 1;
    		}
    		$strRedirect = $this->strProt.'://m.';
    		for ($i=$intIdx;$i<sizeof($this->arrDNS);$i++) {
    				$strRedirect .= $this->arrDNS[$i];
    				if ($i < sizeof($this->arrDNS)-1) $strRedirect .= '.';
    		}
    		return $strRedirect;
    	}
    
    //************************************************************************************************************************************
    /**
     * public redirect method 
     *
     * @param string variant of redirect; possible values: SUBDOM; MOBIDOM; SUBDIR
     * @return string modified Path-part of the redirect string
     */
    	public function RedirectMobile ($strVariante) {
    
    		if ($this->IsMobile() === true) {
    			$strRedirect = '';
    			$this->arrDNS = explode('.',$this->strDNS);
    			switch (strtoupper($strVariante)) {
    				case 'SUBDOM':
    					$strRedirect = $this->RedirectToSubDomain();break;
    				case 'MOBIDOM':
    					$strRedirect = $this->RedirectToMobi();break;
    				case 'SUBDIR':
    					$strRedirect = $this->RedirectToSubDir();break;
    			}
    
    			if ($strRedirect <> '') {
    				$strRedirect .= $_SERVER['SCRIPT_NAME'];
    				if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING'] != '') $strRedirect .= '?'.$_SERVER['QUERY_STRING'];
    //				echo $strRedirect;
    				header('Location: '.$strRedirect);
    			} else {
    				echo 'Error in RedirectMobile: only SUBDOM, MOBIDOM, SUBDIR are allowed as parameter';
    			}
    		}
    	}
    }
    
    $objMobile = new clsMobileDetection();
    //$objMobile->RedirectMobile("SUBDOM");				// !!!!!!!!!!!!!!!!!!!!! activate your preferred variant !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    //$objMobile->RedirectMobile("MOBIDOM");
    //$objMobile->RedirectMobile("SUBDIR");
    ?>


    Kann mir da jemand etwas weiter helfen. Wie ich es einfügen könnte wüsste ich schon. Aber vielleicht hat hier jemand eine Idee an die ich noch nicht gedacht habe .


    verwendete ilch Version: 1.1 P
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Slipi ilch.de Design
    Registriert seit
    19.01.2018
    Beiträge
    938
    Beitragswertungen
    117 Beitragspunkte
    Es kommt darauf an welches Layout du hast.
    Wenn du ein einfaches hast, würde ich die Layout index mit bootstrap klassen bearbeiten. Dazu müsstest du die bootstrap.css und bootstrap.min.css im head einbinden. Gegebenenfalls einfache Grafiken mit css ersetzen.

    Wenn du aber das Layout selbst erstellst, würde ich es von Anfang an mit bootstrap bearbeiten.

    www.w3schools.com/bootstrap/bootstrap_grid_system.asp

    getbootstrap.com/docs/4.0/examples/

    getbootstrap.com/docs/4.0/getting-started/introduction/

    wiki.selfhtml.org/wiki/HTML/Tutorials/bestehende_Webseiten_responsiv_umbauen

    Für jemanden der wenig ahnung hat, ist bootstrap ein einfaches Grid System. Man müsste nur styleKlassen hinzufügen mit der man denn content stylet zb. class="meineKlasse".

    Für deine eigentliche Frage "Dein gepostete Code", kann ich nicht viel dazu sagen, da meine php Kenntnisse bescheiden sind.

    Slipi
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Mats Mitglied
    Registriert seit
    25.10.2019
    Beiträge
    7
    Beitragswertungen
    0 Beitragspunkte
    Danke Rene,

    Die Ansätze kenne ich gut .
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Wenn du wirklich eine andere index Datei laden wölltest, müsste das in der design Klasse gemacht werden, siehe github.com/IlchCMS/Ilch-1.1/blob/master/include/includes/class/design.php#L149. Dort wird entschieden welche Datei verwendet wird.

    Du müsstest dann von der von dir geposteten Klasse nur die Funktionalität zum Erkennen des Mobilgerätes extrahieren und dann in Abhängigkeit davon eine andere index Datei laden, anstatt irgendein Redirect zu machen.
    Du könntest das Ergebnis auch in der Session zwischenspeichern, damit es nicht bei jedem Seitenaufruf erneut überprüft werden muss.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Design und Templates

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten