Table of Contents

Modules

fichiers

admin

vueadmin/view/template/module/nom_module.tpl
controleuradmin/controller/module/nom_module.php
fichier de langueadmin/language/french/module/nom_module.php
admin/language/english/module/nom_module.php

catalog

vuecatalog/controller/module/nom_module.php
vuecatalog/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

<?php
class ControllerModuleBasicModule extends Controller {  /* nom module à modifier */
  /*
  1.  déclaration et assignation $error pour la gestion des erreurs
  2.  fonction par défaut
    2.1.  chargement du fichier de langage
    2.2.  assignements d'après le fichier de langage
    2.3.  chargement du modèle de sauvegarde des données utilisé par les modules
    2.4.  si envoie de données et bonne validation de celles-ci
      2.4.1. sauvegarde des données
      2.4.2. assignement du message de succès $success
      2.4.3. redirection vers la liste des modules
    2.5.  assignement de variables générales
      2.5.1 langage
      2.5.2. positions
      2.5.3. layouts
      2.5.4. boutons
      2.5.5. spécifiques au module
    2.6.  assignement de la variable d'avertissement $warning
    2.7.  assignement de la variable de code erreur $error_code
    2.8.  assignement de la variable $breadcrumbs et construction
    2.9.  assignement des URL
      2.9.1.  URL pour validation
      2.9.2.  URL pour annulation
    2.10. assignation des champs du formulaire depuis POST ou à défaut depuis BDD
    2.11. assignation des champs de paramétrage du module tels que layout, position, status & order, depuis POST ou à défaut depuis BDD
    2.12. chargement du modèle design/layout
    2.13. assignement de la variable $layouts listants les layouts disponibles
    2.14. chargement du template
    2.15. ajout de modules enfant (header/footer)
    2.16. rendu du module
  3. fonction de validation
    3.1.  vérification des permissions
    3.2.  vérification si les champs sont bien renseignés et assignation du code erreur le cas échéant
    3.3.  retour booléen (false si erreur)
  */

  /*  1.  déclaration et assignation $error pour la gestion des erreurs */
  private $error = array();
  /*  2.  fonction par défaut */
  public function index() {
  /*  2.1.  chargement du fichier de langage  */
    $this->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

<?php echo $header; ?>

<div id="content">

<!--
  BREADCRUMBS
-->
  <div class="breadcrumb">
    <?php foreach ($breadcrumbs as $breadcrumb) { ?>
      <?php echo $breadcrumb['separator']; ?><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a>
    <?php } ?>
  </div>

<!--
  WARNINGS
-->
  <?php if ($error_warning) { ?>
      <div class="warning"><?php echo $error_warning; ?></div>
  <?php } ?>

<!--
  HEADER : titre + boutons sauvegarder et modifier
-->
  <div class="box">
    <div class="heading">
      <h1><img src="view/image/module.png" alt="" /> <?php echo $heading_title; ?></h1>
      <div class="buttons"><a onclick="$('#form').submit();" class="button"><?php echo $button_save; ?></a><a href="<?php echo $cancel; ?>" class="button"><?php echo $button_cancel; ?></a></div>
    </div>
  </div>

<!--
  CONTENU : formulaire
-->

  <div class="content">
    <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form">
<!--
  champ texte
-->
<table class="form">
  <tr>
    <td><span class="required">*</span> <?php echo $entry_text_field; ?></td>
    <td><textarea name="basic_module_text_field" cols="40" rows="5"><?php echo $basic_module_text_field; ?></textarea>
      <?php if ($error_code) { ?>
      <span class="error"><?php echo $error_text_field; ?></span>
      <?php } ?></td>
  </tr>
</table>
<!--
  Paramètres du module : layout, position, status, ordre
-->
      <table id="module" class="list">
        <thead>
          <tr>
            <td class="left"><?php echo $entry_layout; ?></td>
            <td class="left"><?php echo $entry_position; ?></td>
            <td class="left"><?php echo $entry_status; ?></td>
            <td class="right"><?php echo $entry_sort_order; ?></td>
            <td></td>
          </tr>
        </thead>
        <?php $module_row = 0; ?>
        <?php foreach ($modules as $module) { ?>
        <tbody id="module-row<?php echo $module_row; ?>">
          <tr>
            <td class="left"><select name="basic_module_module[<?php echo $module_row; ?>][layout_id]">
                <?php foreach ($layouts as $layout) { ?>
                <?php if ($layout['layout_id'] == $module['layout_id']) { ?>
                <option value="<?php echo $layout['layout_id']; ?>" selected="selected"><?php echo $layout['name']; ?></option>
                <?php } else { ?>
                <option value="<?php echo $layout['layout_id']; ?>"><?php echo $layout['name']; ?></option>
                <?php } ?>
                <?php } ?>
              </select></td>
            <td class="left"><select name="basic_module_module[<?php echo $module_row; ?>][position]">
                <?php if ($module['position'] == 'content_top') { ?>
                <option value="content_top" selected="selected"><?php echo $text_content_top; ?></option>
                <?php } else { ?>
                <option value="content_top"><?php echo $text_content_top; ?></option>
                <?php } ?>
                <?php if ($module['position'] == 'content_bottom') { ?>
                <option value="content_bottom" selected="selected"><?php echo $text_content_bottom; ?></option>
                <?php } else { ?>
                <option value="content_bottom"><?php echo $text_content_bottom; ?></option>
                <?php } ?>
                <?php if ($module['position'] == 'column_left') { ?>
                <option value="column_left" selected="selected"><?php echo $text_column_left; ?></option>
                <?php } else { ?>
                <option value="column_left"><?php echo $text_column_left; ?></option>
                <?php } ?>
                <?php if ($module['position'] == 'column_right') { ?>
                <option value="column_right" selected="selected"><?php echo $text_column_right; ?></option>
                <?php } else { ?>
                <option value="column_right"><?php echo $text_column_right; ?></option>
                <?php } ?>
              </select></td>
            <td class="left"><select name="basic_module_module[<?php echo $module_row; ?>][status]">
                <?php if ($module['status']) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select></td>
            <td class="right"><input type="text" name="basic_module_module[<?php echo $module_row; ?>][sort_order]" value="<?php echo $module['sort_order']; ?>" size="3" /></td>
            <td class="left"><a onclick="$('#module-row<?php echo $module_row; ?>').remove();" class="button"><?php echo $button_remove; ?></a></td>
          </tr>
        </tbody>
        <?php $module_row++; ?>
        <?php } ?>
        <tfoot>
          <tr>
            <td colspan="4"></td>
            <td class="left"><a onclick="addModule();" class="button"><?php echo $button_add_module; ?></a></td>
          </tr>
        </tfoot>
      </table>

    </form>
  </div>
</div>

<!--
  JAVASCRIPT : gestion des paramètres du module
-->
<script type="text/javascript">
var module_row = <?php echo $module_row; ?>;

function addModule() {
    html  = '<tbody id="module-row' + module_row + '">';
    html += '  <tr>';
    html += '    <td class="left"><select name="basic_module_module[' + module_row + '][layout_id]">';
    <?php foreach ($layouts as $layout) { ?>
    html += '      <option value="<?php echo $layout['layout_id']; ?>"><?php echo addslashes($layout['name']); ?></option>';
    <?php } ?>
    html += '    </select></td>';
    html += '    <td class="left"><select name="basic_module_module[' + module_row + '][position]">';
    html += '      <option value="content_top"><?php echo $text_content_top; ?></option>';
    html += '      <option value="content_bottom"><?php echo $text_content_bottom; ?></option>';
    html += '      <option value="column_left"><?php echo $text_column_left; ?></option>';
    html += '      <option value="column_right"><?php echo $text_column_right; ?></option>';
    html += '    </select></td>';
    html += '    <td class="left"><select name="basic_module_module[' + module_row + '][status]">';
    html += '      <option value="1" selected="selected"><?php echo $text_enabled; ?></option>';
    html += '      <option value="0"><?php echo $text_disabled; ?></option>';
    html += '    </select></td>';
    html += '    <td class="right"><input type="text" name="basic_module_module[' + module_row + '][sort_order]" value="" size="3" /></td>';
    html += '    <td class="left"><a onclick="$(\'#module-row' + module_row + '\').remove();" class="button"><?php echo $button_remove; ?></a></td>';
    html += '  </tr>';
    html += '</tbody>';

    $('#module tfoot').before(html);

    module_row++;
}
</script>
<?php echo $footer; ?>

fichiers de langue

<?php

/*  Minimal elements */

//  Heading
$_['heading_title']         = "Module basique"; // aussi titre du module
//  Text
$_['text_module']         = 'Modules';
$_['text_success']        = 'Succès de la modification du module basique !';
$_['text_content_top']    = 'Content Top';
$_['text_content_bottom'] = 'Content Bottom';
$_['text_column_left']    = 'Column Left';
$_['text_column_right']   = 'Column Right';
//  Inputs
$_['entry_layout']        = 'Layout :';
$_['entry_position']      = 'Position :';
$_['entry_status']        = 'Statut :';
$_['entry_sort_order']    = 'Ordre de tri:';
//  Errors
$_['error_permission']    = 'Attention : vous ne disposez pas des permissions nécessaires !';

/*  Custom Inputs */
//  Text
//  Inputs
$_['entry_text_field']        = 'Champs texte';
//  Errors
$_['error_text_field']         = 'Attention : remplissage du champs requis !';
?>
<?php

/*  Minimal elements */

//  Heading
$_['heading_title']         = "Basic module"; // also module's title
//  Text
$_['text_module']         = 'Modules';
$_['text_success']        = 'Success: You have modified basic module!';
$_['text_content_top']    = 'Content Top';
$_['text_content_bottom'] = 'Content Bottom';
$_['text_column_left']    = 'Column Left';
$_['text_column_right']   = 'Column Right';
//  Inputs
$_['entry_layout']        = 'Layout:';
$_['entry_position']      = 'Position:';
$_['entry_status']        = 'Status:';
$_['entry_sort_order']    = 'Sort Order:';
//  Errors
$_['error_permission']    = 'Warning: You do not have permission to modify basic module!';

/*  Custom Inputs */
//  Text
//  Inputs
$_['entry_text_field']        = 'Champs texte';
//  Errors
$_['error_text_field']         = 'Warning: field is required !';
?>

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

<p><?php echo $value ?></p>

fichiers de langue (optionnels)

<?php
// optional language file
?>