0 Пользователей и 1 Гость просматривают эту тему.
  • 19 Ответов
  • 2343 Просмотров
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
Дано: сайт с огромным количеством категорий, сотни и сотни.

Проблема: При сотнях категорий доступных для комментирования, дойдя до определённого момента, становится невозможно добавить ещё категорий - настройки просто не сохраняются. Гипотеза - превышение максимального допустимого кол-ва инфы в значении для enable_categories.

Вопрос: сколько данных можно теоретически хранить в поле для enable_categories и в какое практическое число категорий это переводится?
« Последнее редактирование: 24.10.2012, 11:26:18 от smart »
*

smart

  • Администратор
  • 6485
  • 1315 / 15
  • Хочешь сделать хорошо — сделай!
Тип поля для хранения значения - TEXT, а значит в него поместится 65535 символов. Это очень много. Ну к примеру - 9 однозначных, 99 двузначных, 999 трехзначных это 3024 символа + 1106 запятых (как разделитель), итого, для хранения информации о 1107 категориях нужно всего 4131 символа. А в поле можно впихнуть раз в 10 больше.

Другой вопрос - а зачем так много категорий? И может быть стоит предусмотреть настройку - Все категории?
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
Значит, моя гипотеза неправильна. Это хорошо. Просто когда человек включал все категории тем скриптом, который вы мне давеча написали, то у него первые по списку категории включились, а последние - нет. При попытке добавить ещё категорий в настройках - настройки не сохраняются.

Другой вопрос - а зачем так много категорий?
Я, конечно, посоветовал этот список реорганизовать на предмет сокращения, но не знаю на сколько это возможно - сайт живой.

И может быть стоит предусмотреть настройку - Все категории?
Все, кроме "Uncategorized". Думаю, что это хорошая идея. Для определённого контингента это вполне уместно, плюс не надо будет бегать в настройки для включения новых категорий.
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
А как насчёт такой идеи: значение для jtxf=JCommentsSaveSettingsAjax&jtx64=
становится слишком большим и не передаётся полностью через POST?
Я так подумал потому, что у меня посередине этого значения вылазит такое предупреждение:
... FireBug request size limit has been reached by FireBug. ...

Для справки, на сайте 530 секций и свыше 5300 категорий.
Через админку удаётся включить примерно одну пятую списка категорий, а дальше начинается Invalid Token.
*

smart

  • Администратор
  • 6485
  • 1315 / 15
  • Хочешь сделать хорошо — сделай!
А как насчёт такой идеи: значение для jtxf=JCommentsSaveSettingsAjax&jtx64=
становится слишком большим и не передаётся полностью через POST?
Вообще изначально я и объединил параметры и завернул их в base64, так как количество параметров было просто запредельное. Чтобы они не уместились в POST, данных должно быть больше тех же 65кб. С другой стороны, а вот если на том сайте в каком либо модуле выбрать ВСЕ категории - сохранятся параметры или нет?

Слушай, есть простое решение:
Код: sql
UPDATE `jos_jcomments_settings` SET `value` = '*' WHERE `name` = 'enable_categories';

Я что-то об этом забыл... Меня давно просил о подобном beliyadm и я это реализовал, а вот почему-то в настройки не вынес. Но в коде точно поддерживается:
Код: php
	/**
* Checks if comments are enabled for specified category
*
* @param  int $id Category ID
* @return boolean
*/
public static function checkCategory( $id )
{
$config = JCommentsFactory::getConfig();
$categories = $config->get('enable_categories', '');
$ids = explode(',', $categories);

return ($categories == '*' || ($categories != '' && in_array($id, $ids)));
}
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
Спасибо, буду пробовать.
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
Звёздочка работает прекрасно, надо бы только сделать для неё пользовательское взаимовоздействие.
Проблема ещё в том, что со звёздочкой ни одна из категорий не высвечивается, что обманчиво.
Предлагаю нечто такое:
*

Physicist

  • Глобальный модератор
  • 924
  • 186 / 0
  • Рябов Денис
Сергей, а ты сжимай параметры. Примерно так (это кусок из класса):
Код
	/**
* @var int gzip compression level (1-9, 1 is faster, 9 is smaller)
*/
public static $gzLevel = 9;

/**
* Compress and convert $str into url-safe format
* @static
* @param string $str
* @return string
*/
public static function encode($str)
{
$str = gzdeflate($str, self::$gzLevel);
$str = base64_encode($str);
$str = rtrim($str, '=');
$str = strtr($str, '+/', '-_'); // RFC 4648 'base64url' encoding
return $str;
}

/**
* Decode data encoded by encode method
* @static
* @param string $str
* @return string (or false on error)
*/
public static function decode($str)
{
$str = strtr($str, '-_', '+/');
$pad = strlen($str) % 4;
if($pad)
$str .= str_repeat('=', 4 - $pad);
$str = @base64_decode($str);
$str = @gzinflate($str);
return $str;
}
*

smart

  • Администратор
  • 6485
  • 1315 / 15
  • Хочешь сделать хорошо — сделай!
Сергей, а ты сжимай параметры
А как их сжать на JavaScript? Изначальная проблема в чем - на форме много элементов, я собираю их значения, пакую и заворачиваю в base64. Как завернуть в base64 на JS я знаю, а вот паковать не думал.

Но вопрос прежний - а в параметрах публикации модулей можно выбрать все 5000 категорий и все сохраняется без проблем?

p.s. По поводу выноса пункта Все категории в настройки - обязательно вынесу, нужно только решить вопрос с языковой константой для этого.
*

Physicist

  • Глобальный модератор
  • 924
  • 186 / 0
  • Рябов Денис
Можно использовать https://github.com/dankogai/js-deflate , но я не уверен насчет бинарной совместимости с php'шным gzdeflate.
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
p.s. По поводу выноса пункта Все категории в настройки - обязательно вынесу, нужно только решить вопрос с языковой константой для этого.
Чтобы этот момент облегчить, можно сделать-подругому.
Сейчас нарисую.

Вот, например, можно так.
Идея в том, что при выборе "Все категории", селектор затуманивается.
« Последнее редактирование: 02.11.2012, 21:29:35 от ABTOP »
*

smart

  • Администратор
  • 6485
  • 1315 / 15
  • Хочешь сделать хорошо — сделай!
Предложенный вариант наоборот усложняет - сейчас я просто воспользовался глобальной константой JOPTION_ALL_CATEGORIES и все, можно ничего не выдумывать, а для нарисованного варианта придется добавлять свою константу или автоматом корректировать JOPTION_ALL_CATEGORIES (просто во многих языках она имеет вид  "- Все категории -" и придется удалять "- ". А это не очень хорошо, точнее не очень предсказуемо).
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
не ну это просто вариант оформления, чо.
Я же не в курсах про технические детали....
Кстати, про константу, ползёт уведомление:

Notice: Use of undefined constant JOPTION_ALL_CATEGORIES - assumed 'JOPTION_ALL_CATEGORIES' in D:\xampp\htdocs\j16\administrator\components\com_jcomments\admin.jcomments.php on line 1067
*

smart

  • Администратор
  • 6485
  • 1315 / 15
  • Хочешь сделать хорошо — сделай!
Версия Joomla? Я проверял на 2.5, никаких ошибок нет.
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
Версия Joomla? Я проверял на 2.5, никаких ошибок нет.
Ошибка как на J1.7.5, так и на J2.5.7
Присутствует только в "Settings".

*

smart

  • Администратор
  • 6485
  • 1315 / 15
  • Хочешь сделать хорошо — сделай!
Судя по всему какие-то проблемы с языковыми файлами Joomla, ибо эта константа есть довольно давно и в 2.5.7 точно присутствует:

Языковая константа (/administrator/language/en-GB/en-GB.ini):
Код
JOPTION_ALL_CATEGORIES="- All Categories -"

Языковая константа (/administrator/language/ru-RU/ru-RU.ini):
Код
JOPTION_ALL_CATEGORIES="- Все категории -"

Скриншот (сделан в административной панели demo-j17.joomlatune.com):


*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
$option->text = JText::_('JOPTION_ALL_CATEGORIES');

С одинарными кавычками работает безошибочно.
*

smart

  • Администратор
  • 6485
  • 1315 / 15
  • Хочешь сделать хорошо — сделай!
Блин, а я там без кавычек написал? Сорри, исправлю. Моя вина...
*

ABTOP

  • Захожу иногда
  • 493
  • 33 / 4
Мелочи жизни.
Что же делать с поддержкой для J15? Там же этой константы нетути.
*

smart

  • Администратор
  • 6485
  • 1315 / 15
  • Хочешь сделать хорошо — сделай!
Что же делать с поддержкой для J15? Там же этой константы нетути.
Нет, точно так же как и в 1.0... Но мы же не можем бесконечно таскать за собой поддержку их? Не, эта небольшая доработка будет доступна только в 2.5. Плюс я планирую выпустить текущее обновление + еще возможно пару в линейке 2.3.х и на этом эту ветку завершить. В следующей ветке никакой поддержки 1.0 и 1.5 уже не будет, а все силы будут брошены на развитие поддержки 2.5 и 3.0.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

У Jcomments есть аналоги?

Автор ruslan13

Ответов: 6
Просмотров: 584
Последний ответ 18.05.2018, 11:42:27
от ruslan13
Как вывести количество комментариев в макете Tree Jcomments?

Автор romagromov

Ответов: 4
Просмотров: 748
Последний ответ 13.04.2016, 12:03:53
от romagromov
Ограничение отображения коммента по количеству символов или кнопка "Показать комментарий полностью"

Автор viteg

Ответов: 0
Просмотров: 528
Последний ответ 02.12.2015, 02:30:48
от viteg
Ограничение древовидного списка комментариев

Автор hazyin

Ответов: 2
Просмотров: 623
Последний ответ 18.08.2014, 17:53:09
от hazyin
Установил Jcomments 2.3 - нет нужных категорий

Автор sashavi

Ответов: 1
Просмотров: 590
Последний ответ 17.05.2014, 03:22:20
от sashavi