DLE — Хак attachment. Изменяем стандартный attachment

Веб разработка » CMS DLE

Полностью на CSS3 без картинок скрипт для вывод кнопки на скачивания файлов в DLE.

В комплекте возможен вариант с установкой модального окна и подтверждением скачивания (исключает искажение статистики со случайными нажатиями).

Начиная примерно с версии DLE 11.0 в шаблон был введен новый файл — attachment.tpl, который убирает необходимость в данных манипуляциях. Для него просто заменяем его содержимое на код из комментария #13

Установка скрипта

Открыть engine/modules/function.php и где-то на 650-й строке найти следующий код:

$replace_1[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >{$row['name']}</a> [{$size}] ({$lang['att_dcount']} {$row['dcount']})</span>";

$replace_2[] = "<span class=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >\\1</a> [{$size}] ({$lang['att_dcount']} {$row['dcount']})</span>";

Заменить на:

//attachment
$replace_1[] = "
<div align=\"center\">
<hr class=\"att_hr\"/>
<div class=\"DownLoadWindow\"><div id=\"attachment\"><a href=\"#\" onclick=\"showDownLoad(); return false;\">Скачать <b>{$row['name']}</b></a></div></div>
<div id=\"attachment2\">Размер: <span>{$size} </span> Скачиваний: <span>{$row['dcount']} </span></div>
</div>
<div id=\"DownLoadWindow\"  style=\"display:none;\" ><div id=\"attachment3\"> <a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >cкачать</div>

<script type=\"text/javascript\">
function showDownLoad() {
$(function(){
    $('#DownLoadWindow').dialog({
        autoOpen: true,
        autoClose: true,
        width: 520,
        buttons: {
            \"Закрыть окно\" : function() {
                $(this).dialog(\"close\");
            },
        }

    });
});
}
</script>";
            $replace_2[] = "
<div align=\"center\">
<hr class=\"att_hr\"/>
<div class=\"DownLoadWindow\">
<div id=\"attachment\">             
<a href=\"#\" onclick=\"showDownLoad(); return false;\">Скачать <b>{$row['name']}</b></a>
</div></div>
<div id=\"attachment2\">  
Размер: <span>{$size} </span> Скачиваний: <span>{$row['dcount']} </span>
</div>
</div>
<div id=\"DownLoadWindow\"  style=\"display:none;\" >

<div id=\"attachment3\"> <a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >cкачать</div>

</div>
<script type=\"text/javascript\">
function showDownLoad() {
$(function(){
    $('#DownLoadWindow').dialog({
        autoOpen: true,
        autoClose: true,
        width: 520,
        buttons: {
            \"Закрыть окно\" : function() {
                $(this).dialog(\"close\");
            },
        }

    });
});
}
</script>";
//end attachment

3. Открыть файл стилей CSS в шаблоне и вставить:

/*---Ссылка на скачивание прикрепленного файла---*/

/*---Полоса с названием файла---*/
#attachment  { 
  text-align:center;
  border:1px solid #000;
  border-radius:3px; 
  background: #013027; 
  color: #808080; 
  width:500px; 
  padding:2px; 
  float:center; 
  min-height:20px;
  box-shadow: 1px 1px 2px #000;
}

#attachment a {color: #ccc; text-shadow: 5px 5px 10px #fff; }

/*---Показатели файла (размер и скачано)---*/
#attachment2{
  text-align:center;
  text-shadow: 5px 5px 5px #013027;
  color:#000;
  margin-top:5px;
  font-weight:700;  
}
#attachment2 span{color:#ff0000;}

/*---Кнопка на скачивание в всплывшем окне---*/
#attachment3  { 
  text-align:center;
  border:1px solid #000;
  border-radius:3px; 
  background: #013027; 
  padding:2px; 
  float:center; 
  box-shadow: 1px 1px 2px #000;
  margin:7px 0px 0px 0px;
}

#attachment3 a {font:40px bold; color: #ccc; text-shadow: 5px 5px 10px #fff; }

.att_hr{width:300px; margin:18px 0px;}

Вариант с модальным окном в какой-то момент перестал работать. Разбираться особого желания нет, да и с DLE я уже давно ушел, поэтому использую простую кнопку. Вместо огромного кода чуть выше, который мы заменяли в первом шаге. используем следующий укороченный вариант:

$replace_1[] = "
<div align=\"center\">
<hr class=\"att_hr\"/>
<div id=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >Скачать <b>{$row['name']}</b></a></div>
<div id=\"attachment2\">Размер: <span>{$size} </span> Скачиваний: <span>{$row['dcount']} </span></div>
</div>
";

            $replace_2[] = "
<div align=\"center\">
<hr class=\"att_hr\"/>
<div id=\"attachment\"><a href=\"{$config['http_home_url']}engine/download.php?id={$row['id']}{$area}\" >Скачать <b>{$row['name']}</b></a></div>
<div id=\"attachment2\">Размер: <span>{$size} </span> Скачиваний: <span>{$row['dcount']} </span></div>
</div>
";

Для тех, кто так и не разобрался в особенностях скрипта attachment.tpl, данный скрипт используется для вывода прикрепленного к записи файла на скачивание. Загружается и публикуется в редакторе статьи. Более современный в стиле Material Design шаблон и его место в редакторе статьи на скриншоте ниже