it-swarm.asia

image_style_url لا يخلق الصور

أنا أستخدم image_style_url للحصول على صورة مصغرة لصورة أضفتها من خلال واجهة المسؤول.

// $foo->field_picture['und'][0]['uri'] has value public://foo.jpg
image_style_url('foo-thumb', $foo->field_picture['und'][0]['uri']);

ينص API على أنه سيتم إنشاء الصورة عند طلب URL. ومع ذلك ، عند زيارة الصفحة ، لا يتم عرض الصورة (404). يبدو أن عنوان URL الذي تم إرجاعه من الوظيفة جيد التكوين ، ولكن لم يتم إنشاء الملف.

المجلد "foo-thumb" موجود في مجلد البيانات العامة ويجب أن تكون أذونات الملف على ما يرام. لقد حاولت مسح ذاكرة التخزين المؤقت للصور (دروبال فوش- فلوش- إبهام) ولكن لا توجد نتائج.

أيه أفكار؟

11
Bart

من: https://drupal.org/drupal-7.20-release-notes

بالإضافة إلى ذلك ، لن تعمل أي تعليمات برمجية تنشئ ارتباطًا برمجيًا لمشتق صورة بدون استخدام وظيفة API image_style_url () القياسية بشكل صحيح إذا لم تكن الصورة موجودة بالفعل في نظام الملفات ، نظرًا لأن الرمز المميز لن يكون موجودًا في URL.

بدلاً من ذلك يمكنك فعل شيء كهذا ؛

$image_uri      = $node->field_image[LANGUAGE_NONE][0]['uri']; // or any public://my_image
$style          = 'my_style';
$derivative_uri = image_style_url ($style, $image_uri);
$success        = file_exists($derivative_uri) || image_style_create_derivative(image_style_load($style), $image_uri, $derivative_uri);

$new_image_url  = file_create_url($derivative_uri);
22
Matthieu Gadrat

أحد الأخطاء الشائعة هو أن عناوين URI غير منسقة بشكل صحيح. تحقق من أن معلمة URI مسبوقة بـ public://.

سوء الممارسة

$imageUrl = image_style_url('style_name', 'myimage.jpg');
$imageUrl = image_style_url('style_name', $node->field_x[$node->language][0]['filename']);

يؤدي هذا إلى إخراج عنوان URL للصورة ذات النمط (مع الرمز المميز للصورة) ، لكنه لا ينشئ صورة ذات نمط عندما لم يتم إنشاؤها مسبقًا.


الممارسة الجيدة

$imageUrl = image_style_url('style_name', file_build_uri('myimage.jpg')); // changes to 'public://myimage.jpg'
$imageUrl = image_style_url('style_name', $node->field_x[$node->language][0]['uri']);

يؤدي هذا إلى إخراج عنوان URL ذي نمط ، مثل المذكور أعلاه ، وإنشاء صورة ذات نمط إذا لم يكن هناك أي منها.

7
timofey.com

كان مسار نظام الملفات العام غير صحيح.

1
Bart
$fid = file_load($field_yuorfield_fid);          
$image_uri = image_style_url('yuor_style', $fid->uri);
fopen($image_uri, 'r');

هنا يمكن استخدام رابط لإنشاء أتش تي أم أل

1
Basil

خيار آخر هو استخدام وظيفة السمة.

$img = theme('image_style', array('style_name' => 'your_image_style_machine_name', 'path' => $node->field_image['und'][0]['uri']));

بدلاً من إرجاع عنوان URL ، سيتم إرجاع html للصورة.

1
rparker

تأكد من أن لديك foo-thumb النمط ، يمكنك التحقق في admin/config/media/image-styles.

المعلمات الأولى image_style_url اسم نمط نمط ، وليس مجلد الاسم.

0
Sang Le Thanh

إذا تلقيت 404 عند محاولة عرض الصورة ، فمن المحتمل أن اسم نمط الصورة غير صحيح. في حالتي ، لم يكن اسم النمط الذي ظهر في Image Styles هو اسم الجهاز لاسم النمط. عند التمرير فوق النمط ، سيعرض عنوان URL اسم الجهاز لاسم النمط. إما تغييره إلى اسم الجهاز أو حذف التيار وإعادة إنشائه بالاسم المطلوب.

0
user28555