web-dev-qa-db-fra.com

Ajouter une adresse de livraison supplémentaire

Je suis un Drupal novice et en difficulté pour construire une boutique en ligne avec Commerce de drupal . Il commence vraiment à travailler, mais j'ai toujours des problèmes concernant le priorité et Thèmes Restyling.

Est-il possible d'ajouter un formulaire d'adresse de livraison supplémentaire au Drupal Module de champ d'adresse de commerce (facturation différente, adresses de livraison avec la case à cocher pour afficher l'adresse de livraison)?

Comment puis-je resserrer le formulaire d'adresse? Existe-t-il un fichier de modèle pour cela, ou doit-il être fait via CSS?

Ce serait vraiment utile si quelqu'un pouvait m'aider avec des informations ou peut-être une sorte de directive.

2
JurgenR

Les informations clientes sont stockées en tant qu'entité de Commerce_Customer. Par défaut, il dispose d'un champ d'adresse qui y est attaché. Pour plusieurs adresses, vous pouvez autoriser de multiples valeurs sur le terrain et utiliser certains thèmes pour l'afficher comme facturation et l'autre comme livraison.

L'autre option serait d'ajouter un nouveau champ d'adresse et d'utiliser cela pour la livraison/la facturation. Avec hook_form_alter Vous pouvez ajouter des éléments personnalisés au formulaire, comme la case à cocher et les effets JavaScript.

Vous avez quelques options si vous souhaitez personnaliser votre formulaire de champ d'adresse. Vous pouvez implémenter AddressFieldForm, la valeur par défaut ressemble à ceci:

/**
 * Default address handler.
 */
class AddressFieldForm_default implements AddressFieldForm {
  public function form($address, $field, $instance, $langcode, $items, $delta, $element) {
    $required = $delta == 0 && $instance['required'];

    $form['thoroughfare'] = array(
      '#title' => t('Street'),
      '#type' => 'textfield',
      '#required' => $required,
      '#default_value' => $address['thoroughfare'],
    );
    $form['premise'] = array(
      '#title' => t('Residence, building, ...'),
      '#type' => 'textfield',
      '#default_value' => $address['premise'],
    );
    $form['sub_premise'] = array(
      '#title' => t('Floor, stairway, ...'),
      '#type' => 'textfield',
      '#default_value' => $address['sub_premise'],
    );
    $form['dependent_locality'] = array(
      '#title' => t('Suburb, post box, ...'),
      '#type' => 'textfield',
      '#default_value' => $address['dependent_locality'],
    );
    $form['postal_code'] = array(
      '#title' => t('Postal Code'),
      '#type' => 'textfield',
      '#size' => 5,
      '#required' => $required,
      '#default_value' => $address['postal_code'],
    );
    $form['locality'] = array(
      '#title' => t('City'),
      '#type' => 'textfield',
      '#size' => 30,
      '#required' => $required,
      '#default_value' => $address['locality'],
    );

    // All the other fields are unsupported by this handler.
    foreach (array('administrative_area', 'sub_administrative_area') as $field) {
      $form[$field] = array(
        '#type' => 'value',
        '#value' => '',
      );
    }
    return $form;
  }
}

C'est ce que l'adresse Adressfield utilise pour gérer à l'intérieur des types d'adresse différents. Utilisant addressfield_mapping_alter Vous seriez capable d'écraser la cartographie par défaut ou de créer une cartographie pour votre propre pays:

function module_addressfield_mapping_alter(&$mapping) {
  $mapping['default'] = 'AddressFieldForm_my_custom_default_form',
  $mapping['DK'] = 'AddressFieldForm_dk', // Add for Denmark which doesn't exist yet
}

En plus de cela, vous avez tous les outils habituels, comme hook_form_alter et ajout d'une fonction de thème personnalisée pour rendre le formulaire comme vous qui. Vous devez savoir que Adressfield utilise une utilisation intensive de AJAX pour remplacer les éléments de formulaire lors du changement de pays.

2
googletorp

Le module Commerce Shipping Définit désormais un type de profil de client "Informations d'expédition" par défaut pouvant fonctionner comme adresse de livraison. Il n'est pas pleinement présenté à ce stade en ce qui concerne la copie des adresses et de telles choses, mais cela devrait être un début plus rapide pour la plupart des gens.

1
Ryan Szrama