Единый форум поддержки

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Единый форум поддержки » Сделаем сервис лучше » Хлебные крошки (строка навигации; упрощённая версия)


Хлебные крошки (строка навигации; упрощённая версия)

Сообщений 1 страница 6 из 6

1

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

Подфорумы "не скриптом" (Новая версия), к сожалению весьма глючная и тяжёлая весчь, когда нужно использовать лишь функционал хлебных крошек (подробнее - у меня просто перестало работать ни с того ни с сего).

Кликабельность категорий - NEW EDITION
То что нужно. Не смотря на то что он основан на предыдущем рассмотренном скрипте - он работает и в нём нет ничего лишнего. Но есть и минус, на странице поиска не отображаются категории.

Поэтому я решил попробовать совместить сие творения в один идеальный скрипт. Разумеется, не без вопросов.

Полная версия изменённого скрипта Кликабельность категорий
Код:
(function() {
  var st00 = '<style>#pun-index #pun-category',st02 = '.category{display:block!important;}</style>';
  var a = document.URL,
    b = a.replace('http://'+location.hostname+'/=&pun-category','');
  if (a != b) {
    $('#Hidecategor').after(st00 + b + st02);
  } else $('#Hidecategor').replaceWith('');
  $(document).ready(function() {
    var c = '<a href="http://'+location.hostname+'/=&';
    $('.category').each(function() {
      var L = $(this).attr('id'), L1 = $(this).find('h2 span:not(.offctgr):not(.Show-Hide)'), Ltxt = L1.text();
      L1.html(c+L+'" style="color:'+L1.css('color')+';">'+Ltxt+'</a>');
    });
    if(document.URL.indexOf('=&pun-category')!=-1){
      var CtgrID = document.URL.split('pun-category')[1];//alert(CtgrID);
      var CtgrTitle = $('.category[id$="pun-category'+CtgrID+'"]').find('h2 a').text();
      document.title = CtgrTitle;
      $('p.container.crumbs span').wrap('<a class="forum_lnk" href="http://'+location.hostname+'"></a>');
      $('p.container.crumbs a.forum_lnk').after(' »&nbsp;<span>'+CtgrTitle+'</span>');
	  
      $('.category[id$="pun-category'+CtgrID+'"]').find('h2 > span:not(.offctgr):not(.Show-Hide)').html(CtgrTitle);
      $('.category').find('.Show-Hide, .offctgr').remove();
      $('#pun-stats.section').remove();
    };
  });
  var IndexLnk = $('link[rel="top"]').attr('href');
  if($('#pun-viewforum').length){
    $.get(IndexLnk, function(data) {
      var thisFID = $('link[rel="alternate"]').attr('href').split('id=')[1];
      $(data).find('a[href$="viewforum.php?id='+thisFID+'"]').parents('.category').each(function(){
        var CtgrName = $(this).find('h2 > span').text();
        var ThisCtgrID = $(this).attr('id');
        $(document).ready(function() {
          $('#pun-crumbs1 p.container.crumbs a:first, #pun-crumbs2 .container.crumbs a:first').after(' »&nbsp;<a href="http://'+location.hostname+'/=&'+ThisCtgrID+'">'+CtgrName+'</a>');
        });
      });
    });
  }
  if($('#pun-viewtopic, #pun-post, #pun-delete, #pun-edit, #pun-movetopic, #pun-multidelete, #pun-multimove, #pun-multimegre').length){
    $.get(IndexLnk, function(data) {
      $(function(){
        var topic_FID = $('#pun-crumbs1 a[href*="viewforum."]').attr('href').split('id=')[1];
        $(data).find('a[href$="viewforum.php?id='+topic_FID+'"]').parents('.category').each(function(){
          var CtgrName = $(this).find('h2 > span').text();
          var ThisCtgrID = $(this).attr('id');
          $('#pun-crumbs1 p.container.crumbs a:first, #pun-crumbs2 .container.crumbs a:first').after(' »&nbsp;<a href="http://'+location.hostname+'/=&'+ThisCtgrID+'">'+CtgrName+'</a>');
        });
      });
    });
  }
  
  if($('#pun-searchposts').length){
    $.get(IndexLnk, function(data) {
      $(function(){
        var search_FID = $('.post a[href*="viewforum."]').attr('href').split('id=')[1];
        $(data).find('a[href$="viewforum.php?id='+search_FID+'"]').parents('.category').each(function(){
          var CtgrName = $(this).find('h2 > span').text();
          var ThisCtgrID = $(this).attr('id');
          $('.post h3 a:first').before('<a href="http://'+location.hostname+'/=&'+ThisCtgrID+'">'+CtgrName+'</a> »&nbsp;');
        });
      });
    });
  }
  
}())
Добавленный кусок кода для страницы поиска
Код:
  if($('#pun-searchposts').length){
    $.get(IndexLnk, function(data) {
      $(function(){
        var search_FID = $('.post a[href*="viewforum."]').attr('href').split('id=')[1];
        $(data).find('a[href$="viewforum.php?id='+search_FID+'"]').parents('.category').each(function(){
          var CtgrName = $(this).find('h2 > span').text();
          var ThisCtgrID = $(this).attr('id');
          $('.post h3 a:first').before('<a href="http://'+location.hostname+'/=&'+ThisCtgrID+'">'+CtgrName+'</a> »&nbsp;');
        });
      });
    });
  }

1) Самый важный - почему он запоминает лишь первый попавшийся форум (т.е. если попалась первая категория, вторую и третью он уже не покажет, только первую).
2) Отсюда же получается и второй вопрос. Как сделать чтобы категория вставлялась лишь один раз в самом начале? Он её тупо копирует на каждую ссылку, если я не скажу ему :first, что тоже плохо, ибо так я ограничиваюсь до одного элемента (читай первого сообщения).

А в остальном всё работает отлично. Я добавил кучу селекторов для других страниц, чтобы хлебные крошки отображались везде.

Посмотреть можно тут: http://pony.forum.wtf/search.php?action … 2%E8%F2%FC
Либо тут, в поиск ввести слово ТЕСТ.

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

Отредактировано Неспетый (Чт, 21 Сен 2017 23:05:37)

0

2

Обновил.

Изменнённая функция
Код:
  if($('#pun-searchposts').length){
    $.get(IndexLnk, function(data) {
      $(function(){
        var search_FID = $('#pun-main a[href*="viewforum."]').attr('href').split('id=')[1];
        $(data).find('a[href$="viewforum.php?id='+search_FID+'"]').parents('.category').each(function(){
          var CtgrName = $(this).find('h2 > span').text();
          var ThisCtgrID = $(this).attr('id');
          $('.post h3>span').prepend('<a href="http://'+location.hostname+'/=&'+ThisCtgrID+'">'+CtgrName+'</a> »&nbsp;');
        });
      });
    });
  }

Второй вопрос исчерпан, остался первый и единственный.

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

0

3

Неспетый
Ну можете поставить просто подфорумы(без автоустановки) с первой страницы топика Подфорумы "не скриптом", новая версия (Ручная установка), отображение ссылок на категории будет работать(сами подфорумы можно и не создавать)

Вытаскивать только эту часть из подфорумов или ваять заново - сложно, ибо там есть тонкости, которые правились не по одному разу

0

4

Alex_63
А он не работает у меня. Пишет Uncaught TypeError: Cannot read property '1' of null вот тут:

SUBF.processForumsLinks = function(elem,thisFid){
    var ForumObj = {};
    elem.find('.category tbody tr:not(.iredirect) .tclcon h3 a').map(function(){var Fid=$(this).attr('href').match(/id=(\d+)$/)[1];SUBF.getParentLinks(elem,ForumObj,Fid);});
    localStorage.setItem('ForumsLinksObj',JSON.stringify(ForumObj));
    if(thisFid){var Lnks = ForumObj[thisFid];SUBF.setLinks(Lnks);}
}

Я уж все скрипты удалил, всё очистил в истории за всё время. Не помогает.
Вот ссылка - http://pony.forum.wtf
"Кликабельность" только работает...
Проверял в хроме и опере.

Отредактировано Неспетый (Пн, 25 Сен 2017 23:15:03)

0

5

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

0

6

А перелинковку на сайте делали?

0


Вы здесь » Единый форум поддержки » Сделаем сервис лучше » Хлебные крошки (строка навигации; упрощённая версия)