ABTOP
JComments Tester
Репутация: +32/-4
Offline
Пол: 
Сообщений: 565
|
 |
« : 24.10.2012, 07:03:58 » |
|
Дано: сайт с огромным количеством категорий, сотни и сотни.
Проблема: При сотнях категорий доступных для комментирования, дойдя до определённого момента, становится невозможно добавить ещё категорий - настройки просто не сохраняются. Гипотеза - превышение максимального допустимого кол-ва инфы в значении для enable_categories.
Вопрос: сколько данных можно теоретически хранить в поле для enable_categories и в какое практическое число категорий это переводится?
|
|
|
|
« Последнее редактирование: 24.10.2012, 11:26:18 от smart »
|
Записан
|
|
|
|
|
smart
|
 |
« Ответ #1 : 24.10.2012, 11:25:43 » |
|
Тип поля для хранения значения - TEXT, а значит в него поместится 65535 символов. Это очень много. Ну к примеру - 9 однозначных, 99 двузначных, 999 трехзначных это 3024 символа + 1106 запятых (как разделитель), итого, для хранения информации о 1107 категориях нужно всего 4131 символа. А в поле можно впихнуть раз в 10 больше.
Другой вопрос - а зачем так много категорий? И может быть стоит предусмотреть настройку - Все категории?
|
|
|
|
|
Записан
|
|
|
|
ABTOP
JComments Tester
Репутация: +32/-4
Offline
Пол: 
Сообщений: 565
|
 |
« Ответ #2 : 24.10.2012, 12:01:07 » |
|
Значит, моя гипотеза неправильна. Это хорошо. Просто когда человек включал все категории тем скриптом, который вы мне давеча написали, то у него первые по списку категории включились, а последние - нет. При попытке добавить ещё категорий в настройках - настройки не сохраняются. Другой вопрос - а зачем так много категорий?
Я, конечно, посоветовал этот список реорганизовать на предмет сокращения, но не знаю на сколько это возможно - сайт живой. И может быть стоит предусмотреть настройку - Все категории?
Все, кроме "Uncategorized". Думаю, что это хорошая идея. Для определённого контингента это вполне уместно, плюс не надо будет бегать в настройки для включения новых категорий.
|
|
|
|
|
Записан
|
|
|
|
ABTOP
JComments Tester
Репутация: +32/-4
Offline
Пол: 
Сообщений: 565
|
 |
« Ответ #3 : 27.10.2012, 11:40:58 » |
|
А как насчёт такой идеи: значение для jtxf=JCommentsSaveSettingsAjax&jtx64= становится слишком большим и не передаётся полностью через POST? Я так подумал потому, что у меня посередине этого значения вылазит такое предупреждение: ... FireBug request size limit has been reached by FireBug. ... Для справки, на сайте 530 секций и свыше 5300 категорий. Через админку удаётся включить примерно одну пятую списка категорий, а дальше начинается Invalid Token.
|
|
|
|
|
Записан
|
|
|
|
|
smart
|
 |
« Ответ #4 : 29.10.2012, 11:23:53 » |
|
А как насчёт такой идеи: значение для jtxf=JCommentsSaveSettingsAjax&jtx64= становится слишком большим и не передаётся полностью через POST? Вообще изначально я и объединил параметры и завернул их в base64, так как количество параметров было просто запредельное. Чтобы они не уместились в POST, данных должно быть больше тех же 65кб. С другой стороны, а вот если на том сайте в каком либо модуле выбрать ВСЕ категории - сохранятся параметры или нет? Слушай, есть простое решение: UPDATE `jos_jcomments_settings` SET `value` = '*' WHERE `name` = 'enable_categories'; Я что-то об этом забыл... Меня давно просил о подобном beliyadm и я это реализовал, а вот почему-то в настройки не вынес. Но в коде точно поддерживается: /** * 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
JComments Tester
Репутация: +32/-4
Offline
Пол: 
Сообщений: 565
|
 |
« Ответ #5 : 29.10.2012, 11:37:23 » |
|
Спасибо, буду пробовать.
|
|
|
|
|
Записан
|
|
|
|
ABTOP
JComments Tester
Репутация: +32/-4
Offline
Пол: 
Сообщений: 565
|
 |
« Ответ #6 : 02.11.2012, 11:39:51 » |
|
Звёздочка работает прекрасно, надо бы только сделать для неё пользовательское взаимовоздействие. Проблема ещё в том, что со звёздочкой ни одна из категорий не высвечивается, что обманчиво. Предлагаю нечто такое: 
|
|
|
|
|
Записан
|
|
|
|
Physicist
Support Team
   
Репутация: +182/-0
Offline
Пол: 
Сообщений: 1010
Рябов Денис
|
 |
« Ответ #7 : 02.11.2012, 12:38:43 » |
|
Сергей, а ты сжимай параметры. Примерно так (это кусок из класса): /** * @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
|
 |
« Ответ #8 : 02.11.2012, 12:43:04 » |
|
Сергей, а ты сжимай параметры А как их сжать на JavaScript? Изначальная проблема в чем - на форме много элементов, я собираю их значения, пакую и заворачиваю в base64. Как завернуть в base64 на JS я знаю, а вот паковать не думал. Но вопрос прежний - а в параметрах публикации модулей можно выбрать все 5000 категорий и все сохраняется без проблем? p.s. По поводу выноса пункта Все категории в настройки - обязательно вынесу, нужно только решить вопрос с языковой константой для этого.
|
|
|
|
|
Записан
|
|
|
|
Physicist
Support Team
   
Репутация: +182/-0
Offline
Пол: 
Сообщений: 1010
Рябов Денис
|
 |
« Ответ #9 : 02.11.2012, 12:52:17 » |
|
Можно использовать https://github.com/dankogai/js-deflate , но я не уверен насчет бинарной совместимости с php'шным gzdeflate.
|
|
|
|
|
Записан
|
|
|
|
ABTOP
JComments Tester
Репутация: +32/-4
Offline
Пол: 
Сообщений: 565
|
 |
« Ответ #10 : 02.11.2012, 20:40:07 » |
|
p.s. По поводу выноса пункта Все категории в настройки - обязательно вынесу, нужно только решить вопрос с языковой константой для этого.
Чтобы этот момент облегчить, можно сделать-подругому. Сейчас нарисую. Вот, например, можно так. Идея в том, что при выборе "Все категории", селектор затуманивается. 
|
|
|
|
« Последнее редактирование: 02.11.2012, 21:29:35 от ABTOP »
|
Записан
|
|
|
|
|
smart
|
 |
« Ответ #11 : 02.11.2012, 21:55:37 » |
|
Предложенный вариант наоборот усложняет - сейчас я просто воспользовался глобальной константой JOPTION_ALL_CATEGORIES и все, можно ничего не выдумывать, а для нарисованного варианта придется добавлять свою константу или автоматом корректировать JOPTION_ALL_CATEGORIES (просто во многих языках она имеет вид "- Все категории -" и придется удалять "- ". А это не очень хорошо, точнее не очень предсказуемо).
|
|
|
|
|
Записан
|
|
|
|
ABTOP
JComments Tester
Репутация: +32/-4
Offline
Пол: 
Сообщений: 565
|
 |
« Ответ #12 : 02.11.2012, 22:03:57 » |
|
не ну это просто вариант оформления, чо. Я же не в курсах про технические детали.... Кстати, про константу, ползёт уведомление:
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
|
 |
« Ответ #13 : 03.11.2012, 13:19:02 » |
|
Версия Joomla? Я проверял на 2.5, никаких ошибок нет.
|
|
|
|
|
Записан
|
|
|
|
ABTOP
JComments Tester
Репутация: +32/-4
Offline
Пол: 
Сообщений: 565
|
 |
« Ответ #14 : 03.11.2012, 14:08:59 » |
|
Версия Joomla? Я проверял на 2.5, никаких ошибок нет.
Ошибка как на J1.7.5, так и на J2.5.7 Присутствует только в "Settings". 
|
|
|
|
|
Записан
|
|
|
|
|
smart
|
 |
« Ответ #15 : 03.11.2012, 14:16:49 » |
|
Судя по всему какие-то проблемы с языковыми файлами 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
JComments Tester
Репутация: +32/-4
Offline
Пол: 
Сообщений: 565
|
 |
« Ответ #16 : 03.11.2012, 14:46:39 » |
|
$option->text = JText::_('JOPTION_ALL_CATEGORIES');
С одинарными кавычками работает безошибочно.
|
|
|
|
|
Записан
|
|
|
|
|
smart
|
 |
« Ответ #17 : 03.11.2012, 15:16:01 » |
|
Блин, а я там без кавычек написал? Сорри, исправлю. Моя вина...
|
|
|
|
|
Записан
|
|
|
|
ABTOP
JComments Tester
Репутация: +32/-4
Offline
Пол: 
Сообщений: 565
|
 |
« Ответ #18 : 03.11.2012, 15:27:08 » |
|
Мелочи жизни. Что же делать с поддержкой для J15? Там же этой константы нетути.
|
|
|
|
|
Записан
|
|
|
|
|
smart
|
 |
« Ответ #19 : 03.11.2012, 15:31:41 » |
|
Что же делать с поддержкой для J15? Там же этой константы нетути.
Нет, точно так же как и в 1.0... Но мы же не можем бесконечно таскать за собой поддержку их? Не, эта небольшая доработка будет доступна только в 2.5. Плюс я планирую выпустить текущее обновление + еще возможно пару в линейке 2.3.х и на этом эту ветку завершить. В следующей ветке никакой поддержки 1.0 и 1.5 уже не будет, а все силы будут брошены на развитие поддержки 2.5 и 3.0.
|
|
|
|
|
Записан
|
|
|
|
|