[Drupal 7] Własne ikony do załączników segmentu

Data dodania wpisu: 14-04-2011

Pierwszy wpis dotyczący Drupala 7, bo tak się złożyło, że była potrzeba zrobić coś niestandardowego:)

Tworząc pole umożliwiające wprowadzenie pliku do segmentu, Drupal korzysta ze standardowych ikonek. Te są dostępne z poziomu modułu z plikami (w przypadku Drupala 7 - są one dostępne w ścieżce modules/file/icons.

Ale te ikonki do pięknych nie należą, a nie będziemy zmieniać plików na poziomie modułu, bo wiadomo, czym to grozi w przypadku update'u.

Zatem można taką akcję wykonać na poziomie własnej templatki, dodając w niej folder z ikonami, a następne przeciążając _file_icon() w pliku template.php własnego theme.

/**
 * Theme file icon according to file mimetype
 *
 * @param array
 * @return HTML themed icon
 */
function MYTHEME_file_icon($data) {
    $icon_ext = '.png';  //icons extension
    $icons_path = path_to_theme() . '/images/icons';  // path to icons directory
    $mimetype = explode('/', $data['file']->filemime);
    $type['main'] = $mimetype[0];
    $type['sub'] = $mimetype[1];
    $output = '';
    $default_icon = $icons_path . '/default' . $icon_ext;  // default icon path
    switch ($type['main']) {
        case 'image':
            $icon_path = $icons_path . '/image' . $icon_ext;
            break;
        case 'text':
            $icon_path = $icons_path . '/text' . $icon_ext;
            break;
        case 'application':
            $icon_path = $icons_path . '/' . $type['sub'] . $icon_ext;
            break;
        default:
            break;
    }

    if (isset($icon_path) && is_file($icon_path)) {
        // we create linked icon image to the attached file
        $output .= l(theme('image', array('path' => $icon_path, 'alt' => $data['file']->filename, 'title' => $data['file']->description)), file_create_url($data['file']->uri), array('html' => TRUE));
    } elseif (isset($default_icon) && is_file($default_icon)) {
        $output .= l(theme('image', array('path' => $default_icon, 'alt' => $data['file']->filename, 'title' => $data['file']->description)), array('html' => TRUE));
    }

    // output html with linked image and download link below an image
    $output = '<div class="file-icon file-icon-' . $type['main']. '-' . $type['sub']. '">' . $output . '<span>' . l(t('Download'), file_create_url($data['file']->uri)) . '</span></div>';

    return $output;
}

Poniżej przykładowy wynik po załadowaniu własnych ikonek:

Drupal 7 własne ikony załączników

Komentarze

Ten wpis nie posiada jeszcze komentarzy

Comments closed...