web-dev-qa-db-fra.com

Quelle est la meilleure façon de prétraiter les champs avec Display Suite

J'utilise Display Suite avec Drupal Commerce, et je dois prétraiter certains champs dans l'affichage de mon produit. J'ai besoin de modifier certaines valeurs en fonction de certaines conditions, et je dois en encapsuler quelques-unes champs dans un balisage. Dois-je écrire un crochet pour prétraiter et modifier les valeurs, et utiliser un modèle pour envelopper les champs dans le balisage? Si oui, quel fichier de modèle devrais-je utiliser, car DS = est livré avec quelques modèles.

4
vintorg

Vous pouvez personnaliser votre champ au niveau du thème en utilisant la fonction TEMPLATE_preprocess_field () à template.php

Vous pouvez obtenir une valeur de champ par un objet node ou en récupérant lui-même les valeurs field. Vous pouvez faire quelque chose comme ça pour obtenir la valeur des champs par objet nœud -

function MYTHEME_preprocess_field(&$vars) { //Replace your theme name MYTHEME here.
  if ($node = menu_get_object()){
    if($node->type == 'PRODUCT_DISPLAY'){//Use your product display name here.
      $vars['node'] = $node;
      $product_id = $node->FIELD_PRODUCT_REFERENCE[LANGUAGE_NONE][0]['product_id'];//Use your product ref field name here.
      $product = commerce_product_load($product_id);
      $manufacturer = $product->FIELD_PRODUCT_MANUFACTURER[LANGUAGE_NONE][0]['value'];//Use your field name of product type here.
      $final_body_label = "Description by ".$manufacturer;

      //Set body label for node from here itself.
      $node->content['body']['#label_display'] = $final_body_label;

      //Or set a variable to use it further. 
      $$vars['manufacturer_description'] = $final_body_label;
  }
}

De plus, vous pouvez utiliser votre modèle par défaut pour le nœud ou la page s'il remplit ce que vous voulez ou vous pouvez également créer des TPL séparés pour les champs, qui seront nommés comme field--field_image.tpl.php, où field_image est le nom de champ de votre contenu ou produit.

Vous obtiendrez par défaut field.tpl dans $ base_path/modules/field/theme.

7
RajeevK