jQuery-cкрипт “Добавить в закладки”

Данный скрипт – это усовершенствованная версия JS-скрипта “Добавить в закладки”, который я представил читателям более года назад.

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

jQuery-cкрипт “Добавить в закладки” можно прикрутить практически к любому сайту, а его установку я покажу на примере WordPress.

Особенности скрипта

  • В шаблон сайта вставляется всего одна строчка кода. Все остальное находится в подключаемом скрипте.

    Ребята, ну ради Бога, не используйте вы плагины и скрипты, которые в исходном коде выводят целые портянки html-кода. Яркий пример того, как делать не надо – блог Яна Такушевича. Я ужаснулся, когда заглянул в код страницы – даже на моем большом разрешении монитора 1920×1200 html-код закладочного плагина не вмещается в один экран! При этом размер текста поста как минимум раза в 2 меньше этого кода для закладок. И так для каждого поста. Теперь представьте, сколько лишнего “веса” это дает для каждой страницы сайта. Ян, задумайся об этом!

  • Никаких лишних внешних ссылок, а, соответственно, нет надобности в добавлении множества из несуществующего в HTML-стандарте тега <noindex>, придуманного Яндексом.
  • Небольшой вес скрипта (если не считать фреймворк jQuery). А учитывая, что скрипт кешируется браузером посетителя, как и сам фреймворк, разница в “весе” загружаемой страницы становится существенной по сравнению с html-вариантом, упомянутым чуть выше.
  • Ссылки разделены на 2 части: 1-я – закладочные сервисы, 2-я – социальные сервисы. Все это красиво оформлено в виде выпадающего списка. Если вы дружите с CSS и у вас есть желание оформить списки по-своему, то можете легко это сделать.
  • Несложная настройка скрипта.

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

Демо

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

Скачать

jQuery-cкрипт “Добавить в закладки”

Загрузок: 10654 | Размер: 22 Кб

Установка

Процесс установки скрипта показан на примере WordPress.

  1. Содержимое архива (за исключением файла index.html) скопируйте в папку с вашей темой. Место расположения всех файлов не принципиально, только учитывайте пути до них при подключении.
  2. Подключите эти файлы, добавив в файл header.php перед тегом </head> следующие 2 строки:
    <link href="<?php bloginfo('stylesheet_directory'); ?>/jqsocial.css" type="text/css" rel="stylesheet" />
    <script type="text/javascript" src="<?php bloginfo('stylesheet_directory'); ?>/jqsocial.js"></script>
    

    Если у вас есть какой-то файл со скриптами, то можно перенести в него содержимое файла jqsocial.js и соответствующую строчку не писать. Аналогично можно поступить со стилями – содержимое jqsocial.css перенести в файл style.css. Смысл этого – снизить количество запросов к серверу.

  3. Если в вашей теме не подключен фреймворк jQuery, то перед двумя строками из предыдущего пункта добавьте эту:
    <?php wp_enqueue_script('jquery'); ?>
    

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

    <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
    
  4. В файле jqsocial.js найдите строку:
    var folder = 's/';
    

    и в кавычках укажите путь до папки с иконками.

  5. Теперь в те файлы шаблона, которые выводят посты (например, index.php, archive.php, search.php, single.php) добавьте такую строчку:
    <script type="text/javascript">jqsocial(encodeURIComponent('<?php the_permalink() ?>'),encodeURIComponent('<?php the_title(); ?>'))</script>
    

    Для тех, кто будет использовать скрипт не на WordPress, поясняю, где должны подставляться URL и название статьи:

    <script type="text/javascript">jqsocial(encodeURIComponent('полная_ссылка_на_статью'),encodeURIComponent('название_статьи'))</script>
    
  6. Вот, собственно, и все. Наслаждаемся результатом.

Настройка сервисов

Если появилось желание изменить/дополнить/сократить список сервисов, то в файле jqsocial.js находим вот такой кусок кода для первого блока ссылок (закладочные сервисы):

var s=new Array(
	'100zakladok.ru','save/?bmurl='+u+'&bmtitle='+t,
	'delicious.com','post?url='+u+'&title='+t,
	'google.com','bookmarks/mark?op=edit&bkmk='+u+'&title='+t,
	'bobrdobr.ru','add.html?url='+u+'&title='+t,
	'links.i.ua','mark/?url='+u+'&ename='+t,
	'memori.ru','link/?sm=1&u_data[url]='+u+'&u_data[name]='+t,
	'moemesto.ru','post.php?url='+u+'&title='+t,
	'mister-wong.ru','add_url/?bm_url='+u+'&bm_description='+t,
	'linkstore.ru','servlet/LinkStore?a=add&url='+u+'&title='+t,
	'lopas.ru','add_story.php?story_url='+u,
	'myscoop.ru','add/?title='+t+'&URL='+u,
	'ruspace.ru','index.php?link=bookmark&action=bookmarkNew&bm=1&url='+u+'&title='+t,
	'vaau.ru','submit/?action=step2&url='+u
);

и такой кусок кода для второго блока ссылок (социальные сервисы):

var s2=new Array(
	'badabadu.com','?url='+u+'&posttitle='+t,
	'chipp.ru','submit.php?url='+u,
	'feedblog.ru','submit.php?url='+u,
	'korica.info','add_story.php?story_url='+u+'&story_title='+t,
	'monrate.ru','submit.php?url='+u,
	'news2.ru','add_story.php?url='+u,
	'newsland.ru','News/Add/type/news/',
	'sloger.net','submit.php?url='+u
);

Покажу на примере delicious.com, как добавляется сервис. delicious.com дает нам вот такой код для добавления закладки:

<img src="http://static.delicious.com/img/delicious.small.gif" height="10" width="10" alt="Delicious" />
<a href="http://delicious.com/save" onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent(location.href)+'&amp;title='+encodeURIComponent(document.title), 'delicious','toolbar=no,width=550,height=550'); return false;"> Bookmark this on Delicious</a>

Из него мы вычленяем следующую ссылку:

http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent(location.href)+'&amp;title='+encodeURIComponent(document.title)

Теперь делаем 2 замены: encodeURIComponent(location.href) меняем на u, а encodeURIComponent(document.title) меняем на t. В результате получаем следующую строку, которую нужно вставить в скрипт:

'delicious.com','save?v=5&amp;noui&amp;jump=close&amp;url='+u+'&amp;title='+t,

И таким образом по аналогии можно добавлять новые сервисы.

Заметьте, что после последнего сервиса в списке (который перед закрывающейся скобкой), запятая стоять не должна. Также при добавлении новых сервисов обратите внимание, что файл иконки сервиса должен быть с расширением .ico, а название файла состоять из имени домена.

Если у вас возникнут трудности с конвертированием ссылок сервисов, то обратитесь в комментариях, я помогу.

Обновления

  • 04.06.09 – доработан файл стилей (jqsocial.css) с целью избежать некоторых багов в отображении панельки с ссылками в связи с особенностями верстки на сайтах.

Комментарии (135)

  1. Вячеслав
    23 апреля 2010 г. в 20:19

    Подскажите, как правильно прописывать путь к папке с рисунками. Перепробывал всё, что только можно, не получается. Саму папку залил в корень шаблона. Буду очень признателен за помощь. Спасибо.

    1. 24 апреля 2010 г. в 10:16 / ответ на коммент Вячеслав

      Укажите абсолютный путь, и проблемы не должно возникнуть.

  2. OG5A
    24 апреля 2010 г. в 17:49

    Видно мне “везёт”. Я посмотрел, что другим достаточно было прописать относительный путь и всё заработало. Я указывал и абсолютный путь и всё, что только можно – не работает. Что же ещё придумать?

  3. Error2003
    3 мая 2010 г. в 10:46

    Добрый день уважаемый Dimox!
    Вот всё таки сверстал свой шаблон, хотелось бы услышать Ваши коментарии как професионального верстальщика (в отличии от меня).
    И вот вопрос у меня подключены скрипты jquery в теге если можете посмотрите и дайте совет как бы лучше оптимизировать. Буду благодарен Вам за помощь!
    http://error2003.org.ua/

    1. Единственное, что могу сказать – jQuery у вас подключается аж 3 раза. Спрашивается: “Зачем?”.

      1. Error2003
        3 мая 2010 г. в 13:56 / ответ на коммент Dimox

        Установлены пару jquery фичей которые должны подключаться внутри тега …Если можеет посоветовать как лучше сделать то огромнейшее Вам спасибо!

      2. Error2003
        3 мая 2010 г. в 14:07 / ответ на коммент Dimox

        Вообщем у меня стоит скрипт который по сути должен вписываться внутрь тега …если можете посоветовать как сделать так как должно быть то спасибо!

      3. Error2003
        3 мая 2010 г. в 14:25 / ответ на коммент Dimox

        Ну знаете просто эти jquery скрипты по сути должны вписываться в внутрь
        Может я неправ, раскажите как лучше сделать.
        Спасибо.

  4. Never_OFF
    19 июня 2010 г. в 23:29

    Я так и не увидел нигде рабочего примера. Скажите, пожалуйста, где глянуть?
    И ещё один вопрос. Это только для вордпресса?

    1. 20 июня 2010 г. в 08:55 / ответ на коммент Never_OFF

      Я так и не увидел нигде рабочего примера. Скажите, пожалуйста, где глянуть?

      Значит плохо смотрели. В статье все написано.

      И ещё один вопрос. Это только для вордпресса?

      Нет, можно на любой сайт прицепить.

  5. Lina
    20 июня 2010 г. в 04:33

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

    1. 20 июня 2010 г. в 08:58 / ответ на коммент Lina

      Что за ужасные полосы?

      1. Lina
        20 июня 2010 г. в 19:11 / ответ на коммент Dimox

        Фу, разобралась…
        В таблице стилей у меня было написано:
        overflow: scroll;
        что и выдавало полоски со стрелочками сбоку и снизу.

        Убрала “overflow” и всё стало как надо.

  6. 25 июня 2010 г. в 11:12

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

    1. 25 июня 2010 г. в 12:26 / ответ на коммент Andrey K.

      Это не плагин, просто jQuery-скрипт.

      1. 28 июня 2010 г. в 16:39 / ответ на коммент Dimox

        Собственный? Или сторонний?
        Просто очень уж он красиво выглядит, хочется и себе такой же)))

        1. 28 июня 2010 г. в 17:26 / ответ на коммент Andrey K.

          Сам делал. Возможно, что напишу статью.

          1. 29 июня 2010 г. в 14:25 / ответ на коммент Dimox

            Было бы очень замечательно =))
            А можно код глянуть? Подскажешь, где в странице его искать?

            1. 29 июня 2010 г. в 15:21 / ответ на коммент Andrey K.

              В самом конце файла dimox.name/wp-content/themes/dimox.name/scripts.js фукнция socializ(), а к странице подключается так:

              <script type="text/javascript">socializ(encodeURIComponent('http://dimox.name/social-bookmark-jquery-script/'),encodeURIComponent('jQuery-cкрипт &#8220;Добавить в закладки&#8221;'))</script>
              1. 30 июня 2010 г. в 06:38 / ответ на коммент Dimox

                Спасибо огромное!!! =)))

  7. serg
    26 июня 2010 г. в 23:04

    не смог поставить на dle – просто не отображается. у кого-нибудь это получилось ? помогите разобраться, плиз

  8. serg
    29 июня 2010 г. в 03:23

    Dimox, может есть дополнительные рекомендации для установки на DLE ?
    Сейчас надпись “Добавить в закладки” стала отображаться, но список не раскрывается, хотя место на странице занимает размером с него

    1. 29 июня 2010 г. в 06:26 / ответ на коммент serg

      От движка вообще ничего не зависит. Тут главное – в верстке разбираться.

  9. Servest
    2 июля 2010 г. в 13:11

    Мда, у меня не все так здорово: В ИЕ7 при подведении мышки выпадает список нормально, но иконки не отображаются. В конце страницы половину иконок обрезает. В стилях копаться я не очень умею…

    1. 5 июля 2010 г. в 02:56 / ответ на коммент Servest

      Почти все решил. Поменял стили. Для IE7 поменял расширения .ico на .png. Уменьшился размер картинок в 3-5 раз. НО в результате такой замены у сервисов badabadu.com и delicious.com картинки не отображаются во всех браузерах. Прямо мистика какая-то… Помогите решить эту головоломку. Сам я вряд ли решу. Посмотреть это чудо можно например здесь: http://service-est.ru/open-business-itself

      1. 5 июля 2010 г. в 06:36 / ответ на коммент Servest

        Эти картинки не отображаются потому, что при обращении к ним напрямую через адресную строку выводится страница 404:

        service-est.ru/wp-content/themes/NewsService_est_ru/social/delicious.com.png
        service-est.ru/wp-content/themes/NewsService_est_ru/social/badabadu.com.png

        Значит таких файлов нет, либо что-то еще.

        1. 5 июля 2010 г. в 07:12 / ответ на коммент Dimox

          Спасибо))) Проблема лежала на поверхности: куда-то делся домен .com из названия иконок. Сам я этого сразу не заметил. Наконец-то, хоть один нормальный “летающий” скрипт закладок заработал у меня как надо. Ставил “one button”. Не путать с “одной кнопкой”. Но он не хочет дружить со стилями моей темы. Устал их править.
          Спасибо за скрипт :)

  10. 8 июля 2010 г. в 14:20

    Спасибо за скрипт) Для себя добавил в массивы 3 колонку, с названием, чтобы можно было отображать не только доменом, т.к. например в гугле есть кроме /bookmarks/ ещё и /reader/

  11. tima2010
    28 июля 2010 г. в 10:35

    Првиет, спасибо полезно, пригодится, один вопрос.
    Как можно реализовать все то же самое только без эффектов и горизонтально к примеру под каждой статье в шаблоне single.php… Чтобы скрипт был статическим :)
    просто картинки и просто a href
    не смог понять как передавать данные для каждой соц сети

  12. 28 июля 2010 г. в 10:44

    Как можно реализовать все то же самое только без эффектов и горизонтально к примеру под каждой статье в шаблоне single.php

    Найти другой скрипт или плагин, который выводит в таком формате.

  13. werty1001
    8 августа 2010 г. в 10:26

    'vkontakte.ru','share.php?url='+u+',
    'facebook.com','sharer.php?u='+u+',
    'google.com','reader/link?url='+u+'&title='+t,
    'connect.mail.ru','share?share_url='+u+',
    'livejournal.com','update.bml?event='+u+'&subject='+t,

    добавил в js код сверху “Добавить в закладки” со страниц вообще исчезло, вроде без ошибок в чем может быть проблема

    1. 10 августа 2010 г. в 15:54 / ответ на коммент werty1001

      Ошибки в синтаксисе есть.

      В конце 3-х из вышеуказанных строк вместо этого:

      '+u+',

      должно быть так:

      '+u,

  14. Дмитрий
    10 октября 2010 г. в 18:58

    Добрый день! понравился данный скрипт!

    Я использую самописный сайт на PHP, title я прописываю сам отдельно для каждой страницы….как мне сделать чтобы через переменную $title и $link

    пример:
    (social(encodeURIComponent(‘$link’),encodeURIComponent(‘$title’))) скрипт подставлял бы эти значения.

    как мне это осуществить? я то самому прописываать адреса и названия будет очень долго.

    $title и $link поподробней как и где это самое главное сделать

    1. 10 октября 2010 г. в 22:39 / ответ на коммент Дмитрий

      Используйте такой код:

      <script type="text/javascript">jqsocial(encodeURIComponent('<?php echo $link; ?>'),encodeURIComponent('<?php echo $title; ?>'))</script>
      1. Дмитрий
        11 октября 2010 г. в 02:13 / ответ на коммент Dimox

        а что нужно в коде изменить? чтобы это заработало?

        название раздела

        и адресс ссылки? где переменные прописать и как:)

        спасибо!

        1. 11 октября 2010 г. в 14:13 / ответ на коммент Дмитрий

          Без понятия. Я же не могу знать, как ваш движок работает.

  15. Дмитрий
    11 октября 2010 г. в 02:16

    <title>название раздела</title>

  16. Дмитрий
    11 октября 2010 г. в 15:32

    это не движок! обычные php файлы

  17. Дмитрий
    13 октября 2010 г. в 09:12

    без вариантов?

    1. 13 октября 2010 г. в 09:19 / ответ на коммент Дмитрий

      Не могу ничем помочь.

  18. Дмитрий
    13 октября 2010 г. в 09:42

    вот же решение

    <script type="text/javascript">socializ(encodeURIComponent(location.href),encodeURIComponent(document.title))</script>

  19. 30 ноября 2010 г. в 20:27

    У меня скрипт, увы, не работает. В смысле даже не выпадает окно со списком сервисов в принципе. Хотя подключила все так, как здесь описано в точности. И строку про jquery тоже.

  20. 30 ноября 2010 г. в 20:30

    Извините, все уже исправилось! Почему-то у меня jQuery подключился только через гугль… а как обычно в WP не сработал.

Ваш комментарий

Жирный текст

Ссылка

Цитата

Внутристрочный код

CSS-код

HTML-код

JavaScript-код

PHP-код