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

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

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

Шаг 1

В core/lib_tags.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 самых популярных тегов.

  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

в двух местах

после

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

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

  1. $post['poptags'] = cmsPopTagsList();

Шаг 3

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

после

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

  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 добавить стили для него
типа

  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:
  1. cmsPage::initTemplate('components', $article['tpl'])->
вставить
Код PHP:
  1. $article['poptags'] = cmsPopTagsList();
Перед
Код PHP:
  1. cmsPage::initTemplate('components', 'com_content_edit')->
вставить
  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>
0
Василич Василич 9 лет назад #
Давай под двойку )
Полезно для узкоспециализированных ресурсов.
Нил™ Нил™ 9 лет назад #
Комментарий удален
0
Василич Василич 9 лет назад #
Угу, на конт.вс помню такое, еще где-то встречал, удобно. На лайф.ру вся система на тегах держится, я думаю за тегами будущее, они хорошо заменяют категории. Переходи уже на двойку, все силы вбухиваются в нее, а за такое я даже денег дам, зеле полезно )
Касательно юзеров, посмотри вк, есть предустановки но жёстко на них останавливаться думаю не стоит.
0
Cleverking Cleverking 9 лет назад #
А для статей такой же выбор тегов сделать сложно?
Нил™ Нил™ 9 лет назад #
Комментарий удален
Нил™ Нил™ 9 лет назад #
Комментарий удален
0
allhyipmon allhyipmon 9 лет назад #
Потом /components/content/fronted.php
перед

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

Нету такого кода :(
Нил™ Нил™ 9 лет назад #
Комментарий удален

Еще от автора

Капча на сайт или разделы сайта
Если нужно, закрыть весь сайт или некоторые его разделы каптчей.
Пинг поисковых систем для первой ветки
Небольшая интеграция инструментов для пингования, чтобы сделать его чуть удобнее
Генератор карты сайта в формате txt на лету без крона
Вообще то где то тут уже есть вполне рабочие генераторы карты для первой ветки, но этот вариант тоже имеет право быть.
🍪Мы используем файлы cookie для работы сайта. Читать подробнее.