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.
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
.