26
oct
2012
Robin Millette

Limiter les ventes à une province du Canada avec Drupal Commerce

Section: 

Normalement quand on veut modifier un formulaire dans Drupal, un petit hook_form_alter() et l’affaire est jouée. Quand j’ai voulu faire ça dans un site Drupal Commerce pour limiter les ventes au Québec seulement, j’ai vite frappé un mur. J’ai finalement implémenté un plugin pour le module addressfield qui accompli cette tâche.

Voici une version préliminaire du code utilisé. J’ai appelé le projet addressfieldlimit même si dans les faits, il est codé pour limiter uniquement au Québec.

Fichier addressfieldlimit.info:

name = Addressfield limit
description = Limit administrative area (province)
core = 7.x
package = Fields
dependencies[] = addressfield

Notre module dépend évidemment du module adressfield.

Fichier addressfieldlimit.module:

<?php
/**
* Implements hook_ctools_plugin_directory().
*/
function addressfieldlimit_ctools_plugin_directory($module, $plugin) {
  if (
'addressfield' === $module) {
    return
'plugins/' . $plugin;
  }
}
?>

Adapté du fichier addressfield_example.module qui vient avec le module addressfield.

Fichier plugins/format/addressfieldlimit.inc:

<?php
/**
* @file
* A specific handler for Quebec.
*/

$plugin = array(
 
'title' => t('Address form (QC add-on)'),
 
'format callback' => 'addressfieldlimit_format_address_qc_generate',
 
'type' => 'address',
 
'weight' => -80,
);

function
addressfieldlimit_format_address_qc_generate(&$format, $address, $context = array()) {
  if (
$address['country'] == 'CA' && $context['mode'] == 'form') {
   
$format['locality_block']['administrative_area']['#options'] = array('QC' => t('Quebec'));
  }
}
?>

Finalement, la fonction importante, addressfieldlimit_format_address_qc_generate() remplace la liste des provinces (administrative_area dans le jargon addressfield) du Canada par l’entrée unique du Québec.

Publier un nouveau commentaire

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
By submitting this form, you accept the Mollom privacy policy.