В этой статье обсуждается проблема создания ссылок внутри поста написанного в блоггере. Проблема невозможности создавать внутренние ссылки и ссылки с относительными путями в редакторе Blogger-а. Эта проблема затрудняет делает невозможным создание содержания статей, ссылок-сносок на различные части документа и т.п., в постах публикуемых на blogspot.com! Как частичное решение этой проблемы, я предлагаю воспользоваться скриптом, позволяющим создавать содержание статьи автоматически (с правильными ссылки на части документа). При желании вы можете модифицировать его и под другие, подобные нужны, например создание блока ссылок-сносок и т.п. ...
Преамбула
Недавно писал очень длинный пост, который представлял собой очередной "How-to" по программированию. Статья поста была разбита на 7-мь частей, в каждой из которой обсуждались отдельные аспекты программирования. Я решил сразу, в начале поста, перечислить эти части, чтоб читатель знал, какие темы в ней будут затронуты. Я так и сделал - добавил содержание в котором перечислил название частей статьи.
Когда статья была закончена и я ее перечитывал перед публикацией, мне в голову прошла вполне логичная идея - сделать названия статей в содержании ссылками к началу каждой части. Не долго думая, я открыл редактор блоггера в режиме отображения HTML кода. Добавил перед началом каждой части статьи закладки - <a name="part1"></a>, <a name="part2"></a> и т.д., для каждой части. А текст пунктов содержания сделал ссылками - <a href="#part1>Часть 1</a>, <a href="#part2>Часть 2</a> и т.д.
Потом я переключился опять в визуальный режим редактирования поста, сделал несколько исправлений, сохранил изменения и нажал просмотр... и тут меня ждал неприятный сюрприз - блоггер изгадил! мои ссылки!!! По добавлял к ним урлы, превратив их во внешние и полностью не рабочие ссылки (ведущие хрен знает куда!). Расставленные закладки тоже изменились - блоггер добавил к ним href="http://bla-bla-bla/"!
Проблему с закладками можно было решить добавив к тегу, в котором заключен текст названия части, атрибут id="part1" в место тега <a name="...">, но что делать с ссылками на эти закладки!? Блоггер вообще не понимает ссылки с относительными путями к которым относятся ссылки на части документа. Я писал так: <a href="#part1> и так <a href="/#part1> и даже так <a href=".#part1>, но результат был один и тот же - блоггер постоянно подставлял в ссылку http://www.blogger.com/.... :(
Для приличия я погуглил минут десять, но так и не нашел решения ...
Не желая тратить время на поиск, я решил сам написать скрипт который создавал бы содержание (оглавление - как вам угодно) статьи автоматически. Минут 20-ть и решение готово!
Вкратце, как это работает:
Скрипт ищет (сверху-вниз) в html-коде статьи текст заключенный в определенный тег, например h2, и создает из найденного список содержания.
Для того, чтоб отобразить созданное содержание в посте, добавляем, туда где оно должно появится тег (span, div, ...) с атрибут id и значением "jqblg_contents".
Пример работы скрипта прямо пред вами:
Содержание статьи
h2
Когда статья была закончена и я ее перечитывал перед публикацией, мне в голову прошла вполне логичная идея - сделать названия статей в содержании ссылками к началу каждой части. Не долго думая, я открыл редактор блоггера в режиме отображения HTML кода. Добавил перед началом каждой части статьи закладки - <a name="part1"></a>, <a name="part2"></a> и т.д., для каждой части. А текст пунктов содержания сделал ссылками - <a href="#part1>Часть 1</a>, <a href="#part2>Часть 2</a> и т.д.
Потом я переключился опять в визуальный режим редактирования поста, сделал несколько исправлений, сохранил изменения и нажал просмотр... и тут меня ждал неприятный сюрприз - блоггер изгадил! мои ссылки!!! По добавлял к ним урлы, превратив их во внешние и полностью не рабочие ссылки (ведущие хрен знает куда!). Расставленные закладки тоже изменились - блоггер добавил к ним href="http://bla-bla-bla/"!
Проблему с закладками можно было решить добавив к тегу, в котором заключен текст названия части, атрибут id="part1" в место тега <a name="...">, но что делать с ссылками на эти закладки!? Блоггер вообще не понимает ссылки с относительными путями к которым относятся ссылки на части документа. Я писал так: <a href="#part1> и так <a href="/#part1> и даже так <a href=".#part1>, но результат был один и тот же - блоггер постоянно подставлял в ссылку http://www.blogger.com/.... :(
Для приличия я погуглил минут десять, но так и не нашел решения ...
Не желая тратить время на поиск, я решил сам написать скрипт который создавал бы содержание (оглавление - как вам угодно) статьи автоматически. Минут 20-ть и решение готово!
Вкратце, как это работает:
Скрипт ищет (сверху-вниз) в html-коде статьи текст заключенный в определенный тег, например h2, и создает из найденного список содержания.
Для того, чтоб отобразить созданное содержание в посте, добавляем, туда где оно должно появится тег (span, div, ...) с атрибут id и значением "jqblg_contents".
Пример работы скрипта прямо пред вами:
Содержание статьи
h2
Решение
Теперь о том как добавить этот скрипт в blogger и как с ним работать.
Добавление скрипта.
Зайдите в панель управления блогом на blogger-е и перейдите в раздел "Дизайн".
Кликните "Добавить гаджет" в самой нижней части шаблона:
В открывшемся окне найдите гаджет "HTML/JavaScript" и выберите его:
Вам откроется окно редактирования гаджета.
Добавьте код скрипта* в поле "Содержание", а поле "Название" оставьте пустым. Сохраните изменения:
код скрипта*
Как работать со скриптом.
Открываем пост в редакторе blogger и пишем статью.
Наверняка, по ходу написания, вы будете выделять названия частей и скорее всего это будет заголовок или подзалоговок. Предположим, что вы использовали заголовок, тогда у вас поучится что-то вроде:
---------------------------------------------------
Какая-то наша статья....
Добавление скрипта.
Зайдите в панель управления блогом на blogger-е и перейдите в раздел "Дизайн".
Кликните "Добавить гаджет" в самой нижней части шаблона:
В открывшемся окне найдите гаджет "HTML/JavaScript" и выберите его:
Вам откроется окно редактирования гаджета.
Добавьте код скрипта* в поле "Содержание", а поле "Название" оставьте пустым. Сохраните изменения:
код скрипта*
<script type="text/javascript"> //<![CDATA[ var ltt = String.fromCharCode(60); var rtt = String.fromCharCode(62); if(!window.jQuery){ document.write(ltt+'scr'+'ipt type="text/javascript" src="http:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1.3.2\/jquery.min.js"'+rtt+ltt+'/scr'+'ipt'+rtt); } //]]> </script> <script type="text/javascript"> //<![CDATA[ var ltt = String.fromCharCode(60); var rtt = String.fromCharCode(62); var output = $("#jqblg_contents"); var selector = output.text(); var text_output = ltt+'ol style="text-align: left; list-style-type:none;"'+rtt+'\n'; $(".post-body "+selector).each(function (i) { text_output += ltt+'li'+rtt+ltt+'a href="#part' + i + '"' +rtt+ $(this).text() +ltt+'/a'+rtt+ltt+'/li'+rtt+'\n'; $(this).before(ltt+'a name="part' + i + '"'+rtt+ltt+'/a'+rtt); }); text_output+=ltt+'/ol'+rtt; output.html(text_output); //]]> </script>Все, скрипт добавлен и готов к работе!
Как работать со скриптом.
Открываем пост в редакторе blogger и пишем статью.
Наверняка, по ходу написания, вы будете выделять названия частей и скорее всего это будет заголовок или подзалоговок. Предположим, что вы использовали заголовок, тогда у вас поучится что-то вроде:
---------------------------------------------------
Какая-то наша статья....
Часть первая
Текст первой часть
...
...
...
...
Часть вторая
Текст второй части
.....
....
и т.д. ....
---------------------------------------------
Теперь обозначим место где должно появляться содержание. Впишем там - "Содержание:"
Перейдем в режим редактирования HTML:
Отыщем в коде где мы вписали "Содержание:" и под ним добавим такой код:
<b>Содержание:</b>
<span id="jqblg_contents">h2</span>
......
......
где:
Сохраните пост и перейдите в визуальный режим редактирования:
Вот что у вас будет в редакторе:
В редакторе содержание выводиться не будет, только в опубликованном посте или в режиме просмотра.
Давайте поверим как работает скрипт - нажмите на кнопу просмотр и ... вуаля, на месте "h2" появилось содержание с ссылками на части статьи!
.....
....
и т.д. ....
---------------------------------------------
Теперь обозначим место где должно появляться содержание. Впишем там - "Содержание:"
Перейдем в режим редактирования HTML:
Отыщем в коде где мы вписали "Содержание:" и под ним добавим такой код:
<b>Содержание:</b>
<span id="jqblg_contents">h2</span>
......
......
где:
- id="jqblg_contents" - указывает, что именно этот тег должен использоваться для вывода содержания.
- span - тег в внутри которого будет выведен список содержания. Может быть и другой тег, например: div, article, section и т.п. ... главное что он имел атрибут - id="jqblg_contents"!
- h2 - указывает какой тег был использован для выделения текста названий частей. Для заголовка это - h2, для первого подзаголовка - h3? для второго - h4. Так, что если решите выделить названия частей например подзаголовком, впишите - h3, вместо - h2, и все заработает!
Сохраните пост и перейдите в визуальный режим редактирования:
Вот что у вас будет в редакторе:
---------------------------------------------------
Какая-то наша статья....
Содержание:
h2
Какая-то наша статья....
Содержание:
h2
Часть первая
Текст первой часть
...
...
...
...
Часть вторая
Текст второй части
.....
....
и т.д. ....
---------------------------------------------
.....
....
и т.д. ....
---------------------------------------------
В редакторе содержание выводиться не будет, только в опубликованном посте или в режиме просмотра.
Давайте поверим как работает скрипт - нажмите на кнопу просмотр и ... вуаля, на месте "h2" появилось содержание с ссылками на части статьи!
Плюсы и минусы скрипта
Плюсы:
- Прост в установки
- Прост в использовании и настройке
- Автоматически создает содержание
- Автоматически меняет его, если меняются название частей
- Необходима поддержка JavaScript
- Может не работать в мобильной версии blogger-а
Кастомизация скрипта(настойка под свои нужды)
При желании, для обозначения тега в котором находится название части, вы можете использовать имя класса, вместо названия тега.
Например: пусть текст частей находится в теге "p" к которому добавлен класс с именем - "part".
Тогда, чтоб скрипт нашел ваши части и создал содержание, необходимо ему об этом указать в теле маркировочного тега:
Например: пусть текст частей находится в теге "p" к которому добавлен класс с именем - "part".
Тогда, чтоб скрипт нашел ваши части и создал содержание, необходимо ему об этом указать в теле маркировочного тега:
<span id="jqblg_contents">.part</span>
Обратите внимание, перед именем класса необходимо добавить точку.
Если вы хотите изменить функциональность скрипта, добавив например возможность создания обратной ссылки от названия части к содержанию, тогда вам нужно будет разобраться в коде скрипта и дописать его.
Если вы знаете JS, тогда вы справитесь с этой задачей без труда! Но, как вы могли заметить, код скрипта не очень читабелен из-за того, что я по заменял символы "<" и ">" переменными ltt и rtt. Я это сделал в целях безопасности, чтоб блоггер не поковырял исходник скрипта и тем самым не испортил его!
Вот вариант скрипта без переменных ltt и rtt. Я думаю в таком виде вам будет проще разобраться с тем как работает скрипт и модифицировать его.
Вот и все! Надеюсь вам понравится скрипт!
Если вы хотите изменить функциональность скрипта, добавив например возможность создания обратной ссылки от названия части к содержанию, тогда вам нужно будет разобраться в коде скрипта и дописать его.
Если вы знаете JS, тогда вы справитесь с этой задачей без труда! Но, как вы могли заметить, код скрипта не очень читабелен из-за того, что я по заменял символы "<" и ">" переменными ltt и rtt. Я это сделал в целях безопасности, чтоб блоггер не поковырял исходник скрипта и тем самым не испортил его!
Вот вариант скрипта без переменных ltt и rtt. Я думаю в таком виде вам будет проще разобраться с тем как работает скрипт и модифицировать его.
<script type="text/javascript"> //<![CDATA[ if(!window.jQuery){ document.write( '<scr'+'ipt type="text/javascript" src="http:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1.3.2\/jquery.min.js">'+'</scr'+'ipt>' ); } //]]> </script> <script type="text/javascript"> //<![CDATA[ var output = $("#jqblg_contents"); var selector = output.text(); var text_output = '<ol style="text-align: left; list-style-type:none;">\n'; $(".post-body "+selector).each(function (i) { text_output += '<li><a href="#part' + i + '">' + $(this).text() +'</a></li>\n'; $(this).before('<a name="part' + i + '"></a>'); }); text_output+='</ol>'; output.html(text_output); //]]> </script>
Вот и все! Надеюсь вам понравится скрипт!
Что делать, если не работает режим "создать". Не написать текст, не загрузить изображение. Сообщения и страницы доступны для редактирования только в режиме HTML. Столкнулась с этим впервые и как-то вдруг. Ответа не могу нигде найти.
ОтветитьУдалить