Модуль ссtags под Друпал 7

Главные вкладки

Аватар пользователя olk olk 21 июня 2011 в 16:59

cctags

На днях перевел свой модуль cctags с шестой версии на седьмую.
Сctags – это альтернатива широко известного модуля tagedelic. Т.е. модуль формирует блок и/или страницу облака тэгов таксономии с атрибутом (классом) зависящим от частоты употребления данного термина в опубликованных нодах.
В чем преимущество данного модуля перед tagedelic.

Tagedelic – формирует ровно столько блоков (и страниц) сколько определено словарей в вашей системе причем не позволяет смешивать словари, т.е. один словарь – одно облако.
В модуле Cctags мы имеем:
Гибкие настройки и расширенные возможности по темизации вывода облака (отдельные файлы шаблонов для тэгов, названия словаря, страницы облака).
Возможность (через настройки включать несколько словарей (а для словарей с древовидной структурой - кроме этого включать/выключать нужный уровень)) вывода тэгов.
Автоматическая генерация нужного количества блоков и/или страниц.
Помимо этого вы можете сформировать практически одинаковые по содержанию блоки и разместить их в разных регионах для разных страниц сайта.

Концепция модуля Cctags основана на понятии элемента cctags.
Элемент cctags – это совокупность настроек для отображения одного блока и/или страницы терминов.
Вы можете добавить необходимое количество элементов и настроить каждый из них отдельно, причем разные элементы могут содержать один и тот же словарь или словари в любой комбинации.

Отличия модуля от версии для Друпал 6.
Убран не характерный и малоиспользуемый для данного модуля функционал:
1. Построение блока и страницы облака пользователей.
2. Построение блока материалов по связанным терминам.
3. Очистка словарей от не используемых терминов.
Проведена работа по совместимости кода модуля с версией PHP >= 5.3

Сам модуль можно пока взять тут (см. прикрепленный файл), чуть позже дев версия появится на д.о.

Комментарии

Аватар пользователя olk olk 21 июня 2011 в 19:56

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

Аватар пользователя Valeratal Valeratal 21 июня 2011 в 20:01

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

Аватар пользователя Valeratal Valeratal 22 июня 2011 в 14:42

я немного побагрепорчу

у меня чего то не заработало

PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ct.page_extra_class' in 'field list': SELECT ct.cctid AS cctid, ct.name AS name, ct.block AS block, ct.block_name AS block_name, ct.page AS page, ct.page_title AS page_title, ct.page_path AS page_path, ct.page_level AS page_level, ct.page_amount AS page_amount, ct.page_sort AS page_sort, ct.page_mode AS page_mode, ct.page_vocname AS page_vocname, ct.page_extra_class AS page_extra_class, ct.item_data AS item_data FROM {cctags} ct; Array ( ) в функции _cctags_get_settings() (строка 409 в файле /sites/all/modules/cctags/cctags.module).

Аватар пользователя olk olk 22 июня 2011 в 15:25

"Valeratal" wrote:

я немного побагрепорчу

у меня чего то не заработало


Если брали сначала у меня на сайте а потом с др.орг.
То надо отключить модуль, удалить модуль и включить его по новой (что бы пере создалась табличка cctags в базе).
Просто не стал заморачиватся с хуком update а просто немного изменил структуру таблицы.

Аватар пользователя olk olk 22 июня 2011 в 17:58

"Valeratal" wrote:
не, сразу закачал с орга (это же 7-ка)

Странно скачал сейчас с д.о. поставил вроде все ок. Случайно не переводил сайт с 6-ки (на которой был установлен cctags-6.x) на 7-ку ?
В этом случае надо все же сделать как я написал в предыдущем комменте «надо отключить модуль, удалить модуль и включить его по новой (что бы пере создалась табличка cctags в базе).»

Аватар пользователя fr1end fr1end 24 июня 2011 в 20:56

Небольшую описку нашёл в форме управления
«Разрешить формирование юлока для данного элемента cctags».
Прикольный модуль. НА Прошлой неделе только искал аналог tagedelic, но не нашёл
Спасибо за вашу работу!

Аватар пользователя Koza4ok Koza4ok 25 июня 2011 в 0:59

http://www.avtostrahovanie-russia.ru/content/kia-vyvela-na-rossiiskii-rynok-novyi-avtomobil-picanto - новый автомобиль Picanto
http://www.biznes-hroniki.ru/content/nalogovye-vyplaty-ooo - налоговые выплаты ООО
http://www.dorogi-rossii.ru/content/stroitelstvo-dorog-v-rossii - дорожное строительство сегодня
http://www.stroinay.ru/content/pyat-zapretov-dlya-vashei-krasoty - 5 запретов для вашей красоты
http://www.tehnoblogger.ru/2011/05/v-izraile-sozdali-letayushhie-avtomobili - летающие автомобили
http://www.neotext09.ru - заработок на статьях
http://www.h20-serial.ru - H2O просто добавь воды
http://www.xponika.info/vzlom-seti-senata-ssha - Сенат США атакован
http://www.marketing-blogs.ru - маркетинг и реклама в России
http://www.greek-serial.ru/2010/08/universitet - Университет сериал MTV

Аватар пользователя Koza4ok Koza4ok 25 июня 2011 в 0:59

http://www.glomerulonefritanet.ru - гломерулонефрит
http://www.trihomoniazanet.ru/2011/06/epidermis - эпидермис
http://www.biznes-war.ru - бизнес войны сегодня
http://www.hlamidizios.ru - мединские новости в России и мире
http://www.investments-money.ru - куда лучше всего инвестировать деньги
http://www.oknapvhrussia.ru/content/metalloplastik-okna - металлопластиковые окна
http://www.seothebest.ru - свежие новости
http://www.elektrogrili-russia.ru - электрические грили в России
http://www.allinforus.ru - новости в мире и стране
http://www.lipstroi.ru/alyuminievye-konstrukcii-v-vashem-dome - алюминиевые конструкции

Аватар пользователя Valeratal Valeratal 25 июня 2011 в 12:26

поставил таки модуль
но, что то не разобрался, как сделать обычное классическое облако (что указывать в правилах сортировки)

Аватар пользователя Dan Dan 25 июня 2011 в 14:08

"olk" wrote:
Tagedelic – формирует ровно столько блоков (и страниц) сколько определено словарей в вашей системе причем не позволяет смешивать словари, т.е. один словарь – одно облако.

Позволяет, правда только через АПИ. Остальных плюшек в тагаделике нет.
Может лучше было расширить функционал тагаделика?

Аватар пользователя olk olk 27 июня 2011 в 11:15

Сьюз wrote:
а у меня cctags так и не ставится - выдает ошибку, мол, проблемы с сервером. Эх..

Я так понимаю вы ставили под 6.х , посмотрите у вас хоть один словарь таксономии определен ?

Аватар пользователя olk olk 27 июня 2011 в 11:15

"Valeratal" wrote:

поставил таки модуль
но, что то не разобрался, как сделать обычное классическое облако (что указывать в правилах сортировки)


Я обычно оставляю умолчание - «по наименованию в порядке возрастания» - но это дело вкуса Smile

Аватар пользователя vb vb 30 июля 2011 в 17:51

Поставил сабж под php5.3 на D7 сразу получил предупреждения

Deprecated function: Call-time pass-by-reference has been deprecated in _theme_process_registry() (line 413 of /home/vb/websites/drupal7.com/includes/theme.inc).
Deprecated function: Call-time pass-by-reference has been deprecated in menu_execute_active_handler() (line 501 of /home/vb/websites/drupal7.com/includes/menu.inc)

Офф issue здесь
http://drupal.org/node/1234358
Работает вроде, но грустно это каждый раз наблюдать.

Аватар пользователя sumerokr sumerokr 30 июля 2011 в 19:23

вчера только поставил себе на д7 php 5.2.xx
выдало какое-то предупреждение тоже.. очистил кэш, дернул крон. больше предупреждений не видел, настроил все за минуту, интуитивно.
отличная штука, спасибо автору!

Аватар пользователя Dan Dan 30 июля 2011 в 19:43

Бегло глянул модуль.
Попробуйте заменить строки:
182: function cctags_invoke_cctags_term_count(&$term)
614: function template_preprocess_cctags_term(&$variables)
на
function cctags_invoke_cctags_term_count($term)
function template_preprocess_cctags_term($variables)

Если проканает, сделайте патч и прикрепите к issue.

Аватар пользователя vb vb 31 июля 2011 в 14:21

нет, не это.
баг оказался в файле cctags.admin.inc
там надо убрать амперсанд в двух строчках 248 и 251

cctags_settings_item_validate($form, $form_state);

ну посмотрим, может автор сам поправит,
ну а если не поправит, то поможем.

в модуле ещё желательно отступы поправить и некоторые отступления от стандартов кодирования, руки чешутся.

Аватар пользователя olk olk 2 августа 2011 в 7:54

Извиняюсь, что не реагировал на замечания. Был в отпуске, а там инет в гостинице вообще никакой Sad т.е. он как бы есть, но реально что то написать или сделать вообще труба Smile Сейчас немного отойду от отпуска и все поправлю ...

Аватар пользователя T-34 T-34 12 августа 2011 в 7:19

Попробовал модуль (6.x-1.6) на словаре с ~1500 тегами.
Для страницы установил 10 уровней шрифтов - все отображается ок (так же, как у Tagadelic). Но в блоке при выводе 32 тегов (или другого количества) и любом количестве уровней все теги получаются практически одинакового размера. Проблема в том, что для блока используются те же уровни, что и для страницы, но количество тегов на странице и в блоке не сопоставимо, поэтому для блока нужно считать количество уровней отдельно (как в tagadelic).

Аватар пользователя Valeratal Valeratal 12 августа 2011 в 9:01

кстати, что насчет кэширования?
Имхо ведь пересчитывать веса при каждой загрузке ноды (не знаю как сейчас)

Вообще, настройку бы. Пересчитывать веса раз в сутки (или другие варианты)

Аватар пользователя olk olk 15 августа 2011 в 9:43

"T-34" wrote:
Попробовал модуль (6.x-1.6) на словаре с ~1500 тегами.
Для страницы установил 10 уровней шрифтов - все отображается ок (так же, как у Tagadelic). Но в блоке при выводе 32 тегов (или другого количества) и любом количестве уровней все теги получаются практически одинакового размера. Проблема в том, что для блока используются те же уровни, что и для страницы, но количество тегов на странице и в блоке не сопоставимо, поэтому для блока нужно считать количество уровней отдельно (как в tagadelic).

Вообще-то блок настраивается отдельно (в том числе и количество уровней шрифта) - настройка производиться непосредственно в блоке
"Valeratal" wrote:

кстати, что насчет кэширования?
Имхо ведь пересчитывать веса при каждой загрузке ноды (не знаю как сейчас)

Вообще, настройку бы. Пересчитывать веса раз в сутки (или другие варианты)


Кэширование конечно есть, в 6 версии кэш сбрасывается на хуке hook_taxonomy (op == insert|delete|update), в 7-ке при на хуках hook_taxonomy_term_{update|delete|insert}

Аватар пользователя T-34 T-34 16 августа 2011 в 3:28

"olk" wrote:
Вообще-то блок настраивается отдельно (в том числе и количество уровней шрифта) - настройка производиться непосредственно в блоке

Да, я знаю. Поставил 10 уровней и 20 тегов, вот результат: http://dl.dropbox.com/u/5556131/tags.png
Смотрю css-классы тегов в блоке - у всех от level-8 до level-10, хотя по идее должны быть от level-1 до level-10. Это только в блоке, на странице с тегами (где их около 1500) все правильно.

Аватар пользователя olk olk 16 августа 2011 в 9:37

"T-34" wrote:
Да, я знаю. Поставил 10 уровней и 20 тегов, вот результат: http://dl.dropbox.com/u/5556131/tags.png
Смотрю css-классы тегов в блоке - у всех от level-8 до level-10, хотя по идее должны быть от level-1 до level-10. Это только в блоке, на странице с тегами (где их около 1500) все правильно.

А понятно Smile Есть в шестерки такой баг (вернее логическая ошибка алгоритма)
Можно пропатчить немного
в файле cctags.module закомментировать строку 549, вроде должно помочь
<?php     $terms cctags_sort_tags($terms'level,desc''mixed');?>

Аватар пользователя olk olk 25 августа 2011 в 13:57

Обновил версию на d.o , текущая версия будет 7.x-1.5 (перепрыгнул через несколько миноров, так как до сих пор не могу по настоящему подружиться с Git).
Исправлены несколько небольших ошибок.
Изменен алгоритм формирования блока:
Теперь все тэги участвующие в элементе сначала сортируются по "весу" в убывающем порядке,
затем массив обрезается до размера облака в блоке и в конце вес этому "срезу" присваивается по новой.
В результате получаем более информативное облако в блоке.

Аватар пользователя Valeratal Valeratal 27 августа 2011 в 9:21

2 вопроса возникло
1. Как отредактировать количество уровней и количество тегов для блока с облаком (для страницы вроде есть, для блока не вижу)
2. По странице с тегами. Хм, хотел вывести 100 популярных. Можно вывести все, но по 100 на странице. Может, сделать

Аватар пользователя olk olk 27 августа 2011 в 10:32

"Valeratal" wrote:

2 вопроса возникло
1. Как отредактировать количество уровней и количество тегов для блока с облаком (для страницы вроде есть, для блока не вижу)
2. По странице с тегами. Хм, хотел вывести 100 популярных. Можно вывести все, но по 100 на странице. Может, сделать


1. Настраивается непосредственно в блоке (admin/structure/block)
2. Надо подумать, в принципе как фичу можно и сделать - а с другой стороны, что мешает сделать блок со 100 терминами и вывести его на страницу

Аватар пользователя Valeratal Valeratal 27 августа 2011 в 11:46

1. Спасибо, нашел. (можно имхо сделать небольшую подсказку в админке элемента cctag)
2. В принципе сделать можно отдельным блоком.
Но, у меня выводилось 100 тегов раньше сниппетом, прямо в ноде

Блоком чем хуже:
1. Как приделать ссылку из другого блока на ноду, где это блок?
2. Расположить блок нужно будет с условием отображения по сути только по одному адресу той ноды. Имхо, нагружать "отображатор" друпала ради одной ноды...

Аватар пользователя Artu Artu 9 ноября 2012 в 3:54

Ошибка

Notice: Undefined index: level в функции cctags_settings_item() (строка 142 в файле /home/uxxxx/domains/xxx.com.ua/sites/all/modules/cctags/cctags.admin.inc).
Выберите хотя бы один словарь и уровень терминов в нем.

Невозможно выбрать уровень терминов.