Question

Ceci est un sujet brûlant dans ce jour et j'ai besoin de construire un modèle basé sur jQuery Mobile pour mon site. Construire le modèle est pas le problème, mais montrer quand creux appareils mobiles de naviguer quelqu'un. Je sais que je dois changer certains codes dans le noyau OC afin de le faire, mais besoin de conseils ou de l'aide à ce sujet. Tout d'abord l'endroit où le modèle est chargé est /system/engine/controller.php. Ceci est la fonction:

    protected function render() {
      foreach ($this->children as $child) {
         $this -> data[basename($child)] = $this -> getChild($child);
      }

      if (file_exists(DIR_TEMPLATE . $this -> template)) {
         extract($this -> data);
         ob_start();
         require (DIR_TEMPLATE . $this -> template);
         $this -> output = ob_get_contents();
         ob_end_clean();
         return $this -> output;
      } else {
         exit('Error: Could not load template ' . DIR_TEMPLATE . $this -> template . '!');
      }
   }

Ok, je parviens à la façon de traiter pour vérifier si l'agent utilisateur est périphérique mobile ou non, et voici le résultat:

 protected function render() {
      foreach ($this->children as $child) {
         $this -> data[basename($child)] = $this -> getChild($child);
      }

      //--------- ADDED -------------------------------------------------
      if ($this -> config -> get('mobile_status') == 1) {
         if (($this -> isMobile() && $this -> config -> get('autodetect') == 'true') || $this -> session -> data['ismobile'] == 1) {
            $mobile_template = $this -> config -> get('mobile_template_name');
            if ($mobile_template != '') {
               if (!function_exists('is_dir') || (function_exists('is_dir') && is_dir(DIR_TEMPLATE . $mobile_template))) {
                  $this -> template = $mobile_template . "/";
               }
            }
         }
      }
      //--------- ADDED -------------------------------------------------

      if (file_exists(DIR_TEMPLATE . $this -> template)) {
         extract($this -> data);
         ob_start();
         require (DIR_TEMPLATE . $this -> template);
         $this -> output = ob_get_contents();
         ob_end_clean();
         return $this -> output;
      } else {
         exit('Error: Could not load template ' . DIR_TEMPLATE . $this -> template . '!');
      }
   }

Maintenant, quand je tente d'accès à l'aide d'un agent utilisateur mobile Je reçois cette erreur:

D: \ Webserver \ htdocs \ portal / catalogue / view / thème / libcommerce_mobile / Attention: require (D: \ Webserver \ htdocs \ portal \ catalog \ view \ thème \ libcommerce_mobile) [function.require]: failed to open stream: Permission refusée dans D: \ Webserver \ htdocs \ portal \ system \ moteur \ controller.php en ligne 77 Erreur fatale: require () [function.require]: Failed opening required 'D: \ Webserver \ htdocs \ portal / catalogue / view / thème / libcommerce_mobile /' (include_path = '.; D: \ Webserver \ php \ PEAR') D: \ Webserver \ htdocs \ portal \ system \ moteur \ controller.php sur la ligne 77

Mais surprise, le répertoire existe et il est lisible, toute aide à ce sujet? Ce que je fais mal? Des cris de joie une fois

PS: En venant de ce sujet publié ici http: //forum.opencart. com / viewtopic.php? f = 20 & t = 47124

Était-ce utile?

La solution

Le problème est que le $this->template contient le chemin complet du fichier, pas seulement le répertoire des modèles. Vous devriez faire quelque chose comme ça à la place

    if($this->config->get('mobile_status') == 1) {
        if(($this->isMobile() && $this->config->get('autodetect') == 'true') || $this->session->data['ismobile'] == 1) {
            $template = preg_replace('~^[^/]+~', $this->config->get('mobile_template_name'), $this->template);
            if(file_exists(DIR_TEMPLATE . $template) && !is_dir(DIR_TEMPLATE . $template)) {
                $this->template = $template;
            }
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top