Выбор тегов из набора при создании поста в блоге 1.X

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

Для чего это может понадобиться.
Что бы было меньше разнобоя в тегах. Со временем забываешь, какие теги использовал для подобной темы в прошлый раз или просто забываешь как их формулировал: фильм или фильмы, картошка или картофель. Возможно, имея перед глазами подобную панельку, удастся более унифицировать набор используемых тегов.
Сам только применил для одного сайта, посмотрю, насколько это полезно позже.

Шаг 1

В core/lib_tags.php
в самый конец добавить это

Код PHP:
  1. function cmsPopTagsList(){
  2. $inDB = cmsDatabase::getInstance();
  3. $html = '';
  4. $sql = "SELECT t.tag, COUNT(t.tag) as num
  5. FROM cms_tags t
  6. GROUP BY t.tag
  7. ORDER BY t.tag";
  8. $result = $inDB->query($sql) ;
  9. if ($inDB->num_rows($result)>0){
  10. while($tag = $inDB->fetch_assoc($result)){
  11. if ($tag['tag']){
  12. $html .= '<a class="addtag" param=", '.$tag['tag'].'">'.$tag['tag'].'</a><a target="_blank" href="/search/tag/'.urlencode($tag['tag']).'">('.$tag['num'].')</a>';
  13. }
  14. }
  15. }
  16. return $html;
  17. }
Выше мы создаём список тегов по аналогии с уже имеющийся в том же файле функцией создания списка тегов. Но здесь мы по другому обрабатываем вывод html тегов, делаем так, что бы при клике по тегу, не открывался поиск по тегам, (хотя рядом с тегом есть счетчик его упоминаний, если кликнуть на него, откроется поиск по этому тегу в новой вкладке).

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

Если их сотни или тысячи) можно вывести 100 самых популярных тегов.

Код PHP:
  1. function cmsPopTagsList(){
  2. $inDB = cmsDatabase::getInstance();
  3. $html = '';
  4. $sql = "SELECT t.tag, COUNT(t.tag) as num
  5. FROM cms_tags t
  6. GROUP BY t.tag
  7. ORDER BY num
  8. LIMIT 100";
  9. $result = $inDB->query($sql) ;
  10. if ($inDB->num_rows($result)>0){
  11. while($tag = $inDB->fetch_assoc($result)){
  12. if ($tag['tag']){
  13. $html .= '<a class="addtag" param=", '.$tag['tag'].'">'.$tag['tag'].'</a><a target="_blank" href="/search/tag/'.urlencode($tag['tag']).'">('.$tag['num'].')</a>';
  14. }
  15. }
  16. }
  17. return $html;
  18. }

Шаг 2

components/blogs/fronted.php

в двух местах

после

Код PHP:
  1. $post['tags'] = cmsTagLine('blogpost', $post['id'], false);
и после

Код PHP:
  1. $post = cmsUser::sessionGet('mod');
вставить строку

Код PHP:
  1. $post['poptags'] = cmsPopTagsList();

Шаг 3

в шаблоне /components/com_blog_edit_post.tpl

после

Код PHP:
  1. <input name="tags" class="text-input" type="text" id="tags" style="width:400px" value="{$mod.tags|escape:'html'}"/>
вставить это

Код PHP:
  1. <div style="width:400px; height:100px; overflow:scroll;">{$mod.poptags}</div>
  2.  
  3. <script>
  4. $('a.addtag').click(function(e){
  5. $('#tags').val($('#tags').val() + this.getAttribute('param'));
  6. e.preventDefault();
  7. });
  8. </script>
Теперь, при создании, редактировании поста появляется вот такой бар с тегами.

Выбор тегов из набора при создании поста в блоге

При нажатии на тег в баре, он добавляется с список тегов этого материала.
Единственное неудобство, если редактировать старую запись, где уже были теги и добавлять новые, то перед первым добавляемым тегом придётся в ручную поставить запятую.

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

Код PHP:
  1. .poptagsbar{
  2. padding:3px; background:#004080; border-radius:4px; border:1px solid silver; margin:2px; opacity:0.8; display:inline-block;}
  3. .poptagsbar:hover{
  4. opacity:1.0;}
  5. .poptagsbar a{
  6. color:#FFFFFF; text-decoration:none; cursor:pointer;}
То может выглядеть как то так.

Выбор тегов из набора при создании поста в блоге


Вроде всё работает.


Кто хочет улучшить, дополнить, развить, не стесняйтесь)

UPD

Для статей

Шаг 1 если уже делали пропустисть.

Потом /components/content/fronted.php
перед
Код PHP:
Код PHP:
  1. cmsPage::initTemplate('components', $article['tpl'])->
вставить
Код PHP:
Код PHP:
  1. $article['poptags'] = cmsPopTagsList();
Перед
Код PHP:
Код PHP:
  1. cmsPage::initTemplate('components', 'com_content_edit')->
вставить
Код PHP:
  1. $item['poptags'] = cmsPopTagsList();
В шаблон com_content_edit.tpl
после <input name="tags" type="text" class="text-input" id="tags...
Вставить
<div style="width:400px; height:100px; overflow:scroll;">{$mod.poptags}</div>
<script>
$('a.addtag').click(function(e){
$('#tags').val($('#tags').val() + this.getAttribute('param'));
e.preventDefault();
});
</script>
Случайный аватар для пользователей без главного фото | В статусе пользователя показываем устройство с которого он заходил
Комментарии (8)
Василич 4 ноября 2016 в 01:54 0
Давай под двойку )
Полезно для узкоспециализированных ресурсов.
Нил™ 4 ноября 2016 в 02:04 0
Да, я тоже думаю, что это больше для тематических сайтов, где посты объединены одной мега-темой. Как раз работая над таким, подумал об этом.
Для двойки не смогу, но наверно, если это полезно, разработчики для двойки возьму на заметку)
Пока думаю, нужно нечто подобное сделать для профиля (первая ветка) пользователя для поля "интересы", убрать полностью возможность писать произвольные метки и попросить выбирать из тегов. А то сейчас пользователи пишут туда иногда целые поэмы, которые никак не полезны для поиска людей с теми же интересами, а так можно задать набор возможных интересов, типа: путешествия, пиво, сериалы, животные и т. п.
Василич 4 ноября 2016 в 11:56 0
Угу, на конт.вс помню такое, еще где-то встречал, удобно. На лайф.ру вся система на тегах держится, я думаю за тегами будущее, они хорошо заменяют категории. Переходи уже на двойку, все силы вбухиваются в нее, а за такое я даже денег дам, зеле полезно )
Касательно юзеров, посмотри вк, есть предустановки но жёстко на них останавливаться думаю не стоит.
Cleverking 4 ноября 2016 в 13:50 0
А для статей такой же выбор тегов сделать сложно?
Нил™ 4 ноября 2016 в 20:32 0
Нет не сложно.
Спойлер
Нил™ 4 ноября 2016 в 20:39 0
К сожалению сколько не проверяй текст перед отправкой, все равно потом придется исправлять ошибки. Не знаю какой по счёту закон Мерфи)
В предыдущем комментарии возникла ошибка, отредактировать его не могу, удалить тоже.
Исправил сам пост, исправленный ответ по поводу статей там.
allhyipmon 10 декабря 2016 в 00:57 0
Потом /components/content/fronted.php
перед

Код PHP:
cmsPage::initTemplate('components', $article['tpl'])->

Нету такого кода :(
Нил™ 10 декабря 2016 в 10:53 0
Instantcms 1.10.7 components/content/fronted.php
строка 271