Артём Мáлков

Использование тега [leech] в шаблоне в DLE

6 июн16 комм

Тег [leech], насколько вы знаете, в CMS DataLife Engine позволяет скрыть настоящий, конечный URL той или иной ссылки на вашем сайте, а также препятствует ее индексации. Но вся проблема в том, что тег отрабатывает только в содержании статьи и никак иначе. Один же из пользователей нашего сайта задался вопросом о том, как можно использовать этот тег в другом месте сайта, например, в его шаблоне.

Поискав информацию в Интернете на этот счет, я обнаружил, что должной и готовой реализации нет, поэтому с радостью предоставляю вам свой вариант решения этого вопроса.

1. Подключитесь к вашему сайту по FTP.

2. Откройте файл main.php в папке /engine/modules/.

3. Найдите строку:

echo $tpl->result['main'];

и выше ее вставьте:

/*

	Использование тега [leech] ([leech_template]) в шаблоне сайта
	Автор: Артём Малков
	URL: https://www.pandoge.com/post/698

*/

function check_home_leech_template($url) {

	global $config;

	$url = strtolower(@parse_url($url, PHP_URL_HOST));
	$value = strtolower(@parse_url($config["http_home_url"], PHP_URL_HOST));

	if(!$value) {

		$value = $_SERVER["HTTP_HOST"];

	}

	if(!$url) {

		return true;
		
	}

	if($url != $value) {

		return false;

	} else {

		return true;

	}

}

function leech_template($url) {

	global $config;

	$url = strip_tags(trim(stripslashes(html_entity_decode($url, ENT_QUOTES, $config["charset"]))));
	$url = str_replace('\"', '"', $url);
	$url = str_replace("'", "", $url);
	$url = str_replace('"', "", $url);
	$url = str_replace("o", "o", $url);
	$url = preg_replace("/jаvascript(.*?):/i", "javascript:", $url);
	$url = preg_replace("/dаta(.*?):/i", "data:", $url);
	$url = htmlspecialchars($url, ENT_QUOTES, $config['charset']);
	$url_array = parse_url($url);

	if($url_array["scheme"] && !in_array($url_array["scheme"], array("http", "https", "mailto", "ftp", "nntp", "news", "tel"))) {

		return "";

	}
		
	if(stripos($url, "engine/go.php") !== false || (check_home_leech_template($url) && stripos($url, "do=go") !== false)) {
		
		return "";
	
	}
		
	$url = str_replace("&", "&", $url);
	$url = str_ireplace("document.cookie", "document.cookie", $url);
	$url = str_replace(" ", "%20", $url);
	$url = str_replace("<", "&#60;", $url);
	$url = str_replace(">", "&#62;", $url);
	$url = str_replace(array("{", "}", "[", "]"), array("%7B", "%7D", "%5B", "%5D"), $url);
	$url = preg_replace("/javascript:/i", "j&#1072;vascript:", $url);
	$url = preg_replace("/data:/i", "d&#1072;ta:", $url);

	if(stripos($url, $config["admin_path"] ) !== false) {

		return $url;

	}
		
	if(stripos($url, "engine/go.php") !== false || (check_home_leech_template($url) && stripos($url, "do=go") !== false)) {
		
		return $url;
	
	}

	if(!preg_match("#^(http|https|ftp|nntp|news)://#", $url) && !preg_match("#^(tel):#", $url) && $url[0] != "/" && $url[0] != "#") {
		
		$url = "http://".$url;
	
	}

	if($url == "http://") {
		
		return $url;
	
	}

	return $config["http_home_url"]."index.php?do=go&url=".rawurlencode(base64_encode($url));

}

$tpl->result["main"] = preg_replace_callback(
	"#\[(leech_template)\](\S.+?)\[/leech_template\]#i", function($match) {
		return leech_template($match[2]);
	},
	$tpl->result["main"]
);

Сохраните изменения и отправьте файл обратно на сайт.

4. Очистите кэш сайта. Установка закончена.

Теперь в шаблоне вашего сайта будет доступен тег [leech_template]. Он (обратите внимание) возвращает вам чистый, закодированный URL для использования его в теге <a>.

Пример использования:

<a href="[leech_template]https://www.pandoge.com[/leech_template]" rel="nofollow" target="_blank">Тестовая ссылка leech</a>

Если вы все сделали правильно, то на вашем сайте, в том месте шаблона, куда вы вставили данный код, появится зашифрованная ссылка, при этом в самом шаблоне останется читаемый (оригинальный) ее вид.

Хак тестировался на DLE версии 13.1, для более ранних версий, вероятнее всего, потребуется его доработка.

Можете использовать его как основу для реализации ваших идей, а если остались вопросы – пишите об этом в комментариях под данной статьей.

Рекомендуем к просмотру
Выводим информацию о новости в файле (attachment) в DLE
Хаки
Открытие ссылки [leech] в новой вкладке на DLE
Хаки
Использование PHP-вставок в шаблонах DLE
Хаки
16
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 1
    3
      •  Пользователь
    12 янв в 05:09

    Проблема в:

    if(stripos($url, $config["admin_path"] ) !== false) {
    
    		return $url;
    
    	}

    Не шарю за функционал, но если убрать, работает. DLE 16-17.

    • 0
    3
      •  Проверенный
    6 сен в 14:22

    А это нормально что ссылка скрывается только если ты авторизован на сайте, для всех остальных ссылки обычные ?

      • 1
      1067
        •  Команда Pandoge
      9 сен в 11:31

      Anemy, вообще, это никак не должно быть связано. Какая у вас версия DLE?

      • 2
      3
        •  Проверенный
      10 сен в 10:17

      Артём Мáлков, 15.3

      • 3
      3
        •  Проверенный
      3 окт в 10:05

      Anemy, 15.2 работает норм, возможно дело в версии

      • 0
      3
        •  Пользователь
      3 янв в 06:17

      Anemy, тоже самое. даже без понятий куда копать.

    • 0
    1
      •  Пользователь
    6 апр в 15:19

    Перестало работать на dle 16.0, просто выводит ссылку из доп поля

      • 2
      1067
        •  Команда Pandoge
      16 июл в 13:29

      Милош Иванович, сделал несколько тестов - ссылка формируется как надо. Чтобы помочь вам, нужно больше подробностей.

      • 0
      3
        •  Пользователь
      3 янв в 06:17

      Артём Мáлков, 17 DLE, тоже самое. Выводит закодированную только зареганым.

    • 1
    1
      •  Пользователь
    4 янв в 05:21

    Здравствуйте! Как можно использовать данный тек в дополнительных полях?

      • 3
      1067
        •  Команда Pandoge
      изменено 16 июл в 13:33

      Кирилл Зюганов, самый простой вариант: при выводе поля оборачивать его в тег [leech_template].

      Пример:

      [xfgiven_link]
      
      	<a href="[leech_template][xfvalue_link][/leech_template]" rel="nofollow" target="_blank">Ссылка</a>
      
      [/xfgiven_link]

      link - ваше поле, в котором указана ссылка.

    • 5
    7
      •  Проверенный
    4 дек в 19:56

    Здравствуйте, сделал все по инструкции, (сайт с музыкой) и решил скрыть прямые ссылки, но теперь при нажатии на скачать, качает html файл

      • 1
      1067
        •  Команда Pandoge
      5 дек в 00:19

      Сергей, какая версия DLE?

      • 1
      7
        •  Проверенный
      5 дек в 20:46

      Артём Мáлков, DLE 13.2

      • 2
      1067
        •  Команда Pandoge
      6 дек в 00:31

      Сергей, для помощи, нужно показать проблемный сайт и предоставить к нему доступы (админка+ FTP).

      • 1
      7
        •  Проверенный
      6 дек в 14:47

      Артём Мáлков, Я написал вам в Skype (Extrime919)

Подняться наверх
«Pandoge» - помощник вебмастера