Скрипт блок "Содержание" для материалов

Юрий Герук 2020-09-06 1085 6
Скрипт блок "Содержание" для материалов

Содержание

    Сегодня мы рассмотрим уникальное решение для более удобной навигации по материалу / статье / новости, блок "Содержание" с списком ссылок / якорей.

    Зачем нужен скрипт блок "Содержание" ?

    1. Блок выполняет функцию быстрой навигации по материалу.
    2. Блок содержит якоря на основные разделы / заголовки статьи.

    Как работает скрипт блок "Содержание" ?

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

    Как установить скрипт блок "Содержание" ?

    В шаблоне страницы материала и комментариев перед тегом </body> установить такой скрипт:

    <script type="text/javascript">
    $(document).ready(function(){
     if ( $('.posto-mes h3').length || $('.posto-mes h2').length ) {
     $('.posto-mes h3,.posto-mes h2').each(function(){
     var thisText = $(this).text();
     var anchorText = thisText.replace(/"/g, "'").replace(/ /g, "-");
     var anchorLink = '<a name="' + anchorText + '"></a>';
     var anchorText = '<a href="#' + anchorText + '"><li>' + thisText + '</li></a>'; 
     $(this).before(anchorLink);
     $(anchorText).appendTo('#marker');
     });
     } else {
     $('#marker-remove').remove();
     }
     });
    </script>

    Важно! Выше выделено красным, класс posto-mes это див внутри которого у нас находится оператор $MESSAGE$ где мы и занимаемся поиском тегов h2 и h3, если у вас другой класс, вам нужно заменить название на свое в скрипте примере выше.

    Далее чтобы выводился блок содержание, в шаблоне страницы материала и комментариев модуля где используете скрипт, где-то над оператором $MESSAGE$ прописать код:

    <div class="alert alert-secondary" id="marker-remove" role="alert"><p style="text-align:center;font-weight: bold;">Содержание</p>
    <ol><div id="marker"></div></ol> 
    </div>

    Скрипт работает по следующему принципу, если теги h2-h3 обнаруживаются в тексте статьи, блок "Содержание" отображается, в том случае если такие теги не обнаруживаются в тексте материала, блок вырезается скриптом автоматически, чтобы не занимал место на странице материала.

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

    Лицензия: CC BY-SA 4.0

     

    Автор: Юрий Герук

    Похожие материалы:

    Комментарии

    avatar
    Скажите, почему в полной версии в списке ставятся цифры, а в pda нет, идёт список без них. Или это очередное ограничение от uCoz для мобильных версий?
    avatar
    Нужно смотреть пда версию, скорее там стилями скрыты маркера с помощью list-style:none; для ul или ol
    avatar
    Прошу прощения, просто в стилях прописал ol li { и нумерация стала отображаться.
    avatar
    Великолепный, просто магический скрипт, который значительно облегчит работу с контентом. Спасибо!

    Единственное, не хватает одной дополнительной функции: чтобы не во всех статьях было содержание. А можно было как-то редактору ставить чекбокс нужно или не нужно в статье содержание.

    Я например так реализовал фотогалерею внизу статьи, если есть несколько прикрепленных изображений.
    При добавлении: http://joxi.ru/8AnQeQVSoOn4R2
    Результат: http://joxi.ru/4AkM4Mec0zR9Jm
    avatar
    Можно сделать подобное, придется тратить для этого отдельное доп поле, в котором например писать в каждом посте значение 1 если нужно выводить блок, ну а далее в условие подобно:

    <?if($OTHER1$="1")?>скрипт блока содержание<?endif?>

    завернуть блок содержание. В итоге пишем 1 если нужно выводить блок и 0 если не нужно.
    avatar
    Спасибо. Все великолепно работает.