Использование тега [leech] в шаблоне в DLE
Тег [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("<", "<", $url);
$url = str_replace(">", ">", $url);
$url = str_replace(array("{", "}", "[", "]"), array("%7B", "%7D", "%5B", "%5D"), $url);
$url = preg_replace("/javascript:/i", "jаvascript:", $url);
$url = preg_replace("/data:/i", "dа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, для более ранних версий, вероятнее всего, потребуется его доработка.
Можете использовать его как основу для реализации ваших идей, а если остались вопросы – пишите об этом в комментариях под данной статьей.