====== Modules ======
===== fichiers =====
====admin====
^vue|admin/view/template/module/nom_module.tpl|
^controleur|admin/controller/module/nom_module.php|
^fichier de langue|admin/language/french/module/nom_module.php|
^ |admin/language/english/module/nom_module.php|
====catalog====
^vue|catalog/controller/module/nom_module.php|
^vue|catalog/view/module/nom_module.tpl|
^fichier de langue (opt.)|catalog/language/french/module/nom_module.php|
^ |catalog/language/english/module/nom_module.php|
=====modèles basiques=====
====admin====
===controleur===
language->load('module/basic_module'); /* nom module à modifier */
    /*  2.2.  assignements du titre du module d'après le fichier de langage */
    $this->document->setTitle($this->language->get('heading_title'));
    /*  2.3.  chargement du modèle de sauvegarde des données utilisé par les modules */
    $this->load->model('setting/setting');
    /*  2.4.  si envoie de données et bonne validation de celles-ci */
      if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
      /*  2.4.1. sauvegarde des données */
        $this->model_setting_setting->editSetting('basic_module', $this->request->post); /* nom module à modifier */
      /*  2.4.2. assignement du message de succès $success */
        $this->session->data['success'] = $this->language->get('text_success');
      /*  2.4.3. redirection vers la liste des modules */
        $this->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));
      }
    /*  2.5.  assignement de variables générales */
      /*  2.5.1 langage */
      $this->data['heading_title'] = $this->language->get('heading_title');
      $this->data['text_enabled'] = $this->language->get('text_enabled');
      $this->data['text_disabled'] = $this->language->get('text_disabled');
      /*  2.5.2. positions */
      $this->data['text_content_top'] = $this->language->get('text_content_top');
  		$this->data['text_content_bottom'] = $this->language->get('text_content_bottom');
  		$this->data['text_column_left'] = $this->language->get('text_column_left');
  		$this->data['text_column_right'] = $this->language->get('text_column_right');
      /*  2.5.3. layouts */
      $this->data['entry_layout'] = $this->language->get('entry_layout');
      $this->data['entry_position'] = $this->language->get('entry_position');
      $this->data['entry_status'] = $this->language->get('entry_status');
      $this->data['entry_sort_order'] = $this->language->get('entry_sort_order');
      /*  2.5.4. boutons */
      $this->data['button_save'] = $this->language->get('button_save');
      $this->data['button_cancel'] = $this->language->get('button_cancel');
      $this->data['button_add_module'] = $this->language->get('button_add_module');
      $this->data['button_remove'] = $this->language->get('button_remove');
      /*  2.5.5. spécifiques au module */
      $this->data['entry_text_field'] = $this->language->get('entry_text_field');
    /*  2.6.  assignement de la variable d'avertissement $warning */
    if (isset($this->error['warning'])) {
      $this->data['error_warning'] = $this->error['warning'];
    } else {
      $this->data['error_warning'] = '';
    }
    /*  2.7.  assignement de la variable de code erreur $error_code */
    if (isset($this->error['code'])) {
        $this->data['error_code'] = $this->error['code'];
    } else {
        $this->data['error_code'] = '';
    }
    /*  2.8.  assignement de la variable $breadcrumbs et construction */
    $this->data['breadcrumbs'] = array();
    $this->data['breadcrumbs'][] = array(
        'text'      => $this->language->get('text_home'),
        'href'      => $this->url->link('common/home', 'token=' . $this->session->data['token'], 'SSL'),
        'separator' => false
    );
    $this->data['breadcrumbs'][] = array(
        'text'      => $this->language->get('text_module'),
        'href'      => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'),
        'separator' => ' :: '
    );
    $this->data['breadcrumbs'][] = array(
        'text'      => $this->language->get('heading_title'),
        'href'      => $this->url->link('module/basic_module', 'token=' . $this->session->data['token'], 'SSL'), /* nom module à modifier */
        'separator' => ' :: '
    );
    /*  2.9.  assignement des URL */
      /*  2.9.1.  URL pour validation */
    $this->data['action'] = $this->url->link('module/basic_module', 'token=' . $this->session->data['token'], 'SSL'); /* nom module à modifier */
      /*  2.9.2.  URL pour annulation */
    $this->data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');
    /*  2.10. assignation des champs du formulaire depuis POST ou à défaut depuis BDD */
    if (isset($this->request->post['basic_module_text_field'])) { /* nom module à modifier */
        $this->data['basic_module_text_field'] = $this->request->post['basic_module_text_field']; /* nom module à modifier */
    } else {
        $this->data['basic_module_text_field'] = $this->config->get('basic_module_text_field'); /* nom module à modifier */
    }
    /*  2.11. assignation des champs de paramétrage du module tels que layout, position, status & order, depuis POST ou à défaut depuis BDD */
    $this->data['modules'] = array();
    if (isset($this->request->post['basic_module_module'])) { /* nom module à modifier */
        $this->data['modules'] = $this->request->post['basic_module_module']; /* nom module à modifier */
    } elseif ($this->config->get('basic_module_module')) {  /* nom module à modifier */
        $this->data['modules'] = $this->config->get('basic_module_module');  /* nom module à modifier */
    }
    /*  2.12. chargement du modèle design/layout */
    $this->load->model('design/layout');
    /*  2.13. assignement de la variable $layouts listants les layouts disponibles */
    $this->data['layouts'] = $this->model_design_layout->getLayouts();
    /*  2.14. chargement du template */
    $this->template = 'module/basic_module.tpl';  /* nom module à modifier */
    /*  2.15. ajout de modules enfant (header/footer) */
    $this->children = array(
        'common/header',
        'common/footer'
    );
    /*  2.16. rendu du module */
    $this->response->setOutput($this->render());
  }
  /* 3. fonction de validation */
  protected function validate() {
    /*
    3.1.  vérification des permissions
    */
    if (!$this->user->hasPermission('modify', 'module/basic_module')) { /* nom module à modifier */
        $this->error['warning'] = $this->language->get('error_permission');
    }
    /*
    3.2.  vérification si les champs sont bien renseignés et assignation du code erreur le cas échéant
    */
    if (!$this->request->post['basic_module_text_field']) { /* nom module à modifier */ // ligne 43 du tpl
        $this->error['text_field'] = $this->language->get('error_text_field');
    }
    /*
    3.3.  retour booléen (false si erreur)
    */
    if (!$this->error) {
        return true;
    } else {
        return false;
    }
  }
}
?>
===vue===
===fichiers de langue===
====catalog====
===controleur===
class ControllerModuleBasicModule extends Controller { /* nom module à modifier */
  public function index() {
    /* optionnel : fichier de langage
    $this->language->load('module/basic_module'); // nom module à modifier
    //  récupération des éléments de langue
    $this->data['element'] = $this->language->get('element');
    */
     /* récupération de la valeur enregistrée */
    $this->data['value'] = html_entity_decode($this->config->get('basic_module_text_field')); /* nom module à modifier */
    /*  chemin de la vue */
    $this->template = $this->config->get('config_template') . '/template/module/basic_module.tpl'; /* nom module à modifier */
     /* rendu */
    $this->render(); // renders the output
  }
}
?>
===vue===
===fichiers de langue (optionnels)===