Как-то рухнул один из моих любимых сайтов, и на главной странице весит сообщение "Контента нет. Ничего нет. Планета временно населена роботами."
Так вот в иногда меня посещает такое чувство, что вопросы здесь иногда уходят в пустоту.
Может быть просто мало друпальцев (в каталоге всего 72 сайта)? или ни кто не сталкивался с такой проблемой (о ней ниже)...
Вопрос я этот задавал несколько раз, но ни кто толком ни чего не ответил
Странно. Я что, первопроходец?
Вопрос касается длины поля в ССK. Если ее ограничить принудительно - то фактическая длина не соотвествует реальной. Ввести можно примерно в три раза меньше символов (в русской кодировке), в англ. такой проблемы нет.
Как я уже писал, в друпале мне нравится все, но вот периодически натыкаюсь на такие мелочи, которые ставят в тупик...
Казалось бы мелочь - длина поля... а если оставить неограниченной - есть риск обрушить сайт переполнением данных, да и вьювс тут же разъедется...
Можно задать в три раза больше длину поля, а в комментах указать что она меньше - но такой выход меня тоже не устраивает, т.к. в случае переполнение - сообщение об ошибке выглядит некорректно и только запутает пользователя...
Не уже ли ни кто не юзает текстовые поля в ССК?????
Поднатужившись, на пару с переводчиком я отослал запрос в друпал.орг... но и там тишина... пока склонен грешить на плохой англ, хотя не удивлюсь если я там тоже один
http://drupal.org/node/174518
Я уже был бы готов запустить сайт в черновом варианте, но из-за этого засел и даже пошел смотреть другие CMS... потом праффда вернулся
С последней надеждой, на разум, на этой планете
Комментарии
Судя по всему, это происходит из-за того, что русские (вернее "неанглийские") буквы занимают в UTF-8 два байта, вместо одного. Проверка размера идет обычной функцией
strlen();
, которая AFAIK не учитывает кодировки строки аргумента. Так и получается, что ввести можно в 2 раза меньше русских букв, чем положено (я проверял это: ставил ограничение на 50, вводил 25 - норм, 26 - ошибка). Выход из ситуации вижу такой: найти в файле text.module следующий код:if ($field['max_length'] > 0) {
foreach ($items as $delta => $data) {
$error_field = $field['field_name'].']['.$delta.'][value';
if (strlen($data['value']) > $field['max_length']) {
form_set_error($error_field, t('%label is longer than %max characters.', array('%label' => $field['widget']['label'], '%max' => $field['max_length'])));
}
}
}
break;
В нем строку:
заменить на
Такой вариант вполне работоспособен.
Вполне логично.. напиши багрепорт на друпал орг.
Для функции mb_strlen() у php должно быть расширение mbstring
.
.
эм...
Попробовал:
Fatal error: Call to undefined function mb_strlen() in ...\www\modules\cck\text.module on line 126
126-ая строка как раз она и есть
В отчете о состоянии сайта (/admin/logs/status) в графе Библиотека Unicode должно быть PHP расширение Mbstring, а не эмуляция чего-то там. Дома на win можно включить это расширение, раскомментив соответствующую строку в php.ini. Если дело на хостинге, попробовать написать в саппорт. А вообще это расширение обычно включено.
drupal_strlen
Мужики, спасибо всем большое, magway и edhel !!!
С drupal_strlen - работает :)))))))
Щастью нет предела
Бонус вопрос
Если в параметрах TextField указывается один ряд, то ограничение действует непосредственно при вводе... т.е. больше разрешенного кол-ва символов не ввести... а если указываешь больше, то поле получается 'безрамерным" - и проверка происходит по факту отправки данных.
Нельзя ли ограничть длину строк так же как и в первом случае?
Насколько я знаю в textarea нельзя ограничить количество символов. Если только написать javascript, который бы проверял это при отправке. Один черт, в это случае, и в случае, когда один ряд, все эти ограничения на форме. Если нужно будет, можно сделать свою форму и отправить данные без ограничений.
ок. тогда понятно
On чт, 13/09/2007 - 05:15 Beduir says:
Насколько я знаю в textarea нельзя ограничить количество символов.
количество символов будет проверяться при валидации формы перед сохранением в базу
Ну это понятно. Речь идет о ограничении количества символов еще до отправки данных формы серверу.
да, до отправки... и еще один интересный момент, вчера заметил в ССК - если поле текстовое, однострочное - то символы ограничиваются при вводе - если у этого поля поставить тип Integer и задать максимальную величину (пример 9999).... то ввести изначально всеравно можно больше знаков
есть возможность подменять прозрачно обычные функции юникодными аналогами, подробности в мане к mbstring (указывать можно в .htaccess).