Идея плагина "Расширенные теги"

Захотелось сделать что-то подобное кинопоиску. Где навигация идет по разного рода тегам.

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

В общем в скриншотах то, что получилось.






На основе тегов легко можно делать меню, выдергивая теги, соотнесенные с каким-то конкретным ключом, например «жанром».
Сами ссылки работают как обычные ссылки тегов, то есть выводятся все топики, где этот тег встречается.

Реализация частично использует ORM.

Кому охота потестить, взять можно здесь.
Для разработки использовалась последняя LS 1.0.1 и шаблон synio.

176 комментариев

avatar
Спасибо!
Несколько вопросов:
1. Откуда берутся типы топиков? У меня например есть свои типы топиков, смогу ли я к ним прикрутить?
2. Поиск по этим полям будет? Например «Дикий ангел орейро»
3. Обычные теги остаются?
avatar
Начал тестировать. Первый пункт отпадает, мои типы топиков появились.
avatar
Оказывается это просто те же теги под другим соусом. У меня вся сортировка сводится к ссылке /tag/tagname, а я надеялся что будет /tag/country/Russia или /tag/year/2008
avatar
это сделаю скоро, в этом проблемы нет
avatar
попробуйте последнюю версию с гитхаба
avatar
1. Откуда берутся типы топиков? У меня например есть свои типы топиков, смогу ли я к ним прикрутить?
Типы топиков и блогов берутся из enum поля topic_types и blog_types. То есть если у вас кошерно прикручен свой вид топика, он появится.
2. Поиск по этим полям будет? Например «Дикий ангел орейро»
Для поиска надо корректировать конфиг Сфинкса, добавлять туда поле доптегов для индекса.
3. Обычные теги остаются?
Обычные теги остаются, если к данному топику нет групп тегов.
avatar
Обычные теги остаются, если к данному топику нет групп тегов.
А где поменять, чтобы всегда были?
avatar
Что-то у меня везде баги полезли, в маперах, в экшенах, в шаблонах, в SQL запросах… А так, наверно полезный плагин будет.
  • aex
  • 0
avatar
php >= 5.3
avatar
какие ошибки?
avatar
Да не страшно, разберусь.
avatar
так то может из-за плагина. мне бы полезно знать
avatar
Ну вот такая есть:

SQL Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE field = 'topic_type'' at line 2 at /home/www/city/mylivestreet/plugins/tagextender/classes/modules/topic/mapper/Topic.mapper.class.php line 60
Array ( [code] => 1064 [message] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE field = 'topic_type'' at line 2 [query] => SHOW COLUMNS FROM soc_topic WHERE field = 'topic_type' [context] => /home/www/city/mylivestreet/plugins/tagextender/classes/modules/topic/mapper/Topic.mapper.class.php line 60 )
avatar
А на прямую запрос:

SHOW COLUMNS FROM `soc_topic` WHERE `Field` = 'topic_type'

выполняется?
avatar
#1064 — You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE `Field` = 'topic_type'' at line 1
avatar
чего-то не понимаю.
А просто
SHOW COLUMNS FROM `soc_topic`
?
avatar
Это идет.
avatar
так а там в результате поля `Field` что ли нет?
avatar
Нет конечно :)
avatar
Такого разве нет?
avatar
Ну это есть, запрос не срабатывает, синтаксис не тот.
avatar
Почему ж у меня он срабатывает. Да и в модуле Database оригинальный запрос на добавления enum значения такой же.
avatar
Не забивай себе голова :) Я потом посмотрю, разберусь. У других таких проблем нет и ладненько.
avatar
нужно определиться, в облаке тегов нужны все теги в куче, или только те, что будут в основном поле «теги».
avatar
Просьба. Добавьте плагин в каталог.
avatar
Так он еще не зарелизен, шлифуется. У людей ошибки сыпятся. Сейчас планирую довести до стабильного состояния хотя бы, потом обязательно добавлю.
avatar
отличная идея. желаю успехов в развитии
avatar
Нашел одну небольшую ошибку.
При добавлении новой категории выдает ошибку:

Array ( [allow_empty] => 1 )
Warning: Cannot modify header information — headers already sent by (output started at Z:\home\test1.ru\www\plugins\tagextender\classes\modules\tagextender\entity\TopicTagGroup.entity.class.php:102) in Z:\home\test1.ru\www\engine\include\function.php on line 220

Но сама категория добавляется и работает нормально.
avatar
мои дебажные print_r забыл удалить.
в TopicTagGroup.entity.class.php
public function setAllowEmpty($data) {
        $this->setExtraValue('allow_empty',$data);
        print_r($this->aExtra);
 }


надо заменить на

public function setAllowEmpty($data) {
        $this->setExtraValue('allow_empty',$data);     
 }
avatar
Отличная идея, очень перспективная реализация! Удачи автору!
При выходе стабильной версии обязательно продонейчу!

Было бы еще здорово, что бы создавать наборы групп тегов для различных блогов.
Например, следуя вашей фильмо-идеологии,
Для топиков блога «художественные фильмы» — Актеры, Режжисеры, Жанры
Для блога «сериалы» — Актеры, Режжисеры, Жанры, Сезоны
Для блога «мультфильмы» — Актеры, Режжисеры, Жанры, Мультипликаторы
avatar
//Режжисеры — режиссеры, конечно :-)
avatar
Т.е., по сути, при редактировании группы тегов добавить возможность отмечать блоги из списка, где эти группы будут привязаны.

К примеру, редактирование группы тегов «Дата выхода»:



Привязка к блогам:
+ Художественные фильмы
+ Сериалы
— Мультфильмы
+ Документальные фильмы
avatar
думаю, что смогу реализовать
avatar
как то можно Демку организовать. не могу понять в чем суть?
avatar
исправлю баги, покажу демку сразу
avatar
Еще хотелось бы учесть возможность написания тегов со слешем (например punk/punk rock) сейчас при переходи на страницу этого тега 404 ошибка
avatar
Плагин изменяет стандартную таблицу движка topic_tag, как мне кажется это не совсем правильно.
avatar
Мне показалось, это будет проще добавить туда полк, чем делать отдельную таблицу связей.
avatar
Согласен, это просто замечание )
С одной стороны это не совсем правильно, а с другой стороны зачем городить лишнее
avatar
Залил плагин. Пытаюсь активировать через админку. Выдает ошибку
Ошибка: Файл плагина не найден
avatar
Тоже самое переименовал в Tagextender, активировался и выдает ошибку:
Fatal error: Class 'PluginTagextender' not found in /home/muldy/data/www/ihdwallpaper.net/engine/classes/Engine.class.php on line 465
avatar
Я тоже сначала подумал, что проблема в переименовании файла, так как сам архив переименовывал. Но затем перезалил архив с оригинальным названием и все равно не активируется.
avatar
папка должна называться tagextender. Версия ЛС 1.0.1.
avatar
Спасибо! Помогло — все работает, пошел тестировать.
avatar
Плагин просто супер, спасибо за работу!!!
avatar
Вылетает ошибка Fatal error: func_get_args(): Can't be used as a function parameter in /plugins/tagextender/classes/modules/topic/entity/Topic.entity.class.php
avatar
Также в при создании топика не отображаются созданные группы, LS 1.0.1
avatar
Для топиков или фотосетов?
avatar
такая ошибка в старых версиях PHP была.
Можно в /plugins/tagextender/classes/modules/topic/entity/Topic.entity.class.php сначала присвоить переменной func_get_args(), а затем переменную вставить вместо func_get_args() в параметрах
avatar
Да версия 5.2, не совсем понял что присвоить переменной func_get_args()???
avatar
обновитесь с гитхаба
avatar
После установки плагина вначале каждого поста теперь вот такую ошибку отображает

Warning: Invalid argument supplied for foreach() in /var/www/megotrip/megotrip.com/plugins/tagextender/classes/modules/topic/entity/Topic.entity.class.php on line 20

Чтобы это могло значить?
avatar
обновитесь
avatar
Все сделал но поля при создании фотосэта так и не появляются!?
avatar
сейчас сделаю для фотосета, просто жду, когда ort добавит нужный хук, чтоб было легче сделать.
avatar
в форме они появляются, но не появляются уже в созданном?
avatar
Нет в форме нет)!
avatar
для персональных блогов ставили?
avatar
Для коллективных!)
avatar
можно где-то глянуть?
avatar
Могу скрин прислать! И что именно посмотреть хотите?
avatar
ну надо понять, что у вас именно не работает. Последняя версия с гитхаба? Я у себя проверял на всех видах топиков. Везде работало.
avatar
Тоже взял последнюю версию с хаба, сейчас на другом проекте попробую есть подозрение, что с хостингом что то!
avatar
На другом стоит ЛС 1.0, обновлять пока не буду)
avatar
Поставил на другом сайте отображается, странно? Но почему то основным тэгом ставиться css display:none! Посмотрел на основном там этого поле нет!)
avatar
Нашел проблему была в ошибке в header.tpl, но проблема в том что поле Tags скрывается осталась!
avatar
по умолчанию я пока сделал, что поле теги убирается, когда есть другие. Надо и те и те?
avatar
Да будет хорошо если подскажите в каком файлике поменять!)
avatar
Нужны и те и те теги, как сделать? А за плагин мерси, очень классная работа.
avatar
Можно ли будет с этим плагином сделать новый тип топика, и добавить разные поля расширенных тегов в эти топики?
avatar
avatar
смотря как его будете делать. Вообще да. Только пока надо в вашем экшене (я думаю с обновлением LS, это устранится):
protected function checkTopicFields($oTopic) {

поменять на
protected function checkTopicFields($oTopic) {
        if ($aTagGroups = $this->PluginTagextender_Tagextender_GetTagGroups($oTopic->getType(),$oTopic->getBlogId())) {
            $oTopic->setTagsGrouped(array_intersect_key((array)getRequest('topic_tags_grouped'),$aTagGroups));
        }
avatar
Не переходит по тэгу выкидывает ошибку
Fatal error: Class 'PluginTagextender_Inherit_ModuleTopic' not found in /classes/modules/topic/Topic.class.php on line 3
avatar
PluginTagextender.class.php последней версии?
avatar
Да
avatar
попробуйте кеш скинуть что ли
avatar
попробуйте что ли кеш скинуть
avatar
Кэш не помог( Но ошибка возникает при активации совместно с плагином NiceUrl!
avatar
ну вообще вместе с ним и тестировался
avatar
Отключил все плагины, переход по тэгам работает! Включаю NiceUrl выкидывает ошибку(
avatar
Формат топиков Фотосет!
avatar
вроде удалось воспроизвести
avatar
)))
avatar
обновитесь
avatar
Да все ок работает!!!
Буду отписыватьсяЙ
Еще раз спасибо за плагин!
avatar
Нашел не совсем нужную вещь, как оказалось страницы дублируются, например:
сайт/tag/grouptag/nametag и сайт/tag/nametag одинаковые!!!!!!
Можно это как то устранить??
avatar
можно
avatar
А как подскажите?
avatar
rel=«canonical»
avatar
обновитесь
avatar
Обновился но не совсем так лучше как мне кажется совсем убрать grouptag из урла!?
avatar
в урле tag/keyword/nametag
Сам поиск тега идет только по группе тегов keyword.
Если убрать из урла keyword, тогда пропадет смысл вообще их делить по группам.
avatar
Как вернуть дубляж обратно?
avatar
kpoxas, подскажите, пожалуйста, плагин поддерживает все стандартные типы топиков (текст, фотосет, ссылка, опрос)?
avatar
да, поддерживает
avatar
Баг (?)

Создал группы тегов, например, SampleGroup1, SampleGroup2.
Создаю топик. Добавляю в каждую группу свои теги.

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

ИМХО, либо исключать группированные теги из общего облака тегов, либо /tag/SampleGroup1/groupTestTag1/ должен быть синонимом к /tag/groupTestTag1/
иначе пользователи придут в замешательство.
avatar
скорее вынести в конфиг оба варианта, тут неоднозначно.
avatar
Да, наверное так будет более гибко. Но в любом случае, в главном облаке не должно присутствовать тегов, при клике на которые будет выдан пустой результат (как сейчас).

Заметил еще особенность — после деактивации плагина, тег в главном облаке становится кликабельным с результатом, т.е., по нему происходит результативная выборка. Но, в теле топика этот тег отображается как Теги: нет
avatar
это потому что теги остаются в базе. В плагине переопределялся метод, который вытаскивал родные теги без группироанных. Когда плагин отключается, то он тащатся все теги.
avatar
в принципе можно при деактивации их убивать, а при активации вновь вытаскивать из topic_extra
avatar
Возможно, пользователю захочется сделать облако только по определенной группе
avatar
Столкнулся с проблемой при активации плагина не работает пейджинг?
avatar
Решилась ли проблема с навигацией??
avatar
обновитесь
avatar
Спасибо, тестирую)
avatar
Как сделать, чтобы /tag/grouptag/nametag и сайт/tag/nametag были синонимами и дублировали друг друга? Буду признателен за ответ.
avatar
Сейчас можно найти в папке плагина файл Topic.class.php и там закомменить функцию:

public function GetTopicsByTag($sTag,$iPage,$iPerPage,$bAddAccessible=true) {
        $aFilter = array(
            'tag' => $sTag,
            'group_id' => 0
        );
        return $this->GetTopicsByTagFilter($aFilter,$iPage,$iPerPage,$bAddAccessible);
    }
avatar
Здравствуйте. В настройках плагина не отображаются некоторые слова.

После интуитивного добавления новой категории, пишет:
Warning: array_values() expects parameter 1 to be array, null given in Z:\home\test-site.ru\www\plugins\Tagextender\classes\actions\ActionAdmin.class.php on line 109

Ошибка: Поля NOT_FOUND_LANG_TEXT неверное

Версия php 5.3.13
Шаблон synio

Плагин для livestreet

Плагин для livestreet
avatar
aceadminpanel стоит?
avatar
Нет, а он нужен?
avatar
Выдает ошибку
avatar
Уф, и не удалишь
Fatal error: Class 'PluginTagextender' not found in /home/muldy/data/www/ihdwallpaper.net/engine/classes/Engine.class.php

вот ошибка. LS 1.0.3
avatar
на какой странице?
кеш сбрасывали?
avatar
На всех — вылезает ещё до подгрузки чего бы то ни было, судя по всему какой-то проверщик падает или около того
кеш не сбрасывал, но тут мне помощь пригодится — только поставил ЛС, разбираюсь пока что)
avatar
вы просто активировали плагин, и сразу вылезла эта ошибка?
avatar
Да, сразу при активации
avatar
пока не могу воспроизвести у себя, если вы дадите временный доступ к сайту, то могу посмотреть
avatar
Доступ какого формата?..
К слову, эффект повторяется
Fatal error: Class 'PluginTagextender' not found in %link%/engine/classes/Engine.class.php on line 472
Там вот это:
protected function LoadPlugins() {
if($aPluginList = func_list_plugins()) {
foreach ($aPluginList as $sPluginName) {
$sClassName='Plugin'.func_camelize($sPluginName);
$oPlugin=new $sClassName;
$oPlugin->Delegate();
$this->aPlugins[$sPluginName]=$oPlugin;
}
}
}
avatar
в каком файле название?
avatar
доступ по ftp и ссылку на сайт, хотя бы ссылку в лс киньте с доступом юзера, который может создавать топики с тегами
avatar
Решил проблему, к слову, название класса без заглавной первой буквы.
первую проверку он проходит, а вот при создании класса начинает быть чувствительным.

Советую разве что перепаковать для дураков как я :-D
avatar
Теперь
Warning: Invalid argument supplied for foreach() in %link%/docs/plugins/tagextender/classes/modules/topic/entity/Topic.entity.class.php on line 130

Warning: Cannot modify header information — headers already sent by (output started at %link%/docs/plugins/tagextender/classes/modules/topic/entity/Topic.entity.class.php:130) in %link%/docs/engine/include/function.php on line 234

Warning: Cannot modify header information — headers already sent by (output started at %link%/docs/plugins/tagextender/classes/modules/topic/entity/Topic.entity.class.php:130) in %link%/docs/engine/include/function.php on line 235
avatar
вставьте перед foreach(… на 130 строчке

if (!empty($aTagGroups)) return $result;
avatar
if (empty($aTagGroups)) return $result;
avatar
надо без восклицательного знака
avatar
Думал, что есть более хитрые решения)
Окей, займусь.

Если ещё найду подобных вещей сообщать?
avatar
так а что с буквой заглавной?
avatar
Когда папка называется Tagextender он класс не обрататывает, ибо ждет «tagextender». минорная бага при запаковывании контента гитом
avatar
да, папка должна быть со строчной буквы
avatar
Алсо, не отображается выбор контента и я подозреваю, что ровно из-за этого случилась бага с foreach; там не было проставлено «можно не заполнять»
несовсем понятно
avatar
При создании топика группа тегов не появляется.
Сейчас сбрасываю кэш для проверки
avatar
Заработало. aceAdminPanel каким-то образом мешает ему
avatar
у меня с aceadmin нормально. Возможно какие-то warning или notice выбиваются в ajax response. Посмотрите через firebug
avatar
Алсо, не отображается выбор контента и я подозреваю, что ровно из-за этого случилась бага с foreach; там не было проставлено «можно не заполнять»
avatar
PS — имя сайта в ошибке можно игнорировать, воспользовался чужой отсюда же у кого она случилась)
avatar
Вопрос: Что будет, если групп будет 5 и больше
нет ли настройки убрать под динамический кат их?.. а если нет, куда стоит лезть добавлять кусок кода?
avatar
Ну просто будут пустые. Там же можно назначить к блогам и типам топиков
avatar
я не совсем про то:
допустим есть 10 категорий. это длинный столбец даже без заполненности. они уберутся под какой-нибудь скрытый div или это добавить — а если да, то куда смотреть?
avatar
имеется в виду в форме?
ну можно в шаблоне inject.topic.form.tpl скрыть их и сделать toggle по клику.
avatar
спасибо
элемент нужен будет почти статический, не проблема добавить должно быть
avatar
в inject.topic.tags.tpl можно менять вывод
если хотите не все теги выводить, то можно так:

{assign var='aTagGroups' value=$oTopic->getTagGroups()}
{if $aTagGroups}
<div class="topic-content-tags">
    {if $bTopicList}
        {assign var='aTagsGroupedArray' value=$oTopic->getTagsByKeywords('country,genre,year,lang,translat')}
    {else}        
        {* все группы тегов *}
        {assign var='aTagsGroupedArray' value=$oTopic->getTagsGroupedArray()}
    {/if}
    {foreach $aTagsGroupedArray as $aTags}
        {assign var='oTagGroup' value=$aTagGroups[$aTags@key]}
        {if !$oTagGroup}{break}{/if}

        <ul class="topic-tags">
            <li>{$oTagGroup->name}:</li>
            {strip}
                {foreach $aTags as $sTag}
                    <li>{if !$sTag@first}, {/if}<a href="{router page='tag'}{$sTag|escape:'url'}/">{$sTag|escape:'html'}</a></li>
                {/foreach}
            {/strip}
        </ul>
    {/foreach}
</div>
{/if}
avatar
Спасибо! Справился бы, пожалуй, но всегда приятно от создателя патч получить.

Займусь вставкой
avatar
что с aceadmin, никаких ошибок не вываливает?
avatar
ошибок нет, просто перестает нормально работать
хз, я без сожалений ейсадмина отключил, не так нужен
avatar
возможно js ошибка при aceadmin.
avatar
мей би, но не хочу в него лазать, он не настолько нужен
avatar
Повторю (пардон):
В какой части плагина можно настроить вывод стандартного облака тегов _Вместе_ с группированными?
avatar
Обновил на гитхабе. Вынес эту настройку в конфиг.
avatar
much appreciated
avatar
Посмотрел как применяется настройка — я пытался так сделать и оно не сработало ни тогда ни сейчас. Плагин перезапускал, кэш сбрасывал — что ещё может быть?
avatar
возможно js файлы закешились. Взглянуть на сайт можно?
avatar
themultiverse.ru
а они кешируются где-то ещё?
avatar
могут кешироваться, если у вас js сжато
напишите мне в лс админский доступ
avatar
Поиск по группам выдает ошибку 404 если тег с пробелом. решаемо?
avatar
не должно, там стандартный поиск
avatar
какая ссылка получается при поиске?
avatar
разобрался. помеха состояла в подчеркивании в названии группы тегов. можно посмотреть в это)

к слову, не видели нигде плагин поиска по нескольким тегам? нигде не вижу О_о
avatar
не совсем понял, о чем идет речь про помеху.

В данном виде поиск по нескольким тегам будет усложнять запрос. Придется таблицу тегов джоинить столько раз, сколько тегов используется (если нужно, чтобы они одновременно присутствовали в топике)
avatar
В любом виде — это было не по теме)
И это печалит — хотелось бы реализовать хотя бы вложенные, если не одновременные
avatar
«ИЛИ» легко реализовать. «И» Сложнее

Вот смотрите пример

То что слева фильтры — то ИЛИ. А сверху удобства с множественным выбором — И
avatar
Я вкурсе примерно, вопрос о готовых решениях любого класса)
avatar
Не знаю, как это должно выглядеть в макете. Реализовать в принципе не так уж долго
avatar
если смешанные запросы можно ограничить 3-4 (или вынести проверку в настройки) и поставить разделитель-запятую… отдельный поиск по тегам, может быть, чтобы не мешать стандартному лишней проверкой запятых… как-то так, я думаю.
хороший повод мне выучить принцип работы плагинов лайвстрита, я считаю)) раз уж такого нет
avatar
ну а вот как их несколько выбрать?
avatar
topic_tags tags separated by a comma
Они там лежат строкой, можно безо всяких юнионов делать IF topic_tags LIKE %tagname% AND topic_tags LIKE %tag2name%
avatar
тогда не будут работать индексы, будет тормозить запрос. Лучше тянуть из таблицы topic_tags
avatar
как их вытянуть, я знаю, а как их выбирать при поиске в макете самом?
avatar
как-то выбирать их в отдельное поле, а потом искать по нажатию кнопки
avatar
макет либо добавить новый либо поставить галочку «по тегам», которая будет включать запятую как разбиватель.

тогда и с индексами проблем особых не должно быть, но может быть вытяжка из topic_tag вполне хорошая идея, получишь айдишники постов.
avatar
Подскажите, можно ли сделать так чтобы пользователь выбирал из выпадающего списка предопределенные заранее теги?
avatar
предопределенные для чего?
avatar
Например, при наведении на «Жанр фильма» — мы видим список жанров и выбираем из них. Это поможет избежать ошибок (напр., «камедия»).
Т.е. в идеале иметь в конфиге ещё две настройки:
— Теги выбираются из предопределенного списка (on/off)
— Задать список предопределенных тегов
avatar
Еще предложение — на дату навесить календарик. Т.е. в редактировании группы тегов добавить выбор типа:
— Дата
— Текстовый
— Предопределенный список

В свойства предопределенного списка
— Разрешить мультивыбор
— Макс. кол-во выбираемых тегов
avatar
Ну уж чтобы такое развесистое было, то есть плагин TopicCCK
Про выбор из списка подумаю, нужен множественный выбор
avatar
тут сам механизм тегов такой же, просто они разбиты по группам.
avatar
Подскажите пожалуйста можно ли использовать плагин на рабочем проекте?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.