2017-11-13 9 views
3

설치 모듈을 새로 고침해야합니다.코드로 오픈카트 수정을 새로 고치는 방법

public function install() { 
    $this->load->controller('marketplace/modification/refresh'); 
} 

나는 이것을 시도했다. 그것은 효과가 있었지만 수정 목록으로 리다이렉트 된 페이지. 리디렉션없이 어떻게 할 수 있습니까? 당신이하고있는 나는이 방법으로 opencart 3.

답변

3

, 당신은이를 사용할 수 있습니다

public function install(){ 
    $data['redirect'] = 'extension/extension/module'; 
    $this->load->controller('marketplace/modification/refresh', $data); 
} 
0

당신은 설정 제어 할 수 없습니다를 사용하고 있습니다 :

당신은 내가 당신을 위해 일 shouwl 희망

public function install() { 
    $this->refresh(); 
    } 

    protected function refresh($data = array()) { 
     $this->load->language('marketplace/modification'); 

     $this->document->setTitle($this->language->get('heading_title')); 

     $this->load->model('setting/modification'); 

     if ($this->validate()) { 
      // Just before files are deleted, if config settings say maintenance mode is off then turn it on 
      $maintenance = $this->config->get('config_maintenance'); 

      $this->load->model('setting/setting'); 

      $this->model_setting_setting->editSettingValue('config', 'config_maintenance', true); 

      //Log 
      $log = array(); 

      // Clear all modification files 
      $files = array(); 

      // Make path into an array 
      $path = array(DIR_MODIFICATION . '*'); 

      // While the path array is still populated keep looping through 
      while (count($path) != 0) { 
       $next = array_shift($path); 

       foreach (glob($next) as $file) { 
        // If directory add to path array 
        if (is_dir($file)) { 
         $path[] = $file . '/*'; 
        } 

        // Add the file to the files to be deleted array 
        $files[] = $file; 
       } 
      } 

      // Reverse sort the file array 
      rsort($files); 

      // Clear all modification files 
      foreach ($files as $file) { 
       if ($file != DIR_MODIFICATION . 'index.html') { 
        // If file just delete 
        if (is_file($file)) { 
         unlink($file); 

        // If directory use the remove directory function 
        } elseif (is_dir($file)) { 
         rmdir($file); 
        } 
       } 
      } 

      // Begin 
      $xml = array(); 

      // Load the default modification XML 
      $xml[] = file_get_contents(DIR_SYSTEM . 'modification.xml'); 

      // This is purly for developers so they can run mods directly and have them run without upload after each change. 
      $files = glob(DIR_SYSTEM . '*.ocmod.xml'); 

      if ($files) { 
       foreach ($files as $file) { 
        $xml[] = file_get_contents($file); 
       } 
      } 

      // Get the default modification file 
      $results = $this->model_setting_modification->getModifications(); 

      foreach ($results as $result) { 
       if ($result['status']) { 
        $xml[] = $result['xml']; 
       } 
      } 

      $modification = array(); 

      foreach ($xml as $xml) { 
       if (empty($xml)){ 
        continue; 
       } 

       $dom = new DOMDocument('1.0', 'UTF-8'); 
       $dom->preserveWhiteSpace = false; 
       $dom->loadXml($xml); 

       // Log 
       $log[] = 'MOD: ' . $dom->getElementsByTagName('name')->item(0)->textContent; 

       // Wipe the past modification store in the backup array 
       $recovery = array(); 

       // Set the a recovery of the modification code in case we need to use it if an abort attribute is used. 
       if (isset($modification)) { 
        $recovery = $modification; 
       } 

       $files = $dom->getElementsByTagName('modification')->item(0)->getElementsByTagName('file'); 

       foreach ($files as $file) { 
        $operations = $file->getElementsByTagName('operation'); 

        $files = explode('|', $file->getAttribute('path')); 

        foreach ($files as $file) { 
         $path = ''; 

         // Get the full path of the files that are going to be used for modification 
         if ((substr($file, 0, 7) == 'catalog')) { 
          $path = DIR_CATALOG . substr($file, 8); 
         } 

         if ((substr($file, 0, 5) == 'admin')) { 
          $path = DIR_APPLICATION . substr($file, 6); 
         } 

         if ((substr($file, 0, 6) == 'system')) { 
          $path = DIR_SYSTEM . substr($file, 7); 
         } 

         if ($path) { 
          $files = glob($path, GLOB_BRACE); 

          if ($files) { 
           foreach ($files as $file) { 
            // Get the key to be used for the modification cache filename. 
            if (substr($file, 0, strlen(DIR_CATALOG)) == DIR_CATALOG) { 
             $key = 'catalog/' . substr($file, strlen(DIR_CATALOG)); 
            } 

            if (substr($file, 0, strlen(DIR_APPLICATION)) == DIR_APPLICATION) { 
             $key = 'admin/' . substr($file, strlen(DIR_APPLICATION)); 
            } 

            if (substr($file, 0, strlen(DIR_SYSTEM)) == DIR_SYSTEM) { 
             $key = 'system/' . substr($file, strlen(DIR_SYSTEM)); 
            } 

            // If file contents is not already in the modification array we need to load it. 
            if (!isset($modification[$key])) { 
             $content = file_get_contents($file); 

             $modification[$key] = preg_replace('~\r?\n~', "\n", $content); 
             $original[$key] = preg_replace('~\r?\n~', "\n", $content); 

             // Log 
             $log[] = PHP_EOL . 'FILE: ' . $key; 
            } 

            foreach ($operations as $operation) { 
             $error = $operation->getAttribute('error'); 

             // Ignoreif 
             $ignoreif = $operation->getElementsByTagName('ignoreif')->item(0); 

             if ($ignoreif) { 
              if ($ignoreif->getAttribute('regex') != 'true') { 
               if (strpos($modification[$key], $ignoreif->textContent) !== false) { 
                continue; 
               } 
              } else { 
               if (preg_match($ignoreif->textContent, $modification[$key])) { 
                continue; 
               } 
              } 
             } 

             $status = false; 

             // Search and replace 
             if ($operation->getElementsByTagName('search')->item(0)->getAttribute('regex') != 'true') { 
              // Search 
              $search = $operation->getElementsByTagName('search')->item(0)->textContent; 
              $trim = $operation->getElementsByTagName('search')->item(0)->getAttribute('trim'); 
              $index = $operation->getElementsByTagName('search')->item(0)->getAttribute('index'); 

              // Trim line if no trim attribute is set or is set to true. 
              if (!$trim || $trim == 'true') { 
               $search = trim($search); 
              } 

              // Add 
              $add = $operation->getElementsByTagName('add')->item(0)->textContent; 
              $trim = $operation->getElementsByTagName('add')->item(0)->getAttribute('trim'); 
              $position = $operation->getElementsByTagName('add')->item(0)->getAttribute('position'); 
              $offset = $operation->getElementsByTagName('add')->item(0)->getAttribute('offset'); 

              if ($offset == '') { 
               $offset = 0; 
              } 

              // Trim line if is set to true. 
              if ($trim == 'true') { 
               $add = trim($add); 
              } 

              // Log 
              $log[] = 'CODE: ' . $search; 

              // Check if using indexes 
              if ($index !== '') { 
               $indexes = explode(',', $index); 
              } else { 
               $indexes = array(); 
              } 

              // Get all the matches 
              $i = 0; 

              $lines = explode("\n", $modification[$key]); 

              for ($line_id = 0; $line_id < count($lines); $line_id++) { 
               $line = $lines[$line_id]; 

               // Status 
               $match = false; 

               // Check to see if the line matches the search code. 
               if (stripos($line, $search) !== false) { 
                // If indexes are not used then just set the found status to true. 
                if (!$indexes) { 
                 $match = true; 
                } elseif (in_array($i, $indexes)) { 
                 $match = true; 
                } 

                $i++; 
               } 

               // Now for replacing or adding to the matched elements 
               if ($match) { 
                switch ($position) { 
                 default: 
                 case 'replace': 
                  $new_lines = explode("\n", $add); 

                  if ($offset < 0) { 
                   array_splice($lines, $line_id + $offset, abs($offset) + 1, array(str_replace($search, $add, $line))); 

                   $line_id -= $offset; 
                  } else { 
                   array_splice($lines, $line_id, $offset + 1, array(str_replace($search, $add, $line))); 
                  } 
                  break; 
                 case 'before': 
                  $new_lines = explode("\n", $add); 

                  array_splice($lines, $line_id - $offset, 0, $new_lines); 

                  $line_id += count($new_lines); 
                  break; 
                 case 'after': 
                  $new_lines = explode("\n", $add); 

                  array_splice($lines, ($line_id + 1) + $offset, 0, $new_lines); 

                  $line_id += count($new_lines); 
                  break; 
                } 

                // Log 
                $log[] = 'LINE: ' . $line_id; 

                $status = true; 
               } 
              } 

              $modification[$key] = implode("\n", $lines); 
             } else { 
              $search = trim($operation->getElementsByTagName('search')->item(0)->textContent); 
              $limit = $operation->getElementsByTagName('search')->item(0)->getAttribute('limit'); 
              $replace = trim($operation->getElementsByTagName('add')->item(0)->textContent); 

              // Limit 
              if (!$limit) { 
               $limit = -1; 
              } 

              // Log 
              $match = array(); 

              preg_match_all($search, $modification[$key], $match, PREG_OFFSET_CAPTURE); 

              // Remove part of the the result if a limit is set. 
              if ($limit > 0) { 
               $match[0] = array_slice($match[0], 0, $limit); 
              } 

              if ($match[0]) { 
               $log[] = 'REGEX: ' . $search; 

               for ($i = 0; $i < count($match[0]); $i++) { 
                $log[] = 'LINE: ' . (substr_count(substr($modification[$key], 0, $match[0][$i][1]), "\n") + 1); 
               } 

               $status = true; 
              } 

              // Make the modification 
              $modification[$key] = preg_replace($search, $replace, $modification[$key], $limit); 
             } 

             if (!$status) { 
              // Abort applying this modification completely. 
              if ($error == 'abort') { 
               $modification = $recovery; 
               // Log 
               $log[] = 'NOT FOUND - ABORTING!'; 
               break 5; 
              } 
              // Skip current operation or break 
              elseif ($error == 'skip') { 
               // Log 
               $log[] = 'NOT FOUND - OPERATION SKIPPED!'; 
               continue; 
              } 
              // Break current operations 
              else { 
               // Log 
               $log[] = 'NOT FOUND - OPERATIONS ABORTED!'; 
               break; 
              } 
             } 
            } 
           } 
          } 
         } 
        } 
       } 

       // Log 
       $log[] = '----------------------------------------------------------------'; 
      } 

      // Log 
      $ocmod = new Log('ocmod.log'); 
      $ocmod->write(implode("\n", $log)); 

      // Write all modification files 
      foreach ($modification as $key => $value) { 
       // Only create a file if there are changes 
       if ($original[$key] != $value) { 
        $path = ''; 

        $directories = explode('/', dirname($key)); 

        foreach ($directories as $directory) { 
         $path = $path . '/' . $directory; 

         if (!is_dir(DIR_MODIFICATION . $path)) { 
          @mkdir(DIR_MODIFICATION . $path, 0777); 
         } 
        } 

        $handle = fopen(DIR_MODIFICATION . $key, 'w'); 

        fwrite($handle, $value); 

        fclose($handle); 
       } 
      } 

      // Maintance mode back to original settings 
      $this->model_setting_setting->editSettingValue('config', 'config_maintenance', $maintenance); 

      // Do not return success message if refresh() was called with $data 
      $this->session->data['success'] = $this->language->get('text_success'); 

      $url = ''; 

      if (isset($this->request->get['sort'])) { 
       $url .= '&sort=' . $this->request->get['sort']; 
      } 

      if (isset($this->request->get['order'])) { 
       $url .= '&order=' . $this->request->get['order']; 
      } 

      if (isset($this->request->get['page'])) { 
       $url .= '&page=' . $this->request->get['page']; 
      } 

     } 


    } 

으로이 작업을 수행해야합니다. 이 프로세스는 모듈을 설치할 때 수정 사항을 새로 고치는 데 사용됩니다.

전 세계적으로 필요한 경우이 프로세스를 업데이트하겠습니다. 당신이 modification.php을 편집하거나 refresh 기능을 복제하지 않으려면