2012-06-21 11 views
19

È possibile che cerco semplicemente di trovare il nome di una funzione già presente in Drupal (7), ma a volte la documentazione è un po 'difficile da navigare. Spero che qualcuno possa aiutarmi.Come si genera un campo di immagine drupal?

Ho un nodo che ha un campo personalizzato.

Sto lavorando all'interno di un modello field--mycustomcontenttype.tpl.php e così sto cercando di trovare il nome della funzione PHP che emette e il campo immagine con gli stili di immagine.

mycustomcontenttype è un nodo con la seguente campo aggiuntivo:

[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 
     (
    ) 
) 

Così potuto visualizzare l'immagine utilizzando un (brutto) mano funzioni laminati che assume il valore trovato in $item['#options']['entity']->field_image e fa la sostituzione di public:// per il percorso effettivo del server, e poi è anche possibile che io voglia caricare l'immagine con lo stile corretto della drupal image (miniatura, stile personalizzato, ecc ...)

Purtroppo, non ho proprio idea quale sia il nome del divertimento ction che funziona qualcosa come: unknown_function_name_drupal_image_print($item['#options']['entity']->field_image, 'thumnail'); è.

C'è qualcuno che può aiutarmi a trovare questo?

risposta

23

Siete alla ricerca di image_style_url(style_name, image_url);

Ad esempio:

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

EDIT

Come sottolineato è anche possibile impostare lo stile immagine nella pagina Gestisci display per il tipo di contenuto e quindi uscita usando render.

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

sono d'accordo con questo, però direi che è meglio rendere l'immagine utilizzando Drupals strato tema http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_image/7 –

+0

Sono assolutamente d'accordo, ma la domanda sembrava essere alla ricerca di una funzione che riprenda lo stile dell'immagine in cui ciò avviene. Ho modificato per includere l'opzione di rendering però. – SpaceBeers

+0

Salvato il mio tempo. Grazie mille –

12

La risposta di SpaceBeers è corretta: è possibile stampare l'immagine in questo modo. Ma nel lato Drupal, è cattivo. La lingua è indefinita e si utilizza direttamente solo il primo campo se si tratta di un campo a più valori. Inoltre, stai codificando alcune delle cose belle di Drupal, come cambiare lo stile dell'immagine usando l'interfaccia utente.

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

Questo stamperà l'immagine con dimensioni adeguate (in tag img), alt tag, e rispetta sempre quello che si è impostato in Gestione visualizzazione scheda del tipo di nodo mycustomcontenttype.

+0

Ho modificato la mia risposta per includerla. Presumo che lo sapessero già e volevano essere in grado di produrre l'immagine in uno stile diverso da quello predefinito. – SpaceBeers

1

Penso che la risposta di Ayesh K sia il metodo Drupal preferito per stampare un campo sulla pagina. Molto più facile da leggere e mantiene tutte le operazioni/preimpostazioni che fai alla tua immagine nell'interfaccia utente.

È possibile suddividerlo, ma sembra che si tratti di casi di utilizzo limitati.

8

Io uso questo:

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

È possibile includere anche una variabile di matrice "attributi" che contiene elementi per (ad esempio) di classe, alt & titolo. Penso che questa sia un'opzione migliore per consentire la scelta dello stile dell'immagine, pur continuando a utilizzare il rendering di immagini predefinito di Drupal (o del tuo tema).

14

Lo farei utilizzando una combinazione di field_get_items e field_view_value.

Ad esempio:

<?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); ?> 

ho una scrittura fino a circa l'accesso campo e questo cosa here.

Buona fortuna.

+2

Questo è fantastico! Tuttavia (per Drupal 7 almeno), la chiamata a field_view_value deve essere: field_view_value ('nodo', $ nodo, 'field_image', $ images [0], array ( 'type' => 'image', 'impostazioni' => array ( 'image_style' => 'custom_image_style' // potrebbe essere 'miniature' ) ); ... è necessario includere il nome del campo –

+0

esiste un modo per classe CSS a. – SaidbakR

+0

questo ha funzionato per me e sembra rispettare il modulo linguistico –

3

Si dovrebbe usare

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

invece di

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

Questo ha funzionato per me per aggiungere un'immagine alla mia pagina dei risultati di ricerca:

<?php if ($result['node']-> field_image): ?> 
    <?php 
    $search_image_uri = $result['node']-> field_image['und'][0]['uri']; 
    // assuming that the uri starts with "public://" 
    $search_image_locate = explode('//', $search_image_uri); 
    $search_image_filepath = '/sites/actual/path/to/public/' . $search_image_locate[1]; 
    ?> 
    <div class="search-image"> 
    <img src="<?php print $search_image_filepath; ?>" /> 
    </div> 
<?php endif; ?> 
+0

troppe cose che accadono, come dover esplodere l'uri, costruire il filepath ... scusate ma dovrebbe essere molto più semplice. –

0

questo può essere fatto in quel modo :

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

Nota: L'etichetta-sopra classe potrebbe essere rimosso con il tipo di contenuto Manage-Mostra le impostazioni dei campi, impostando l'etichetta, ma per ora non funziona per me, quindi sto semplicemente usando i CSS per nascondere la classe .field__label.

0
<?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

Sebbene questo codice possa rispondere alla domanda, fornire un contesto aggiuntivo riguardo a come e/o perché risolve il problema migliorerebbe il valore a lungo termine della risposta. (da [qui] (https://meta.stackoverflow.com/questions/300837/what-comment-should-i-add-to-code-only-answers)) – kowsky