DLE: Изменение названий загружаемых картинок и файлов

Сегодня нужно было загрузить порядка 30 изображений, все бы было хорошо, но имена у этих картинок были все разные и не красивые. И как Вы уже понял мне нужно было их переименовать, для решения этой проблемы было 2 способа: Первый из них, это потратить кучу времени переименновывая все изображения вручную, а второй — это подправить код движка так, чтобы все происходило автоматически при загрузки их на сервер, что я собственно и сделал. Решил поделится, вдруг кому пригодится 🙂

Установка хака переименования загруженных файлов и картинок:

  1. Открываем engine/ajax/upload.php

    • Находим:
      $image_name = totranslit( convert_unicode( implode( ".", $img_name_arr ), $config['charset'] )  ) . "." . $type;
    • Заменяем на:
      $imagename = totranslit( trim( htmlspecialchars( strip_tags( convert_unicode( $_POST['imagename'], $config['charset'] ) ) ) ) );
      if ( $imagename != '' ) $image_name = $imagename . '.' . $type;
       else $image_name = totranslit( convert_unicode( implode( ".", $img_name_arr ), $config['charset'] ) ) . "." . $type;
  2. Открываем engine\inc\files.php

    • Находим:
      $imageurl = trim( htmlspecialchars( strip_tags( $_POST['imageurl'] ) ) );
    • Ниже вставляем:
      $imagename = totranslit( trim( htmlspecialchars( strip_tags( $_POST['imagename'] ) ) ) );
    • Находим 2 раза:
      if( $image_name != "" ) {
      $curr_key = key( $img_name_arr );
       unset( $img_name_arr[$curr_key] );
       $image_name = totranslit( implode( ".", $img_name_arr ) ) . "." . $type;
       }
    • Заменяем на:
      if ( $imagename != '' ) $image_name = $imagename . '.' . $type;
       elseif ( $image_name != '' )
       {
       $curr_key = key( $img_name_arr );
       unset( $img_name_arr[$curr_key] );
       $image_name = totranslit( implode( '.', $img_name_arr ) ) . '.' . $type;
       }
    • Находим:
      <div>{$lang['upload_t_size']} <input type="text" name="t_size" id="t_size" size=9 value="{$config['max_image']}"> px <select name="t_seite" id="t_seite"><option value="0" {$t_seite_selected[0]}>{$lang['upload_t_seite_1']}</option><option value="1" {$t_seite_selected[1]}>{$lang['upload_t_seite_2']}</option><option value="2" {$t_seite_selected[2]}>{$lang['upload_t_seite_3']}</option></select></div>
    • Ниже вставляем:
      <div>Изменить имя файла на: <input type="text" name="imagename" size="55" /></div>
  3. Вот и все. Данный хак, действует как при массовой, так и при обычной загрузки.
ПОЛЕЗНО  DLE: показываем/скрываем блоки для мобильных устройств

Автор: Брупт

п.с.: у себя доработал с ява-скриптом, что бы автоматом брался заголовок новости и подставлялся в нужное окошко при аплоаде. если нужна и эта правка — пишите в комментах.

наконец-то у себя доработал функционал по транслиту в кодировке win-1251. сделал следующее:

в файле /engine/inc/inserttag.php нашел функцию function image_upload() и привел ее к следующему виду:

function image_upload()
{
//var ttile = $('#title').value;
var ttile = document.getElementById('title').value;
		
		function get_trans(txt) {
			en_to_ru = {
				'а': 'a',
				'б': 'b',
				'в': 'v',
				'г': 'g',
				'д': 'd',
				'е': 'e',
				'ё': 'jo',
				'ж': 'zh',
				'з': 'z',
				'и': 'i',
				'й': 'j',
				'к': 'k',
				'л': 'l',
				'м': 'm',
				'н': 'n',
				'о': 'o',
				'п': 'p',
				'р': 'r',
				'с': 's',
				'т': 't',
				'у': 'u',
				'ф': 'f',
				'х': 'h',
				'ц': 'c',
				'ч': 'ch',
				'ш': 'sh',
				'щ': 'sch',
				'ъ': '',
				'ы': 'y',
				'ь': '',
				'э': 'e',
				'ю': 'ju',
				'я': 'ja',
				' ': '_',
				'і': 'i',
				'ї': 'i'
			};
			
			nameVal = txt.toLowerCase();
			nameVal = trim(nameVal);
			nameVal = nameVal.split("");
			var trans = new String();
			for (i = 0; i < nameVal.length; i++) {
				for (key in en_to_ru) {
					val = en_to_ru[key];
					if (key == nameVal[i]) {
						trans += val;
						break
					} else if (key == "ї") {
						trans += nameVal[i]
					};
				};
			};
			return trans;
		}
		
		function trim(string) {
			//Удаляем пробел в начале строки и ненужные символы
			string = string.replace(/(^\s+)|'|"|<|>|\!|\||@|#|$|%|^|\^|\$|\\|\/|&|\*|\(\)|\|\/|;|\+|№|,|\?|:|{|}|\[|\]/g, "");
			return string;
		};


alert(get_trans(ttile));

var ttile2 = (get_trans(ttile));
window.open('?mod=files&action=quick&area=' + selField + '&author={$row['autor']}&news_id={$id}&new_title=' + ttile2 + '', '_Addimage', 'toolbar=0,location=0,status=0, left=0, top=0, menubar=0,scrollbars=yes,resizable=0,width=640,height=550');    

}

в итоге в окошко загрузки начало передаваться через GET правильное значение 🙂

 

  • bismoney

    А на 10.2? ) что бы автоматом брался заголовок.
    Возможно? )

  • Alex

    Tozhe interesuet dlja dle 10.2 !!!

  • Roman NMSK

    с другими версиями ДЛЕ не работал. т.ч. особо не подскажу. пробуйте искать подобный код и править по инструкции

  • DJCron

    Если перед вами возникла задача проверить тип или размеры картинки перед загрузкой файла на сервер, вам потребуется функция getimagesize. В качестве аргумента она принимает имя файла на диске и возвращает массив, первые два элемента которого — ширина и высота соответственно, третий — тип изображения. В случае невозможности прочитать из указанного файла корректное изображение, функция возвращает ложь.

  • Volodymyr

    В 10 версиях движка нет таких строк.
    Кто скажет как быть?