web-dev-qa-db-fra.com

Comment puis-je générer un champ d'image Drupal?

Il est fort possible que je cherche simplement de l'aide pour trouver le nom d'une fonction qui existe déjà dans drupal (7), mais il est parfois difficile de naviguer dans la documentation. J'espère que quelqu'un pourra m'aider.

J'ai un noeud qui a un champ personnalisé.

Je travaille dans un modèle field--mycustomcontenttype.tpl.php et j'essaie donc de trouver le nom de la fonction PHP qui génère un champ d'image avec des styles d'image.

mycustomcontenttype est un NODE avec le champ supplémentaire suivant:

[field_image] => Array
(
    [und] => Array
    (
        [0] => Array
        (
            [fid] => 51
            [alt] => ImageAltText
            [title] => 
            [width] => 150
            [height] => 150
            [uid] => 29
            [filename] => myimagename.jpg
            [uri] => public://myimagename.jpg
            [filemime] => image/jpeg
            [filesize] => 8812
            [status] => 1
            [timestamp] => 1339445372
            [uuid] => a088ea8f-ddf9-47d1-b013-19c8f8cada07
            [metatags] => Array
        (
    )
)

Donc, je pourrais afficher l'image à l'aide d'une fonction (laide) roulée à la main qui prend la valeur trouvée dans $item['#options']['entity']->field_image et fait la substitution de public:// au chemin du serveur, et il est également possible que je veuille charger l'image avec le style d'image Drupal correct (vignette, style personnalisé, etc ...)

Malheureusement, je n'ai aucune idée du nom de la fonction qui fonctionne: unknown_function_name_drupal_image_print($item['#options']['entity']->field_image, 'thumnail');.

Est-ce que quelqu'un peut m'aider à trouver ceci?

20
Alex C

Vous recherchez image_style_url(style_name, image_url);

Par exemple:

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['filename']).'" />'?>

MODIFIER

Comme indiqué, vous pouvez également définir le style d'image dans la page Gérer l'affichage pour le type de contenu, puis le générer à l'aide du rendu.

<?php print render($content['field_image']); ?>
23
SpaceBeers

Je ferais cela en utilisant une combinaison de field_get_items et field_view_value .

Par exemple:

    <?php

    // In some preprocessor...
    $images = field_get_items('node', $node, 'field_image');
    if(!empty($images)) {
      $image = field_view_value('node', $node, 'field_image', $images[0], array(
        'type' => 'image',
        'settings' => array(
          'image_style' => 'custom_image_style' // could be 'thumbnail'
        )
      )
     );
    }
    $variables['image'] = $image;

    // Now, in your .tpl.php
    <?php print render($image); ?>

J'ai un article sur l'accès aux champs et cette chose même ici .

Bonne chance.

14
mavame

La réponse de SpaceBeers est correcte - vous pouvez imprimer l'image de cette façon. Mais du côté de Drupal, c'est mauvais. Vous avez une langue indéfinie et n'utilisez directement que le premier champ s'il s'agit d'un champ à valeurs multiples ..__ De plus, vous codez en dur certains éléments intéressants de Drupal, tels que le changement de style d'image à l'aide de l'interface utilisateur. 

<?php print render($content['field_image']); ?>

Ceci imprimera l'image avec les dimensions appropriées (dans img tag), les balises alt et respectera toujours ce que vous avez défini dans l'onglet Gérer l'affichage du type de nœud mycustomcontenttype.

12
Ayesh K

J'utilise ceci:

print theme('image_style', array('path' => [image uri from field], 'style_name' => [image style]));

Vous pouvez également inclure une variable de tableau "attributs" contenant des éléments pour (par exemple) la classe, alt & title. Je pense que c'est une meilleure option pour vous permettre de choisir le style d'image tout en utilisant le rendu d'image par défaut de Drupal (ou de votre thème).

8
Heather Gaye

Tu devrais utiliser

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['uri']).'" />'?>

au lieu de

<?='<img src="'.image_style_url('fullwidth', $node->field_page_image['und'][0]['filename']).'" />'?>
3
Denis

Je pense que la réponse d'Ayesh K est la méthode Drupal préférée pour imprimer un champ sur la page. Beaucoup plus facile à lire et conserve toutes les opérations/préréglages que vous faites sur votre image dans l'interface utilisateur. 

Vous pouvez le diviser, mais il semble que ce soit le cas pour les cas d'utilisation restreinte.

1
ricardoom
<?php
global $base_url;
$nid=6;//node id
$node=node_load($nid);
echo '<div style="margin-right:350px;">';
echo "<Marquee>";
foreach($node->field_image_gallery['und'] as $v){
$image=$v['uri'];
$image_path=explode("public://",$image);
$url_path=$base_url.'/sites/default/files/'.$image_path[1];
echo '<img src="'.$url_path.'" width="100" height="100">&nbsp;';
 }

echo "</Marquee>";
echo "</div>";
?>
1
gangadhara
 $field_image = field_view_field('node', $promoNode, 'field_image');
 $variables['promo_image'] = render($field_image);

Renders: 

<div class="field field--name-field-image field--type-image field--label-above">
  <div class="field__label">Image:&nbsp;</div>
  <div class="field__items">
      <div class="field__item even">
        <img typeof="foaf:Image" 
             src="http://domain/sites/domain/files/promo1.png"
             width="360" 
             height="301"
             alt="Promotional Image"
             title="Promotional Image Title">
      </div>
  </div>
</div>

Remarque: La classe label-above pourrait être supprimée avec les paramètres de type de contenu Manage-Display des champs, en définissant Label sur, mais cela ne fonctionne pas pour moi pour le moment. field__label class. 

0
Eduardo Chongkan

cela peut être fait comme ça:

   $style='full_width';
   $path=$node->my_img_field['und']['0']['uri'];
   $style_url = image_style_url($style, $path);
   print "<img src=".file_create_url($style_url)." >";
0
Matoeil