JQuery: Открыть ссылку в новом окне

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

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

Чтобы браузер самостоятельно открывал ссылки в новом окне, необходимо использовать специальный атрибут target="_blank". Как быть, если по какой-либо причине, ранее вы не использовали данный атрибут. В данной ситуации будет полезен небольшой JavaScript, который навсегда избавит вас от данной проблемы.

В шаблоне вашего сайта, перед закрытием тега </body> необходимо добавить код из примера ниже. Теперь, вне зависимости от наличия атрибута target="_blank", скрипт автоматически будет открывать исходящие ссылки в новой вкладке браузера. При этом, навигация по внутренним ссылкам сайта останется без изменений.

<script type= "text/javascript">
$('a').each(function() {
    var a = new RegExp('/' + window.location.host + '/');
    if(!a.test(this.href)) {
         $(this).click(function(event) {
         event.preventDefault();
         event.stopPropagation();
         window.open(this.href, '_blank');
         });
    }
})
</script>;

Скачать пакет из репозитория Debian

Дата: 05.10.2015Метки:

Как правило, программы и обновления в Linux устанавливаются преимущественно из репозиториев. До тех пор, пока не закончиться срок поддержки дистрибутива, версии пакеты в репозитории постоянно находятся в движении.

Мейнтейнеры регулярно следят за выпуском обновлений и поддерживают репозиторий в актуальном состоянии. После добавления новой версии пакета, старые сразу удаляются. Связи с чем, может возникнуть необходимость сохранить необходимую версию пакета, для того что бы использовать ее в будущем.

Как вариант, можно просто скачать deb-пакет из репозитория Debian без его последующей установки. Для этого у пакетного менеджера apt-get в Debian есть специальная опция download, которая позволяет скачать пакет в текущую директорию. Для того чтобы скачать пакет из репозитория Debian необходимо выполнить команду ниже:

cd /tmp
apt-get download package-name

Если пакет уже был ранее установлен в системе, можно скопировать deb-файл из каталога:

cd /var/cache/apt/archives/

Закрыть ссылку от индексации

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

Бытует мнение, что если закрыть ссылку от индексации, то это никак не повлияет на вашу страницу, которая как и прежде будет терять свой вес в глазах поисковой системы. При этом, вес по nofollow ссылке не передается другому сайту, а просто бесполезно пропадает. На основе данного предположения, многие рекомендуют вообще не использовать атрибут nofollow для закрытия ссылок от индексации.

В данной статье я хочу рассказать вам о альтернативном методе, как закрыть внешние ссылки от индексации на WordPress сайте без использования дополнительный плагинов. Ссылка, которую мы хотим закрыть, будет выглядеть в глазах поисковых систем как обычный фрагмент текста, но при этом как и при использовании тэга <a> перенаправлять посетителей на другие сайты.

Для того чтобы закрыть ссылку от индексирования, мы будем записывать ее в виде текста размещенного внутри HTML-тега <span>. Самостоятельно <span> не имеет логического значения и выполняет функцию тэга-контейнера, который используют для форматирования или назначения уникального идентификатора выделенному фрагменту текста.

Чтобы сделать закрытую ссылку в браузере посетителя активной и ничем не отличающейся от других ссылок, мы будем использовать внутри HTML-документа специальный JavaScript код. Дополнительно назначим для тэга <span> стили оформления, которые уже используют ссылки на нашем сайте.

Закрыть ссылку от индексации в WordPress

Переходим от теории к практике. Для того что бы закрыть ссылки от индексирования скриптом, нам предварительно необходимо внести соответствующие изменения в шаблон WordPress сайта.

Открываем панель управления WordPress и переходим в меню «Внешний вид» — «Редактор». Необходимо добавить в файл footer.php перед закрытием тега </body> следующий скрипт:

<script type= "text/javascript">function GoTo(link){window.open(link.replace("url:","http://"));}</script>

Для тега <span> необходимо указать стили таким образом, чтобы формат текста своим внешним видом ничем не отличался от обычной ссылки на нашем сайте. Открываем файл style.css, копируем код из примера ниже и устанавливаем значение селекторов CSS под внешний стиль ссылок.

.spanurl {
  color: #333;
  border-bottom: 1px solid #333;
  cursor:pointer;
}
.spanurl:hover {
  color: #707070;
  border-bottom: none;
}

Теперь, чтобы закрыть ссылку от индексации, вместо обычной ссылки <a href="url"></a> необходимо использовать следующий код:

<span class="spanurl" onclick="GoTo('url:example.com/')">Example Domain</span>

Каждый раз копировать данный код не очень удобно, чтобы легко закрыть ссылку от индексации я предлагаю использовать специально предназначенный для этого шорткод. Для этого необходимо добавить в файл functions.php код из примера ниже:

function shortcode_spanurl($content) {
 
    $pattern = '/[spanurl](.*?)<a (.*?)href=["']([a-zA-Z]+://)?(.*?)["'](.*?)>(.*?)</a>(.*?)[/spanurl]/i';
    $spanurl = preg_replace($pattern, "$1<span class='spanurl' onclick="GoTo('url:$4')">$6</span>$7", $content);
 
return $spanurl;
}
add_filter('the_content', 'shortcode_spanurl');

Создать tar.gz

Дата: 03.10.2015Метки:

Наиболее часто в процессе работы в Linux пользователи сталкиваются с форматом архива tar.gz, который является своего рода стандартом для Linux систем. Расширение имени файла состоит из двух частей не случайно.

Это связано с тем, что самостоятельно утилита tar не умеет сжимать файлы, а лишь выполняет функцию объединения нескольких файлов внутри одного архива. В соответствии с традициями UNIX, такие архиваторы как gzip или bzip2 умеют работать одновременно только с одним файлом. Связи с чем, работая в связке эти программы дополняют друг друга.

В содержимое tar архива записываются файлы и такая информация как: структура директорий, права доступа и временные метки файлов. После чего данные сжимается архиватором. В итоге мы получаем архив с tar.gz расширением имени файла.

Синтаксис команды tar и описание значения ключей:

tar [-ключи] [название архива] [путь к файлам]

: создать файл архива;
-x: извлечь файлы;
-z: тип архива .gzip;
-j: тип архива .bz2;
-v: отображать информацию о процессе выполнения;
-f: записать архив в файл.

Создать tar.gz

Чтобы создать tar.gz архив необходимо выполнить команду tar с указанными ниже ключами:

tar -czvf files.tar.gz /files
# Для нескольких файлов
tar -czvf files.tar.gz file1 file2 dir1 dir2

Чтобы распаковать tar.gz файл используем команду:

tar -xzvf files.tar.gz

Создать .tar.bz2

В отличие от предыдущего метода, данный алгоритм сжатия более эффективен, но уступает производительность GZIP. Чтобы создать tar.bz2 архив необходимо выполнить команду:

tar -cjvf file.tar.bz2 /files
# Для нескольких файлов
tar -cjvf  file1 file2 dir1 dir2

Чтобы распаковать tar.bz2 файл используем команду:

tar -xjvf files.tar.gz

Используем Lazy Load для загрузки Disqus

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

Скорость загрузки страницы можно легко увеличить с помощью Lazy Load. Технология Lazy Load представляет собой JavaScript-функцию для отложенной загрузки содержимого сайта. Таким образом, элементы страницы, которые не попадают в поле зрения пользователя, не будут загружаться до тех пор, пока пользователь не прокрутит страницу вниз.

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

Используем Lazy Load для загрузки Disqus

На данный момент существует множество готовых Lazy Load скриптов для разных популярных фреймворков. Чтобы избежать подключения дополнительных JavaScript-библиотек, для загрузки комментариев Disqus с помощью функции Lazy Load, я буду использовать библиотеку jQuery.

Если вы ранее не использовали jQuery, необходимо подключить библиотеку в шаблоне вашего сайта:

<script type='text/javascript' src='//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js?ver=1.11.1'></script>

Для WordPress будет правильнее выполнить подключение скрипта через файл шаблона functions.php, для этого необходимо добавить в содержимое файла следующую функцию:

function wpdocs_dequeue_script() {
    wp_deregister_script('jquery');
    wp_register_script('jquery', ("//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"), false, '1.11.3');
    wp_enqueue_script('jquery');
}
add_action( 'wp_print_scripts', 'wpdocs_dequeue_script', 100 );

Непосредственно сам скрипт, отвечающий за загрузку комментариев Disqus при при скроллинге страницы браузера:

<script type="text/javascript">
var disqus_identifier = window.location.url;
var ds_loaded = false;

function loadDisqus()
{
    var disqus_div = $("#disqus_thread");
    var top = disqus_div.offset().top;
    var disqus_data = disqus_div.data();
    if ( !ds_loaded && $(window).scrollTop() + $(window).height() > top ) 
    {
        ds_loaded = true;
        for (var key in disqus_data) 
        {
            if (key.substr(0,6) == 'disqus') 
            {
                window['disqus_' + key.replace('disqus','').toLowerCase()] = disqus_data[key];
            }
        }
        var dsq = document.createElement('script');
        dsq.type = 'text/javascript';
        dsq.async = true;
        dsq.src = 'http://' + window.disqus_shortname + '.disqus.com/embed.js';
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    }  
}

$(function () 
{
    var disqus_div = $("#disqus_thread");
    if (disqus_div.size() > 0) 
    {
        $(window).scroll(loadDisqus);      
    }  
}
);
</script>

Скрипт лучше вынести в отдельный файл, а затем подключить его в functions.php:

function disqus_lazyload_script() {
    wp_enqueue_script('disqus', get_stylesheet_directory_uri() . '/disqusLazyLoad.js', array('jquery'), false, true); 
}
add_action( 'wp_enqueue_scripts', 'disqus_lazyload_script', 30 );

В месте отображения блока комментариев Disqus необходимо добавить строку ниже, в которой необходимо заменить значение параметра data-disqus-shortname на ваш идентификатор.

<div id="disqus_thread" data-disqus-shortname="DISQUS_SHORTNAME"></div>

Загрузка jQuery с Google CDN

Многие шаблоны, плагины и компоненты сайта используют для своей работы библиотеку скриптов jQuery. По умолчанию в WordPress скрипты загружаются из папки wp-includes. Первоначальный размер библиотеки jQuery составляет порядка 300KB, после минимизации его можно уменьшить до 90KB. Дополнительно количество передаваемых данных можно снизить за счет использования сжатия GZIP.

На первый взгляд, количество переданных данных при загрузке jQuery очень мало чтобы существенно повлиять на работу сервера. Но данное утверждение справедливо только отчасти.

Ситуация кардинально меняется если посетители запросят миллион страниц с пустым кэшем браузера, в этом случае используя CDN вы экономите до 76GB трафика. А при использовании популярного Google CDN, есть большая вероятность, что необходимая библиотека jQuery уже лежит внутри кэша браузера. В добавок, если сравнить скорости загрузки с CDN и обычного хостинга, то разница во времени может отличаться в несколько раз в пользу CDN.

Таким образом, используя CDN для загрузки jQuery, мы без труда убираем один лишний запрос к серверу и немного уменьшаем время загрузки страниц сайта. Так зачем игнорировать такую возможность?

Вместо того чтобы использовать платные CDN-сервисы, мы можем свободно загружать jQuery с серверов крупных компаний. Для jQuery есть несколько популярных общедоступных CDN:

  • jQuery CDN
  • Google CDN
  • Microsoft CDN
  • CDNJS CDN
  • Яндекс CDN

Подробней о использовании указанных CDN-сервисов вы можете прочитать на официальном сайте jQuery. Что касается меня, для своих нужд я предпочитаю использовать Google CDN — наиболее популярный среди всех бесплатных CDN-сервисов, 89% от загрузок которого приходится на библиотеку jQuery. Поэтому, далее речь пойдет о использовании именного этого сервиса.

Особенности использования Google CDN

При использовании Google CDN, вы можете прямо указать версию (1.11.1) загружаемой библиотеки или с помощью модификации фрагмента ссылки, указать необходимые параметры для загрузки jQuery.

Пример подключения jQuery с использованием точной версии библиотеки:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

Для загрузки последней актуальной версии jQuery используем код:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

Следует отметить, что время жизни файла в кэше браузера, напрямую зависит от ссылки, которую мы будем использовать для подключения библиотеки. При использовании ссылки содержащей точную версию библиотеки, время хранение файла в кэше будет ограничено сроком равным одному году max-age=31536000. Если вы используете ссылку для последней актуальной версии jQuery, файл будет храниться в кэше в течении часа max-age=3600.

Используем Google CDN для загрузки jQuery в WordPress

Для загрузки jQuery с Google CDN на сайте использующем WordPress, для начала необходимо выяснить необходимую версию библиотеки. Для этого достаточно заглянуть в содержимое HTML-документа вашего сайта. Для правильного подключения jQuery в WordPress необходимо добавить код функции ниже в содержимое файла functions.php вашей темы:

function wpdocs_dequeue_script() {
    wp_deregister_script('jquery');
    wp_register_script('jquery', ("//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"), false, '1.11.1');
    wp_enqueue_script('jquery');
}
add_action( 'wp_print_scripts', 'wpdocs_dequeue_script', 100 );

Данная функция удалит из очереди на подключение библиотеку из каталога wp-includes и заменяет ее на jQuery с сайта Google CDN.

Убрать версию CSS/JS файлов в WordPress

По умолчанию, WordPress добавляет параметр ?ver=[версия] в конец адреса всех подключаемых CSS и JavaScript файлов. Использование версионности, добавляет удобный механизм для контроля состояния кэша браузера посетителей. После изменения файлов, для того чтобы браузер автоматически загрузил актуальные версии CSS или JavaScript, веб-мастеру достаточно просто изменить числовой индекс ver для подключенного файла.

Несмотря на очевидные преимущества, у данного метода есть и свои недостатки. Одна из основных причин по которой разработчики отказываются от использования версий — не все прокси-серверы и CDN поддерживают кэширование файлов, в конце адреса которых указан параметр ver.

Для того чтобы удалить ver из строки подключения, необходимо добавить следующий код в содержимое файла functions.php вашей темы:

function vc_remove_wp_ver_css_js( $src ) {
    if ( strpos( $src, 'ver=' ) )
        $src = remove_query_arg( 'ver', $src );
    return $src;
}
add_filter( 'style_loader_src', 'vc_remove_wp_ver_css_js', 9999 );
add_filter( 'script_loader_src', 'vc_remove_wp_ver_css_js', 9999 );

Отключить Emoji в WordPress

Начиная с выпуска WordPress 4.2 разработчики отказались от стандартных смайлов и перешли на известный набор Emoji — язык идеограмм и смайликов, используемый в электронных сообщениях и веб-страницах.

О популярности этих иконок можно судить хотя бы по тому, что даже поисковый гигант Google некоторое время отображал Emoji в десктопной выдаче. После того как сайты стали использовать Emoji для привлечения SEO-трафика, от этой идеи вскоре отказались.

Что касается WordPress, то поддержка Emoji в нем реализована на уровне ядра. Для работы данной функции WordPress использует внешнюю библиотеку Twemoji от Twitter, а иконки загружаются с сайта WordPress.org. Изначально настроек для отключения Emoji в WordPress не предусмотрено.

Не знаю, что побудило разработчиков добавить данную функцию по умолчанию, но я надеюсь, что в ближайшем будущем это недоразумение выпилят из WordPress. А пока, для того что бы отключить Emoji необходимо добавить в файл functions.php следующую функцию:

function disable_emojis() {
	remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
	remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
	remove_action( 'wp_print_styles', 'print_emoji_styles' );
	remove_action( 'admin_print_styles', 'print_emoji_styles' );	
	remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
	remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );	
	remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
	add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
}
add_action( 'init', 'disable_emojis' );
function disable_emojis_tinymce( $plugins ) {
	if ( is_array( $plugins ) ) {
		return array_diff( $plugins, array( 'wpemoji' ) );
	} else {
		return array();
	}
}

Как вариант, можно отключить Emoji в WordPress при помощи специально плагина Disable Emojis.

Распаковка архивов в Linux

Дата: 28.09.2015Метки:

В процессе работы в Linux часто сталкивавшийся с необходимости распаковки различного рода архивов. До того момента, пока не запомнишь на память формат команды, приходится каждый раз искать в поисковике параметры распаковки того, или иного архива. Для того чтобы немного облегчит себе жизнь, можно использовать специальный скрипт для распаковки архивов в Linux.

Скрипт содержит команды для распаковки большинства популярных форматов архивов, для его работы важно чтобы требуемый архиватор был установлен в системе. Для работы скрипта в Debian/Ubuntu, необходимо добавить функцию unpack в содержимое системного файла /etc/bash.bashrc конфигурации bash.

nano /etc/bash.bashrc

Скрипт для распаковки архивов в Linux:

function unpack {
if [ -z "$1" ]; then
    echo "Usage: extract "
 else
    if [ -f "$1" ] ; then
        NAME=${1%.*}
        case "$1" in
          *.tar.bz2)   tar xvjf ./"$1"    ;;
          *.tar.gz)    tar xvzf ./"$1"    ;;
          *.tar.xz)    tar xvJf ./"$1"    ;;
          *.lzma)      unlzma ./"$1"      ;;
          *.bz2)       bunzip2 ./"$1"     ;;
          *.rar)       unrar x -ad ./"$1" ;;
          *.gz)        gunzip ./"$1"      ;;
          *.tar)       tar xvf ./"$1"     ;;
          *.tbz2)      tar xvjf ./"$1"    ;;
          *.tgz)       tar xvzf ./"$1"    ;;
          *.zip)       unzip ./"$1"       ;;
          *.Z)         uncompress ./"$1"  ;;
          *.7z)        7z x ./"$1"        ;;
          *.xz)        unxz ./"$1"        ;;
          *.exe)       cabextract ./"$1"  ;;
          *)           
        esac
    else
        echo "'$1' - file does not exist"
    fi
fi
}

Применяем изменения командой:

source /etc/bash.bashrc ~/bashrc

Вне зависимости от формата запакованного файла, теперь для распаковки архивов в Linux достаточно использовать всего одну команду unpack:

$ extract file.gz
$ extract file.tar.gz
$ extract file.tar.bz2

Grep: исключить строки

Дата: 27.09.2015Метки:

Часто внутри конфигурационных файлов я оставляю для себя небольшие заметки в виде комментариев. Это позволяет быстро вспомнить важные моменты и значительно помогает в процессе настройки. Со временем количество комментариев может настолько много, что они напротив затрудняют чтение файла. Кроме того, бывают ситуации когда необходимо исключить из файлов комментарии, которые не должны увидеть посторонние.

Чтобы избавить себя от рутины, я предпочитаю через команду grep исключить из файла сразу все имеющиеся в нем комментарии. Чтобы с помощью grep исключить только строки по заданному условию, необходимо выполнить команду с опцией -v в качестве параметра.

Команда ниже выведет на экран из содержимого файла example.conf только активные настройки, удалив при этом все имеющиеся в нем комментарии и пустые строки.

grep -v '^#|^$' example.conf

В результате выполнения команды, будут исключены строки начинающиеся с символа решетки ^#, а фильтр ^$ удалит из файла пустые строки.

Для удобства можно перенаправить вывод в текстовый файл:

grep -v '^#|^$' example.conf > new.conf

Чтобы с помощью grep исключить комментарии из множества файлов, можно воспользоваться скриптом ниже:

#!/bin/sh
files="/home/me/data/*.txt"
for i in $files
do
  grep -v '^#|^$' $i > $i.out
  mv  $i.out $i
done