
Для придания валидности по спецификации XHTML в пользовательской части Dle, можно применить
хаки dle для Замены атрибут ссылки target на атрибут externa. В результате во всех ссылках в публикациях, будет заменён атрибут target на атрибут external парсером скрипта и открываться в новом окне.
Многим веб-мастерам известно о атрибут nofollow, но мало кто знает и применяет атрибут external, хотя многие заметили, что этот атрибут давно используется для обработки ссылок в Wordpress.
Какого же его основное предназначение ?
Известно, что в спецификации XHTML атрибут ссылки target не поддерживается. Исходя из этого, конструкция вида:target="_blank" не является валидной. Поэтому открытие нового окна браузера – стало задачей скрипта, а не гипертекстовой разметки. Открывать ссылки в новом окне теперь предлагается с помощью, например языка js vascript. Для этого отдельными разработчиками и был искусственно введен атрибут external, а как мы знаем несколько значений атрибута rel могут быть перечислены через пробел, что мы и сделаем в конструкции external nofollow.
Но не всё-так просто, как кажется сначала. Одно только добавление атрибута external к ссылке не даст браузеру команду на открытие нового окна, для обработки ссылок с этим атрибутом еще нужен и специальный скрипт, который бы их все обрабатывал.
1.Открываем /engine/classes/parse.class.php
Ищем:
else $target = "target="_blank""; if( $url['leech'] ) { $url['html'] = $config['http_home_url'] . "engine/go.php?url=" . rawurlencode( base64_encode( $url['html'] ) ); return "<!--dle_leech_begin--><a href="" . $url['html'] . "" " . $target . ">" . $url['show'] . "</a><!--dle_leech_end-->" . $url['end']; } else { if ($this->safe_mode AND !$config['allow_search_link']) return "<a href="" . $url['html'] . "" " . $target . " rel="nofollow">" . $url['show'] . "</a>" . $url['end']; else return "<a href="" . $url['html'] . "" " . $target . ">" . $url['show'] . "</a>" . $url['end'];
Меняем на:
else $target = "rel="external""; if( $url['leech'] ) { $url['html'] = $config['http_home_url'] . "engine/go.php?url=" . rawurlencode( base64_encode( $url['html'] ) ); return "<!--dle_leech_begin--><a href="" . $url['html'] . "" rel="external nofollow">" . $url['show'] . "</a><!--dle_leech_end-->" . $url['end']; } else { if ($this->safe_mode AND !$config['allow_search_link']) return "<a href="" . $url['html'] . "" rel="external nofollow">" . $url['show'] . "</a>" . $url['end']; else return "<a href="" . $url['html'] . "" " . $target . ">" . $url['show'] . "</a>" . $url['end'];
2. Из папки Developer/uncompressed дистрибутива скрипта DataLife Engine берём несжатые файлы для
Dle 9.2 - dle_js.js,
а для Dle 8.5-9.0 берём файл - js_edit.js
и в их конце добавляем функцию:
function externalLinks() { var d = document; if (!d.getElementsByTagName) return; var links = d.getElementsByTagName("a"); for (var i=0; i<links.length; i++) { var link = links[i]; if (link.getAttribute("href") && (link.getAttribute("rel") != null) && link.getAttribute("rel").indexOf("external") >= 0 ){ link.target = "_blank"; } }}window.onload = externalLinks;
и загружаем отредактированный файл js, согласившись с заменой, на сервер в папку: /engine/classes/js/
3. Открываем /engine/modules/rssinform.php
Ищем:
$tpl->set( '[link]', "<a href="" . htmlspecialchars ( $content['link']) . "" target="_blank">" );
Меняем на:
$tpl->set( '[link]', "<a href="" . htmlspecialchars ( $content['link']) . "" rel="external">" );
или для закрытия индексирования rss-информера меняем на:
$tpl->set( '[link]', "<a href="" . htmlspecialchars ( $content['link']) . "" rel="external nofollow">" );
ВСЁ!
Как заметно по коду логичным было закрытие от индексирования и ссылок добавляемых тегом leech вида: engine/go.php?url=, так как разработчик и так закрывал его в robots.txt
Хак начнёт работать в новых публикациях или отредактированных заново, но в версии дле 9.2 появилась новая утилита - Перестроение публикаций, с помощью её вам удастся применить этот хак во всех публикациях.
Да и теперь в шаблон или файлы вставляем закрытые от индексирования и открываемые в новом окне с атрибутом rel="external nofollow" вместо конструкции из двух: rel="nofollow" и target="_blank".
А к ссылке открывающейся в новом окне добавляем только атрибут rel="external" вместо target="_blank".
Примеры:
было - <a href="http://dle9.com/" target="_blank" rel="nofollow">Закрытая от индексирования ссылка откроется в новом окне</a>стало - <a href="http://dle9.com/" rel="external nofollow">Закрытая от индексирования ссылка откроется в новом окне</a>было - <a href="http://dle9.com/" target="_blank">Ссылка откроется в новом окне</a>стало - <a href="http://dle9.com/" rel="external">Ссылка откроется в новом окне</a>
И теперь по просьбе любителей закрывать все внешние ссылки в новостях от идексирования нелогичная конструкция(для того чтобы легче было вернутся и не запутаться в коде):
Меняем в первом пункте инсталла на:
else $target = "rel="external""; if( $url['leech'] ) { $url['html'] = $config['http_home_url'] . "engine/go.php?url=" . rawurlencode( base64_encode( $url['html'] ) ); return "<!--dle_leech_begin--><a href="" . $url['html'] . "" rel="external nofollow">" . $url['show'] . "</a><!--dle_leech_end-->" . $url['end']; } else { if ($this->safe_mode AND !$config['allow_search_link']) return "<a href="" . $url['html'] . "" rel="external nofollow">" . $url['show'] . "</a>" . $url['end']; else return "<a href="" . $url['html'] . "" rel="external nofollow">" . $url['show'] . "</a>" . $url['end'];
Хак Dle
install_at замена target на атрибут external«Автор:» Yeti (dlepro com)
Использован скрипт от Croaker-а
Советуем
скачать хак dle на
DataLife Engine 9.x install_at замена target на атрибут external
install_at.zip [8,12 Kb] (cкачиваний: 55)