2012-06-21 21 views
19

Rất có thể là tôi chỉ tìm kiếm trợ giúp tìm tên của hàm đã tồn tại trong drupal (7) nhưng đôi khi tài liệu hướng dẫn hơi khó điều hướng. Hy vọng rằng ai đó có thể giúp tôi.Làm cách nào để xuất một trường hình ảnh drupal?

Tôi có một nút có trường tùy chỉnh.

Tôi đang làm việc trong một mẫu field--mycustomcontenttype.tpl.php và vì vậy, tôi đang cố gắng tìm tên của hàm PHP xuất ra và trường hình ảnh có kiểu hình ảnh.

mycustomcontenttype là một nút với lĩnh vực bổ sung sau đây:

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

Vì vậy, tôi thể hiển thị hình ảnh sử dụng một (xấu xí) tay cán chức năng mà mất giá trị được tìm thấy trong $item['#options']['entity']->field_image và làm việc thay thế public:// cho đường dẫn máy chủ thực tế, và sau đó nó cũng có thể là tôi sẽ muốn tải hình ảnh với phong cách hình ảnh drupal chính xác (hình thu nhỏ, phong cách tùy chỉnh, vv ...)

Đáng buồn thay, tôi không có ý tưởng tên của niềm vui ction hoạt động như sau: unknown_function_name_drupal_image_print($item['#options']['entity']->field_image, 'thumnail');.

Có ai có thể giúp tôi tìm thấy điều này không?

Trả lời

23

Bạn đang tìm kiếm image_style_url(style_name, image_url);

Ví dụ:

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

EDIT

Như đã chỉ ra bạn cũng có thể thiết lập các phong cách hình ảnh trong trang hiển thị Quản lý cho các loại nội dung và sau đó đầu ra bằng cách sử dụng render.

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

Tôi đồng ý với điều này, mặc dù tôi cho rằng sẽ tốt hơn khi hiển thị hình ảnh bằng cách sử dụng lớp chủ đề Drupals http://api.drupal.org/api/drupal/includes!theme.inc/function/theme_image/7 –

+0

Tôi hoàn toàn đồng ý, nhưng câu hỏi dường như đang tìm kiếm một chức năng mà có phong cách hình ảnh trong đó điều này không. Tôi đã chỉnh sửa để bao gồm các tùy chọn render mặc dù. – SpaceBeers

+0

Đã lưu thời gian của tôi. Cảm ơn rất nhiều –

12

Câu trả lời của SpaceBeers là chính xác - bạn có thể in hình ảnh theo cách đó. Nhưng ở phía Drupal, nó rất tệ. Bạn có ngôn ngữ không xác định và trực tiếp chỉ sử dụng trường đầu tiên nếu đó là trường đa giá trị. Ngoài ra, bạn đang hardcoding một số công cụ tốt đẹp của Drupal như thay đổi phong cách hình ảnh bằng cách sử dụng giao diện người dùng.

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

này sẽ in hình ảnh với kích thước thích hợp (trong thẻ img), thẻ alt, và luôn luôn tôn trọng những gì bạn đã thiết lập trong tab Quản lý hiển thị của các loại nút mycustomcontenttype.

+0

Tôi đã sửa đổi câu trả lời của mình để bao gồm điều này. Tôi cho rằng họ đã biết điều này và muốn có thể xuất hình ảnh theo một phong cách khác sang hình mặc định. – SpaceBeers

1

Tôi nghĩ câu trả lời của Ayesh K là cách Drupal ưa thích để in một trường vào trang. Dễ đọc hơn nhiều và giữ mọi hoạt động/cài đặt trước bạn thực hiện với Hình ảnh của mình trong giao diện người dùng.

Bạn có thể phá vỡ nó, nhưng có vẻ như đó sẽ là trường hợp sử dụng hẹp.

8

tôi sử dụng này:

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

Bạn cũng có thể bao gồm một "thuộc tính" mảng biến có chứa các yếu tố cho (ví dụ) lớp, alt & tiêu đề. Tôi nghĩ rằng đây là một lựa chọn tốt hơn cho phép bạn lựa chọn phong cách hình ảnh, trong khi vẫn sử dụng hình ảnh mặc định của Drupal (hoặc chủ đề của bạn).

14

Tôi sẽ thực hiện việc này bằng cách kết hợp field_get_itemsfield_view_value.

Ví dụ:

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

Tôi có một ghi lên về truy cập hiện trường và điều này rất here.

Chúc may mắn.

+2

Điều này thật tuyệt! Tuy nhiên (đối với Drupal 7 ít nhất), lệnh gọi field_view_value phải là: field_view_value ('nút', $ node, 'field_image', $ images [0], mảng ( 'type' => 'image', 'settings' => array ( 'image_style' => 'custom_image_style' // có thể là 'thumbnail' ) ); ... bạn cần phải bao gồm tên trường. –

+0

Có cách nào để css lớp – SaidbakR

+0

điều này làm việc cho tôi và dường như tôn trọng các mô-đun ngôn ngữ oob –

3

Bạn nên sử dụng

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

thay vì

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

này làm việc cho tôi để thêm một hình ảnh để trang kết quả tìm kiếm của tôi:

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

quá nhiều thứ xảy ra, như phải phát nổ uri, tạo tệp ... xin lỗi nhưng đơn giản hơn rất nhiều. –

0

này có thể được thực hiện như thế :

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

Lưu ý: Nhãn-trên lớp có thể được loại bỏ bằng các content-type thiết lập Quản lý-hiển thị của các lĩnh vực, bằng cách thiết lập Label để, nhưng điều đó không làm việc cho tôi ngay bây giờ vì vậy tôi chỉ đơn giản là sử dụng CSS để ẩn lớp .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

Trong khi mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về cách thức và/hoặc lý do giải thích vấn đề này sẽ cải thiện giá trị lâu dài của câu trả lời. (từ [tại đây] (https://meta.stackoverflow.com/questions/300837/what-comment-should-i-add-to-code-only-answers)) – kowsky