2012-06-21 11 views
19

Jest całkiem możliwe, że po prostu szukam pomocy w znalezieniu nazwy funkcji, która już istnieje w drupalu (7), ale czasami dokumentacja jest nieco trudna w nawigacji. Mam nadzieję, że ktoś może mi pomóc.Jak wydrukować pole obrazu drupal?

Mam węzeł, który ma niestandardowe pole.

Pracuję w szablonie field--mycustomcontenttype.tpl.php i tak staram się znaleźć nazwę funkcji PHP, która wyprowadza i pole obrazu ze stylami obrazu.

mycustomcontenttype jest węzłem z następującym dodatkowym polu:

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

Więc mógł wyświetlić obraz stosując (brzydki) ręka walcowane funkcje, które przyjmuje wartość znaleziono w $item['#options']['entity']->field_image a nie zastępowanie public:// dla rzeczywistej ścieżki serwera, a następnie możliwe jest również, że chcę załadować obraz z poprawnym stylem obrazu drupal (miniatura, niestandardowy styl, itp.)

Niestety, po prostu nie mam Pomyśl, jak się nazywa zabawa ction działający tak: unknown_function_name_drupal_image_print($item['#options']['entity']->field_image, 'thumnail'); jest.

Czy jest ktoś, kto może mi pomóc to znaleźć?

Odpowiedz

23

Szukasz image_style_url(style_name, image_url);

Na przykład:

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

EDIT

Jak wskazano można również ustawić styl obrazu, na stronie Zarządzanie wyświetlenia dla typu zawartości i następnie wypisz za pomocą render.

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

Zgadzam się z tym, chociaż powiedziałbym, że lepiej jest renderować obraz za pomocą warstwy tematycznej Drupals http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_image/7 –

+0

Całkowicie się zgadzam, ale pytanie wydawało się szukać funkcji, która przyjmuje styl obrazu, w którym to robi. Edytowałem, aby uwzględnić opcję renderowania. – SpaceBeers

+0

Zaoszczędziłem mój czas. Wielkie dzięki –

12

Odpowiedź SpaceBeers jest poprawna - można wydrukować obraz w ten sposób. Ale po stronie Drupala jest źle. Masz niezdefiniowany język i bezpośrednio używasz tylko pierwszego pola, jeśli jest to pole wielowartościowe. Ponadto, na dysku twardym kodowane są niektóre dobre rzeczy Drupala, takie jak zmiana stylu obrazu za pomocą interfejsu użytkownika.

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

To będzie wydrukować obraz za pomocą odpowiednich wymiarach (w znaczniku img), znaczniki alt i zawsze przestrzega tego, co zostało ustawione w zakładce Manage typu węzła mycustomcontenttype.

+0

Poprawiłem moją odpowiedź, aby uwzględnić to. Zakładałem, że już to wiedzą i chcieli móc wydrukować obraz w innym stylu niż domyślny. – SpaceBeers

1

Myślę, że odpowiedź Ayesh K jest preferowanym sposobem Drupal drukowania pola na stronie. Znacznie łatwiejsze do odczytania i zachowują wszelkie operacje/ustawienia wstępne, które robisz do obrazu w interfejsie użytkownika.

Można go przerwać, ale wydaje się, że byłoby to w przypadku wąskich zastosowań.

8

Używam tego:

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

Można również zawierać „atrybutów” zmienną tablica zawierająca elementy (EG) klasy ALT & tytule. Myślę, że jest to lepsza opcja pozwalająca na wybór stylu obrazu, przy jednoczesnym użyciu domyślnego renderowania obrazów Drupala (lub twojego motywu).

14

Zrobiłbym to używając kombinacji field_get_items i field_view_value.

Na przykład:

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

mam napisać o dostępie pola i tym samym rzeczy here.

Powodzenia.

+2

To jest świetne! Jednak (przynajmniej dla Drupala 7), wywołanie wartości pole_widoku powinno wynosić: wartość_opcji_pola ("węzeł", węzeł $, "obraz_polowy", $ obraz [0], tablica ( "typ" => "obraz", 'ustawienia' => array ( 'image_style' => 'custom_image_style' // może być 'miniatur' ) ); ... trzeba podać nazwę pola –

+0

Czy istnieje jakiś sposób, aby klasy cSS. Okładka pola też ?! – SaidbakR

+0

to działało dla mnie i wydaje się szanować moduł językowy oob –

3

Należy użyć

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

zamiast

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

Ten pracował dla mnie przez dodanie obrazu na mojej stronie z wynikami wyszukiwania:

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

Zbyt wiele rzeczy, takich jak eksplozja uri, zbudowanie filepaty ... przepraszam, ale powinno być o wiele prostsze. –

0

można to zrobić tak :

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

Uwaga: Etykieta powyżej klasy mogą być usuwane z Content-Type Manage-Display ustawień pól, poprzez ustawienie wytwórnię do, ale to nie działa teraz dla mnie, więc używam po prostu CSS, aby ukryć klasę .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

Podczas gdy ten kod może odpowiedzieć na pytanie, podanie dodatkowego kontekstu dotyczącego tego, w jaki sposób i/lub dlaczego rozwiązuje problem, poprawiłoby długoterminową wartość odpowiedzi. (od [tutaj] (https://meta.stackoverflow.com/questions/300837/what-comment-should-i-add-to-code-only-answers)) – kowsky

Powiązane problemy