Содержания статьи для DLE для DLE

Содержания статьи для DLE

Содержания статьи для DLE

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

Или вот пример с большим количеством заголовков и подзаголовков:
Содержания статьи для DLE




Формируемый html код при необходимости в принципе достаточно легко можно изменить в самом файле модуля.
Внимание: Следует внимательно следить за иерархией используемых тегов. К примеру, если первым будет стоять тег H3, а ниже будет H2, то он и все что ниже отображаться не будет.

Установка:


Для автоматической установки в DLE 13.x достаточно установить плагин: GitHub

Но изменения в шаблоне fullstory.tpl все равно нужно будет внести вручную.

Для ручной установки:
Скачать файл headers_menu.php и распаковать в папку engine/mods
headers_menu.zip [1,64 Kb] (cкачиваний: 523)

Открыть файл engine/modules/show.full.php
Найти строку:
		$tpl->set( '{navigation}', "<!--dlenavigationcomments-->" );

После нее вставить:
///////////////////////////////////////////////////////////////////////
		include_once ENGINE_DIR . '/mods/headers_menu.php';
///////////////////////////////////////////////////////////////////////


В шаблоне fullstory.tpl использовать код:
[hmenu]<div class="contents">
	<h2>Содержание:</h2>
	<ul class="h-menu">{hmenu}</ul>
</div>
<script>
$(document).on('click', 'a[href*=hmenu-]', function(e){
	e.preventDefault();
	var id = $(this).attr('href');
	var top = $(id).offset().top - 90;
	$('html,body').animate({scrollTop:top + 'px'});
})
</script>
<style>
.contents{
	background: #F8F9FA;
	border: 1px solid #A2A9B1;
	padding: 15px 20px 10px 5px;
	display: table;
	border-radius: 2px;
	margin-top: 15px;
}
.contents>h2{
	margin: 0;
	padding: 0 0 15px;
	font: bold 17px 'Trebuchet MS';
	text-align: center;
}
.contents ul{
	margin: 0;
	padding: 0 0 0 20px;
	list-style: none;
}
.contents ul li{
	margin: 0;
	padding: 1px 0;
}
.contents ul li span{
	color: #444;
	font-size: .9em;
}
</style>
[/hmenu]

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

Установка для статической страницы


Открыть файл engine/modules/static.php
Найти строку:
			$tpl->set( '{static}', $template );

ПЕРЕД ней вставить:
			include_once ENGINE_DIR . '/mods/headers_menu.php';
			$menulist = HeadersMenu::init($template);
			$template = $menulist . $template;


Примеры:


Пример #1
Пример #2

С уважением,
Олег Александрович a.k.a. Sander
Комментарии: (95)
  1. foto
    Клиент 20 февраля 2018 20:07 #
    а возможно чтоб в админке при "Предварительный просмотр" формировать содержание статьи?
    0
    1. foto
      Администратор 21 февраля 2018 12:36 #
      Открыть файл:
      engine/inc/preview.php - админка
      engine/preview.php - сайт
      Найти строку:
      $tpl->set('{short-story}', stripslashes($short_story));

      Перед ней вставить:
      /////////////////////////////////////////////////////////////////////////////////////
      include_once ENGINE_DIR . '/mods/headers_menu.php';
      $menulist = HeadersMenu::init($full_story);
      $full_story = $menulist . $full_story;
      /////////////////////////////////////////////////////////////////////////////////////
      +1
  2. foto
    Гость 21 февраля 2018 19:56 #
    Привет, а не будет ли для информационного сайта бо бо за повторения (как бы переоптимизация и все дела)
    0
    1. foto
      Администратор 21 февраля 2018 20:36 #
      В этом плане лучше проконсультироваться с СЕО специалистом.
      Мне известно только, что поисковики не индексируют ссылки с хеш тегом (википедия к примеру).
      0
  3. foto
    Гость 25 февраля 2018 05:40 #
    Почему DLE?
    Это же платный движок и вкладывать его стоимость, допустим, в стоимость услуг не есть приятной штукой или друзьям поднять визитку на нем

    Долго сидел на DLE, часто получал письма от LEGACY и ушел на Wordpress. PHP-шнику работать с ней сплошное удовольствие, кастомизируется и масштабируется в любом направлении
    0
  4. foto
    Гость 25 марта 2018 09:48 #
    А как сделать, чтобы в содержании выводились только h2?
    0
    1. foto
      Администратор 25 марта 2018 14:38 #
      В коде файла заменить строку
      preg_match_all("#<h(\d+)>(.*?)</h\\1>#is", $story, $hmenu);

      На
      preg_match_all("#<h(2)>(.*?)</h\\1>#is", $story, $hmenu);


      UPD: Исправленный вариант
      0
      1. foto
        Гость 25 марта 2018 16:24 #
        Цитата: Sander
        В коде файла заменить строку
        preg_match_all("#<h(\d+)>(.*?)</h\\1>#is", $story, $hmenu);

        На
        preg_match_all("#<h2>(.*?)</h2>#is", $story, $hmenu);

        Сделал и меню совсем пропало.
        0
  5. foto
    Посетитель 13 апреля 2018 20:27 #
    Спасибо за отличный хак!
    Можно ли добавить возможность скрывать/раскрывать блок (типа спойлера)?
    0
    1. foto
      Администратор 16 апреля 2018 11:17 #
      В теории возможно, но для этого лучше использовать непосредственно спойлеры.
      0
  6. foto
    Посетитель 16 апреля 2018 21:27 #
    Sander, возникла проблема.
    Пишет Error Parse class и путь к файлу /mods/headers_menu.php online 33.
    На локальном сервере работает, на удаленном — нет.
    Версия DLE и там, и там — 11.1.
    Не подскажите, в чем может быть проблема?
    0
    1. foto
      Администратор 17 апреля 2018 10:37 #
      Обновите php хотя бы до 5.4, а лучше до 5.6 или 7.1
      +1
  7. foto
    Гость 18 апреля 2018 11:36 #
    А как его образовать под микулокунськую статику? Ну чтобы выводилось как бургамик на старнице, а не по пирекенски:?
    0
  8. foto
    Гость 19 апреля 2018 16:10 #
    Приветствую. Подскажите пожалуйста почему хак не работает на 11 и 12 версиях только на 10? ( Проверяю на чистой дле Опенсервер.
    0
    1. foto
      Администратор 19 апреля 2018 16:12 #
      Хак разрабатывался на DLE 12.0. Почему он может не работать у вас - затрудняюсь ответить. Может у вас там PHP 5.3 ?
      0
  9. foto
    Гость 19 апреля 2018 18:17 #
    pastenow.ru/ 50789bbee7cea7a413cdc1d026ad0b31
    Тоже странно вроде 5.6
    Скопировал демо страницу но нечего, только текст и стрелочки к оглавлению меню. А самого меню нету.
    0
  10. foto
    Гость 21 апреля 2018 11:07 #
    Ради этого модуля скачал новый опен и прокачал на максимальные требования и поставил новейшую версию и опять нечего нету. Даже с вики не хочет выстраивать. Вот скрин всех параметров.
    pastenow.ru/3556a41c69a3926d83d44b19a524fb56

    Удалил модуль и чудо менюха появилась с неактивными модулями вот скрин. Может в php есть дефект при отображении, ведь куда правильнее вставлять?
    pastenow.ru/7f7f69fb10b9fbdd0c9d2bc4d599d2b1
    0
    1. foto
      Администратор 21 апреля 2018 11:10 #
      Модуль рассчитан под стандартные теги заголовков [ h1 ] ... [ /h1 ]
      В крайнем случае просто <h1>...</h1>, без дополнительных аттрибутов.
      0
  11. foto
    Гость 21 апреля 2018 11:20 #
    Также при исправлении модуля только на H2 тоже нечего не происходит.
    0
  12. foto
    Гость 21 апреля 2018 11:26 #
    При H1 тоже не отображается. Может можно прикрепить файл идеального примера так как скопировавши пример с примера тоже нечего не отображается.
    0
    1. foto
      Администратор 21 апреля 2018 11:28 #
      Попробуйте использовать bb редактор вместо визуального.
      Если не поможет, то удаленно на словах ничем более не могу помочь.
      0
  13. foto
    Гость 20 мая 2018 16:51 #
    Еще раз здравствуйте. А можно для этого модуля создать плагин как в этой теме sandev.pro/web/136-hak-avtomaticheskiy-vyvod-spiska-id-podkategoriy.html
    Может тогда заработает, а то столько движков переставил а не срабатывает (
    0
    1. foto
      Администратор 22 мая 2018 12:10 #
      https://github.com/San-Dev/dle-plugins/blob/master/Headers-Menu.xml

      Установил на DLE 13.0 на froala редакторе, все работает.
      0
  14. foto
    Гость 13 октября 2018 19:59 #
    Sander подскажи пожалуйста, что надо убрать чтобы вся нумерация пропала, остались только ссылки.
    0
    1. foto
      Администратор 14 октября 2018 00:22 #
      Самый простой вариант - скрыть стилями:
      .h-menu span {display:none;}
      0
  15. foto
    Гость 22 ноября 2018 14:17 #
    Добрый день. У меня не хочет отображаться. DLE 11.2. Как можно запустить, подскажите пожайлуста
    [hmenu]
    Содержание:
    {hmenu}
    [/hmenu]
    0
  16. foto
    Гость 22 ноября 2018 15:13 #
    Разобрался у вас в описании ошибка
    include_once ENGINE_DIR . '/mods/headers_menu.php'; а нужно
    include_once ENGINE_DIR . '/modules/headers_menu.php';
    ну или по крайней мере в моем случае это так.
    За хак спасибо большое
    0
    1. foto
      Администратор 23 ноября 2018 10:05 #
      В описании ошибок нет.
      Там написано что нужно распаковывать файл в папку engine/mods вы же распаковали в engine/modules
      0
      1. foto
        Гость 29 ноября 2018 10:58 #
        У меня версия DLE 11.2 там нет такой папки. А или ее нужно было создать...Все ясно.... Ладно в любом случае я разобрался, спасибо за ответ.
        0
  17. foto
    VIP 16 декабря 2018 15:31 #
    Добрый день! Можно ли добавить навигацию по страницам путём хештега? site.ru/1345-name.html#zagolovokh2
    0
    1. foto
      Администратор 18 декабря 2018 00:15 #
      В скрипте именно так и сделано.
      Но для плавной анимации использование хештега блокируется в JS.
      Чтобы работал хештег - достаточно удалить/не использовать JS код из инструкции.
      0
  18. foto
    Гость 26 декабря 2018 06:06 #
    Здравствуйте!

    Супер модуль, огромное спасибо.

    Вопрос: а как убрать стрелочки вверх от заголовков?
    0
    1. foto
      Администратор 26 декабря 2018 12:31 #
      В php файле удалить часть кода:
      <a href="#hmenu-item-%2$d" title="К меню">&uarr;</a> 
      0
      1. foto
        Гость 14 февраля 2019 07:48 #
        Спасибо. Я смогу сделать на одном сайте, но на другом, где устанавливал автоматически, файла в папе /mods/ нету, как и самой папки. Где в этом случае удалить?
        0
        1. foto
          Администратор 14 февраля 2019 10:55 #
          В утилите управления плагинами в админке DLE.
          0
  19. foto
    Гость 26 декабря 2018 12:35 #
    А можно сделать меню в ряд с помощью кнопок?
    0
    1. foto
      Администратор 26 декабря 2018 12:39 #
      Можно.
      Просто стилями оформить.
      0
      1. foto
        Гость 26 декабря 2018 13:30 #
        а можно показать как это сделать с примером
        0
        1. foto
          Администратор 26 декабря 2018 14:33 #
          Для этого вам нужен дизайнер/верстальщик, который сможет нарисовать и сверстать кнопки согласно вашим пожеланиям.
          0
  20. foto
    Гость 28 февраля 2019 22:21 #
    Привет, подскажите пожалуйста, как вывести все это, перед первым h2 в статье, то есть небольшое описание (вступление статьи) и перед первым же h2 выходит Содержание
    0
    1. foto
      Администратор 28 февраля 2019 22:32 #
      Не подскажу.
      Для этого нужно писать регулярку и тестировать.
      0
      1. foto
        Гость 3 марта 2019 22:11 #
        Очень жаль, а то я все настроил, все вывел, а из-за этого недоразумения, что в DLE так все построено, у меня 784 статьи, я задолбаюсь, через теги выводить содержание).

        А вообще, такое возможно реализовать, чтобы выводилось перед первым h2 во всех статьях сразу?

        У меня информационник (статейный сайт).
        0
        1. foto
          Администратор 4 марта 2019 09:33 #
          А вообще, такое возможно реализовать

          Да, как я писал выше, для этого нужно писать регулярное выражение, которое будет искать нужное место в тексте и скрипт, который будет в это самое место вставлять нужный код. Но я этим заниматься не хочу.
          0
  21. foto
    Гость 25 марта 2019 20:21 #
    А как можно сделать например меню чтобы оно в строчку было? Сделал все через <h2> но надо чтобы оно было в строчку а не в столбик
    0
    1. foto
      Администратор 25 марта 2019 21:43 #
      Стилями.
      float: left; или display: inline-block; или display: flex;
      0
      1. foto
        Гость 27 марта 2019 21:03 #
        Цитата: Sander
        Стилями.
        float: left; или display: inline-block; или display: flex;


        да с этим разобрался уже пару дней как, а вот с пунктом чтобы например каждый пункт расматривать отдельно, чтобы каждому пункту например можно было было бы добавить иконку из Font Awesome
        0
  22. foto
    VIP 4 апреля 2019 00:43 #
    Нет ли возможности в данном модуле сделать поддержку дополнительных полей (несколько строк)?

    Например, отдельно выводить тегом {hmenu_имяполя}
    0
    1. foto
      Администратор 4 апреля 2019 12:04 #
      В текущей реализации - нет.
      0
  23. foto
    Гость 31 августа 2019 18:27 #
    При нажатии строки содержания идет переход на нужный заголовок, подскажите пожалуйста где именно в стилях поправить чтоб заголовок приподнять к верху?
    0
  24. foto
    Гость 4 октября 2019 14:42 #
    Не подскажете, как добавить к ссылкам ID новости, чтобы было примерно так:

    <li id="hmenu-{news-id}-item-2"><a href="#hmenu-{news-id}-2"><span>2</span> Различия описания концепции шаблона</a></li>


    где {news-id} это ID новости. Это нужно, если полные новости подгружаются на ajax.
    0
  25. foto
    Гость 11 декабря 2019 12:48 #
    Плагин не работает на 13.3 DLE.

    тестировал как загрузку плагина - не создает и не правит файлы.
    Так и ручной инсталл.. В теле новости ошибок не выдает, просто пусто.
    0
    1. foto
      Администратор 12 декабря 2019 00:59 #
      Я не поленился, проверил.
      На DLE 13.3 с BB редактором работает без каких-либо проблем.
      Устанавливал версию с гитхаба через утилиту управления плагинами.
      0
    2. foto
      Администратор 12 декабря 2019 00:59 #
      Я не поленился, проверил.
      На DLE 13.3 с BB редактором работает без каких-либо проблем.
      Устанавливал версию с гитхаба через утилиту управления плагинами.
      0
  26. foto
    Гость 23 января 2020 18:36 #
    Hello,
    Thank you for your effort
    However, this add-on did not work for Arabic content
    0
    1. foto
      VIP 23 января 2020 19:21 #
      You are doing something wrong! Do you use in text tags h2 h3 h4 etc. ???
      0
      1. foto
        Гость 23 января 2020 19:41 #
        yes
        it works with me when publishing an article in English
        0
  27. foto
    VIP 24 января 2020 01:16 #
    С включённой ленивой загрузкой не правильно прокрутку делает. Так как фотки успевают прогружаться. Или только у меня так?
    0
  28. foto
    Гость 1 марта 2020 17:11 #
    А както возможно сделать так< чтобы это работало на главной странице (по тексту на главной странице)?
    0
  29. foto
    VIP 5 марта 2020 13:56 #
    Подскажите пожалуйста,
    Как применить стили оформления на статических страницах?
    0
  30. foto
    Гость 4 августа 2020 00:36 #
    Здравствуйте. А как в <li> добавить class="...", в котором будет индекс тега h[1], h[2], h[3]. Например, чтобы получилось:
    <li id="hmenu-item-1" class="2">
    <li id="hmenu-item-2" class="2">
    <li id="hmenu-item-3" class="3">
    <li id="hmenu-item-4" class="2">
    0
    1. foto
      Администратор 4 августа 2020 00:43 #
      Попробуйте так:
      private static $tpl_list = '<li id="hmenu-item-%1$d" class="cls-%4$d"><a href="#hmenu-%1$d"><span>%2$s</span> %3$s</a>';


      И строку:
      				$list .= sprintf(self::$tpl_list, $v['id'], $num, $v['h']);

      Заменить на:
      				$list .= sprintf(self::$tpl_list, $v['id'], $num, $v['h'], $v['tag']);
      0
      1. foto
        Гость 4 августа 2020 01:54 #
        Спасибо, сработало
        0
  31. foto
    Гость 15 августа 2020 14:12 #
    Добрый день
    а подскажите, как убрать стрелку у заголовков, которая перекидывает наверх
    если я загружал плагином
    0
    1. foto
      Гость 15 августа 2020 14:14 #
      Увидел, что в плагинах
      но не пойму какую строку убрать
      убираю эту private static ... там где "к меню"
      и сайт падает с ошибкой
      0
      1. foto
        Гость 15 августа 2020 14:26 #
        разобрался)
        0
        1. foto
          Гость 15 августа 2020 14:31 #
          Нет, не понимаю..
          уже вручную установил
          нет там строки, которую вы выше указывали в ответ на вопрос про удаление данной стрелки

          есть другая, но если ее удалить, сайт падает
          0
          1. foto
            Гость 15 августа 2020 14:33 #
            понял, нужно только часть удалить..
            0
            1. foto
              Посетитель 22 августа 2020 20:28 #
              Поделитесь сей ценной инфой, а то самого одолевает такая мысль убрать стрелку.
              0
              1. foto
                Гость 22 августа 2020 23:09 #
                private static $tpl_header = '<h%1$d id="hmenu-%2$d"><a href="#hmenu-item-%2$d" title="К меню">&uarr;</a> %3$s</h%1$d>';


                меняете на

                private static $tpl_header = '<h%1$d id="hmenu-%2$d">%3$s</h%1$d>';
                +1
  32. foto
    Гость 15 августа 2020 20:35 #
    Здравствуйте. А как сделать, чтобы перед каждым <h2> вывести нужный мне html? (Например: <div></div>)?
    0
    1. foto
      Администратор 25 августа 2020 10:19 #
      самое простое, в той же строке
      private static $tpl_header = '<h%1$d id="hmenu-%2$d">%3$s</h%1$d>';

      Прописать как-то так:
      private static $tpl_header = '<div class="prehead prehead-%1$d"></div><h%1$d id="hmenu-%2$d">%3$s</h%1$d>';

      И в стилях:
      .prehead {display: none;}
      .prehead.prehead-2 {display: block;}
      0
  33. foto
    Посетитель 22 августа 2020 20:25 #
    Большое человеческое спасибо за сей хак, теперь контент манагеры экономят кучу времени и вспоминают разработчика добрым словом, а то вручную делали все.
    0
  34. foto
    Гость 19 сентября 2020 13:22 #
    Есть ещё такая беда, что в заголовках не работают спецсимволы (`). И если есть спецсимвол, то полное содержание не выводится вообще (а содержание выводится). Это можно как то исправить?
    0
    1. foto
      Администратор 19 сентября 2020 17:47 #
      Исправил. Обновил код на github.
      0
  35. foto
    Гость 26 октября 2020 11:41 #
    Добрый день, а как инвертировать нумерацию списка? допустим надо что бы начиналось с 10,9,8... а не как сейчас 1,2,3..
    0
    1. foto
      Администратор 28 октября 2020 21:44 #
      В теории такое возможно, но сложность и бесполезность задачи лишает меня всякого желания над этим задумываться.
      0
  36. foto
    Гость 26 декабря 2020 15:44 #
    Добрый день, подскажите, пожалуйста, как изменить проверку не в фулстори а отдельным доп полем, даже двумя.
    if (isset($row['full_story']) && $tpl instanceof dle_template) {
    $menulist = HeadersMenu::init($row['full_story']);

    Спасибо!
    0
  37. foto
    Гость 6 апреля 2022 20:02 #
    На DLE версии 15.1 не работает(
    0
    1. foto
      Администратор 6 апреля 2022 22:07 #
      В DLE 15.1 сделали отвратительную вещь в утилите управления плагинов.
      Откройте редактирование плагина, разверните список каждого действия и включите его.
      +1
  38. foto
    Гость 2 мая 2022 11:46 #
    Если в заголовках встречается знак # то парсер ломается и статья не выводится. Также в некоторых случаях, как я понял, из за каких то символов в тексте, содержание не работает.
    0
  39. foto
    Гость 1 августа 2022 14:47 #
    На 15.2 все стало как надо в автоматическом режиме. Полет нормальный, респект автору.
    0
    1. foto
      Клиент 11 сентября 2022 12:40 #
      А где скачать плагин для автоматической установки?
      0
  40. foto
    Гость 23 сентября 2022 23:39 #
    Здравствуйте, есть возможность хватать еще из tpl?
    Допустим не хватает их fullstory и {include file=""}
    0
    1. foto
      Клиент 30 октября 2022 20:55 #
      Это да! Очень не хватает!
      0
  41. foto
    Гость 13 января 2023 17:27 #
    Добрый день. Скрипт удаляет все ссылки из тега H2 и делает его текстом, возможно ли сохранить оригинальные ссылки?
    0
    1. foto
      Администратор 13 января 2023 17:29 #
      Попробуйте удалить в коде строку
      $v = strip_tags($v);


      UPD:
      И эту строку:
      'h'   => $v

      Заменить на
      'h'   => strip_tags($v)
      0
      1. foto
        Гость 13 января 2023 23:45 #
        Спасибо, все работает!
        0
  42. foto
    Гость 30 января 2023 13:22 #
    А как сделать, чтобы в содержании выводились только h2?
    Заменил, как вы подсказывали раньше, но тогда Содержание пропадает вовсе (в DLE 12.1 ).
    Замените в headers_menu.php
    preg_match_all("#<h(\d+)>(.*?)</h\\1>#is", $story, $hmenu);
    

    На
    preg_match_all("#<h2>(.*?)</h2>#is", $story, $hmenu);
    0
    1. foto
      Администратор 30 января 2023 13:53 #
      Эта правка позволяет изменить алгоритм формирования содержания.
      Т.е. чтобы оно формировалось только из тегов h2 в статье.
      Эта правка может не работать по двум причинам:
      1. В тексте нет тегов h2
      2. В теге прописано ещё что-то, пример:
      <h2 class="heading">
      0
      1. foto
        Гость 16 марта 2023 11:24 #
        Мало ли кому-то пригодится. Автор подсказал в headers_menu.php заменить
        preg_match_all("#<h(\d+)>(.*?)</h\\1>#is", $story, $hmenu);
        на
        preg_match_all("#<h(2)>(.*?)</h2>#is", $story, $hmenu);

        Теперь в содержании только h2 :)
        0
  43. foto
    Гость 12 апреля 2023 10:29 #
    Здравствуйте, Скажите пожалуйста как исправить.
    Пытаюсь создать <script type="application/ld+json">
    "articleBody": "{full-story}"
    Но валидатор выдает ошибку
    JSON-LD
    Отсутствует символ "," или "}" в декларации объекта.
    именно тут <h2 id="hmenu-1">
    Ругается на кавычки.
    Скажите пожалуйста как можно исправить?
    0
  44. foto
    Гость 12 сентября 2023 12:00 #
    Такое возможно сделать при выводе в RSS?
    0
  45. foto
    Гость 6 октября 2024 20:43 #
    Добрый день. В короткой новости, можно ли так реализовать?
    0
  46. foto
    Гость Сегодня, 15:19 #
    Найден баг, если в статье в группе тегов h2-h6 будет использоваться символ # то перестает отображаться весь текст статьи.
    <h2>#Hash текст</h2>

    Если так добавить, то ломается работа вывода полного описания.
    0
Добавить комментарий

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

Attention! All messages asking for technical support will be removed or ignored

  • Логин
  • E-mail (не обязательно)
Повторите рисунок:
antibot
© Sander-Development. 2009-2024.
При копировании, ссылка на источник обязательна.