it-swarm.asia

كيفية تغيير أيقونات حقل الملف (بدون تغيير النواة)؟

الترميز الذي تم إنشاؤه لعرض حقل ملف هو (PDF في هذا المثال):

<img src="/modules/file/icons/application-pdf.png" title="application/pdf" alt="" class="file-icon">

أود استخدام صورة رمز مختلفة. كيف يمكنني القيام بذلك دون تغيير محتوى/modules/file/icons؟

أعتقد أن بإمكاني إخفاء الصورة الافتراضية وعرض صورة مختلفة باستخدام CSS ، ولكنها تبدو فوضويًا بعض الشيء.

11
pushka

يمكنك تجاوز theme_file_icon في السمة الخاصة بك ، وحدد صور أيقونات مختلفة. نرى file_icon_path كمرجع فيما يتعلق بكيفية تحديد النواة للرموز التي يجب استخدامها.

يمكنك أيضًا تعيين متغير "file_icon_directory" على المسار إلى الرموز ، مثل file_icon_path تبحث الدالة عن المسار في هذا المتغير.

10
jhedstrom

ملاحظتان إضافيتان حول هذا:

  1. ليس من الضروري نسخ جميع ملفات الرموز الافتراضية إلى دليل السمة الخاص بك.
  2. إذا كنت تستخدم رمزًا مخصصًا ، فيجب تسميته بشكل مناسب حتى يمكن العثور عليه.

كمثال ، كنت بحاجة إلى استخدام رمز مخصص لملف .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';

سيعمل أي منهما ، لكن هذه الطريقة تسمح لك بالاحتفاظ بالرموز الافتراضية في مكانها وفقط الأشياء حسب الحاجة.

4
wonder95

أنا و tregis حصلت على هذا أيقونات حقل الملف الوحدة النمطية التي تم إجراؤها منذ فترة. أتمنى أن يساعدك هذا

تضيف هذه الوحدات القدرة على تغيير أيقونات حقل الملف الافتراضية. يمكنك استخدام حزم الرموز الأساسية (المضمنة في هذه الوحدة) ، أو يمكنك تحديد حزمة رموز مخصصة.

1
Rudá Maia

على الرغم من عدم كونها نظيفة مثل بعض الحلول المقدمة ، إلا أن طريقة بسيطة حقًا للتعامل مع ذلك هي استخدام محدد السمة "نوع" CSS3. يمكنك استخدام هذا لإضافة الرمز المخصص بسرعة كصورة خلفية إلى الرابط الخاص بك. النتيجة أن كلاهما مرتبط بالملف الهدف. يمكنك بعد ذلك إخفاء الصورة الأصلية. فعلت هذا للحصول على المظهر التالي:

Screenshot of result

هذا هو 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; }

في المثال الخاص بي ، كنت أظهر حقول الملفات باستخدام طرق العرض.

0
Paul Trotter

يمكنك (عادة) وظائف معالجة ما قبل المعالجة. لذا إذا كنت:

  1. لا بأس من نسخ جميع الرموز في السمة الخاصة بك لتجاوز رمز واحد أو أكثر.
  2. لا تهتم بتجاوز 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 ولكني أردت أن أبقي الأمور بسيطة.

0
Cottser