الترميز الذي تم إنشاؤه لعرض حقل ملف هو (PDF في هذا المثال):
<img src="/modules/file/icons/application-pdf.png" title="application/pdf" alt="" class="file-icon">
أود استخدام صورة رمز مختلفة. كيف يمكنني القيام بذلك دون تغيير محتوى/modules/file/icons؟
أعتقد أن بإمكاني إخفاء الصورة الافتراضية وعرض صورة مختلفة باستخدام CSS ، ولكنها تبدو فوضويًا بعض الشيء.
يمكنك تجاوز theme_file_icon
في السمة الخاصة بك ، وحدد صور أيقونات مختلفة. نرى file_icon_path
كمرجع فيما يتعلق بكيفية تحديد النواة للرموز التي يجب استخدامها.
يمكنك أيضًا تعيين متغير "file_icon_directory" على المسار إلى الرموز ، مثل file_icon_path
تبحث الدالة عن المسار في هذا المتغير.
ملاحظتان إضافيتان حول هذا:
كمثال ، كنت بحاجة إلى استخدام رمز مخصص لملف .bib (bibtex). هذا النوع تم تعيينه في file_default_mimetype_mapping () ، ولكنه افتراضي إلى رمز النص الافتراضي نظرًا لعدم وجود رمز محدد خصيصًا لنوع mime (text/x-bibtex).
لقد تجاوزت theme_file_icon () في template.php الخاص بموضوعي ، لكنني فعلت ذلك بحيث يتم تعديل مسار الرمز فقط حسب الحاجة ، ولا يتعين علي نسخ دليل الرموز الافتراضي إلى دليل السمة الخاص بي:
function mytheme_file_icon($variables) {
$file = $variables['file'];
$icon_directory = $variables['icon_directory'];
$mime = check_plain($file->filemime);
if ($mime == 'text/x-bibtex') {
$icon_directory = drupal_get_path('theme', 'mytheme') . '/images';
}
$icon_url = file_icon_url($file, $icon_directory);
return '<img class="file-icon" alt="" title="' . $mime . '" src="' . $icon_url . '" />';
}
الشيء الثاني هو أنه يجب عليك تسمية الرمز بشكل مناسب. إذا حافظت على استخدام file_icon_url () ، فإن هذا الرمز من هذه الوظيفة سيحدد اسم الملف للرمز:
// For a few mimetypes, we can "manually" map to a generic icon.
$generic_mime = (string) file_icon_map($file);
$icon_path = $icon_directory . '/' . $generic_mime . '.png';
if ($generic_mime && file_exists($icon_path)) {
return $icon_path;
}
لذا في حالتي ، احتجت إلى تسمية ملفي text-x-bibtex.png. بالطبع ، إذا كنت تريد فقط تسميته كما تريد (bibtex.png في هذه الحالة) ، فيمكنك فقط تعيين اسم الملف يدويًا:
$icon_url = $icon_directory . '/bibtex.png';
سيعمل أي منهما ، لكن هذه الطريقة تسمح لك بالاحتفاظ بالرموز الافتراضية في مكانها وفقط الأشياء حسب الحاجة.
أنا و tregis حصلت على هذا أيقونات حقل الملف الوحدة النمطية التي تم إجراؤها منذ فترة. أتمنى أن يساعدك هذا
تضيف هذه الوحدات القدرة على تغيير أيقونات حقل الملف الافتراضية. يمكنك استخدام حزم الرموز الأساسية (المضمنة في هذه الوحدة) ، أو يمكنك تحديد حزمة رموز مخصصة.
على الرغم من عدم كونها نظيفة مثل بعض الحلول المقدمة ، إلا أن طريقة بسيطة حقًا للتعامل مع ذلك هي استخدام محدد السمة "نوع" CSS3. يمكنك استخدام هذا لإضافة الرمز المخصص بسرعة كصورة خلفية إلى الرابط الخاص بك. النتيجة أن كلاهما مرتبط بالملف الهدف. يمكنك بعد ذلك إخفاء الصورة الأصلية. فعلت هذا للحصول على المظهر التالي:
هذا هو CSS الذي استخدمته لتحقيق النتائج أعلاه:
.views-field-field-image-files img.file-icon {display:none;}
.views-field-field-image-files a {padding-left: 100px; height: 80px; display: block; margin-bottom: 20px;}
.views-field-field-image-files a[type*="application/pdf"] {background: url(../img/icons/file-icon-pdf.gif) no-repeat; }
.views-field-field-image-files a[type*="application/Zip"] {background: url(../img/icons/file-icon-Zip.gif) no-repeat; }
.views-field-field-image-files a[type*="application/ppt"] {background: url(../img/icons/file-icon-ppt.gif) no-repeat; }
.views-field-field-image-files a[type*="application/pptx"] {background: url(../img/icons/file-icon-ppt.gif) no-repeat; }
في المثال الخاص بي ، كنت أظهر حقول الملفات باستخدام طرق العرض.
يمكنك (عادة) وظائف معالجة ما قبل المعالجة. لذا إذا كنت:
theme_file_icon()
في مظهرك.نسخ كامل modules/file/icons
دليل لموضوعك (استخدمت file_icons
) وأضف وظيفة المعالجة المسبقة إلى قالب السمة الخاص بك. php:
/**
* Implements hook_preprocess_HOOK() for theme_file_icon().
*
* Change the icon directory to use icons from this theme.
*/
function MYTHEME_preprocess_file_icon(&$variables) {
$variables['icon_directory'] = drupal_get_path('theme', 'MYTHEME') . '/file_icons';
}
يمكنك أيضًا إجراء تجاوزات مشروطة بهذه الطريقة ala @ wonder95 ولكني أردت أن أبقي الأمور بسيطة.