Планета населена роботами :)

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

Аватар пользователя MDD MDD 11 сентября 2007 в 23:52

Как-то рухнул один из моих любимых сайтов, и на главной странице весит сообщение "Контента нет. Ничего нет. Планета временно населена роботами."

Так вот в иногда меня посещает такое чувство, что вопросы здесь иногда уходят в пустоту.
Может быть просто мало друпальцев (в каталоге всего 72 сайта)? или ни кто не сталкивался с такой проблемой (о ней ниже)...
Вопрос я этот задавал несколько раз, но ни кто толком ни чего не ответил Sad
Странно. Я что, первопроходец?

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

Как я уже писал, в друпале мне нравится все, но вот периодически натыкаюсь на такие мелочи, которые ставят в тупик...
Казалось бы мелочь - длина поля... а если оставить неограниченной - есть риск обрушить сайт переполнением данных, да и вьювс тут же разъедется...

Можно задать в три раза больше длину поля, а в комментах указать что она меньше - но такой выход меня тоже не устраивает, т.к. в случае переполнение - сообщение об ошибке выглядит некорректно и только запутает пользователя...

Не уже ли ни кто не юзает текстовые поля в ССК?????

Поднатужившись, на пару с переводчиком я отослал запрос в друпал.орг... но и там тишина... пока склонен грешить на плохой англ, хотя не удивлюсь если я там тоже один Smile
http://drupal.org/node/174518

Я уже был бы готов запустить сайт в черновом варианте, но из-за этого засел Sad и даже пошел смотреть другие CMS... потом праффда вернулся Smile

С последней надеждой, на разум, на этой планете Lol

Комментарии

Аватар пользователя magway magway 12 сентября 2007 в 0:23

Судя по всему, это происходит из-за того, что русские (вернее "неанглийские") буквы занимают в UTF-8 два байта, вместо одного. Проверка размера идет обычной функцией strlen();, которая AFAIK не учитывает кодировки строки аргумента. Так и получается, что ввести можно в 2 раза меньше русских букв, чем положено (я проверял это: ставил ограничение на 50, вводил 25 - норм, 26 - ошибка). Выход из ситуации вижу такой: найти в файле text.module следующий код:

    case 'validate':
      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;

В нем строку:

if (strlen($data['value']) > $field['max_length']) {

заменить на

if (mb_strlen($data['value'],"UTF-8") > $field['max_length']) {

Такой вариант вполне работоспособен.

Аватар пользователя MDD MDD 12 сентября 2007 в 0:57

Попробовал:

Fatal error: Call to undefined function mb_strlen() in ...\www\modules\cck\text.module on line 126

126-ая строка как раз она и есть

Аватар пользователя magway magway 12 сентября 2007 в 1:05


Для функции mb_strlen() у php должно быть расширение mbstring

В отчете о состоянии сайта (/admin/logs/status) в графе Библиотека Unicode должно быть PHP расширение Mbstring, а не эмуляция чего-то там. Дома на win можно включить это расширение, раскомментив соответствующую строку в php.ini. Если дело на хостинге, попробовать написать в саппорт. А вообще это расширение обычно включено.

Аватар пользователя MDD MDD 12 сентября 2007 в 22:42

Бонус вопрос Lol

Если в параметрах TextField указывается один ряд, то ограничение действует непосредственно при вводе... т.е. больше разрешенного кол-ва символов не ввести... а если указываешь больше, то поле получается 'безрамерным" - и проверка происходит по факту отправки данных.

Нельзя ли ограничть длину строк так же как и в первом случае?

Аватар пользователя c3266391 c3266391 13 сентября 2007 в 5:15

Насколько я знаю в textarea нельзя ограничить количество символов. Если только написать javascript, который бы проверял это при отправке. Один черт, в это случае, и в случае, когда один ряд, все эти ограничения на форме. Если нужно будет, можно сделать свою форму и отправить данные без ограничений.

Аватар пользователя emzi emzi 15 сентября 2007 в 0:40

On чт, 13/09/2007 - 05:15 Beduir says:
Насколько я знаю в textarea нельзя ограничить количество символов.

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

Аватар пользователя c3266391 c3266391 15 сентября 2007 в 15:56

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

Ну это понятно. Речь идет о ограничении количества символов еще до отправки данных формы серверу.

Аватар пользователя MDD MDD 19 сентября 2007 в 17:29

да, до отправки... и еще один интересный момент, вчера заметил в ССК - если поле текстовое, однострочное - то символы ограничиваются при вводе - если у этого поля поставить тип Integer и задать максимальную величину (пример 9999).... то ввести изначально всеравно можно больше знаков Beee

Аватар пользователя orbisnull orbisnull 20 сентября 2007 в 14:22

есть возможность подменять прозрачно обычные функции юникодными аналогами, подробности в мане к mbstring (указывать можно в .htaccess).