Суть проблемы.
На сайте включена поддержка локализации (модуль Locale). По умолчанию установлен Украинский язык (uk). В настройках типа контента установлено: Multilingual support: Disabled. В ремарках для этой настройки указано: If disabled, new posts are saved with the default language. Следовательно, поля должны сохранятся с текущей локалью пользователя - uk.
При сохранении контента некоторые поля сохраняются так, как нужно - с локалью uk, а некоторые с признаком локали und.
В чем может быть проблема с такой "неправильной" установкой языковой локали поля?
Комментарии
UPD: В field_config для таких проблемных полей свойство translatable установлено в значение 0, соответственно, значе6ния полей устанавливаются в und, то есть вне языковой локали. Текущая локаль ноды при это остается uk - соответствует текущей локали пользователя. Изменение свойства в 1 решает проблему для конкретного поля.
Каким образом можно явно установить свойство translatable для отдельного поля, не прибегая к редактированию БД напрямую?
UPD: Все оказалось не так просто, но хотя бы ясно, как решать эту проблему. В одной из последних версий ядра Drupal изменилась концепция дефолтовой языковой локали.
Более подробно описано здесь: Inconsistencies in field language handling
Sun-fire, так очень много всего
не поделитесь тем, как решать пробему и в чем тут дело?
для сайтов с 1 языком я бы сказал, что у полей не должно стоять флага "translatable", тогда к полям можно будет достучаться через LANGUAGE_NONE.
вот тут еще можно почитать об альтернативных способах работы с полями, которые позволят не париться по поводу локалей: http://sidashin.ru/blog/safe-drupal7-fields-code
Судя по анализу базы данных сайта, и вышеуказаной статьи, раньше при сохранении параметров поля опция translatable по дефолту устанавливалась в 1, и соответственно, поля сохранялись с текущей языковой локалью пользователя, который создает контент. Теперь по умолчанию для новых полей translatable устанавливается в 0, и поля сохраняются с признаком языковой локали und, то есть вне языковой локали.
Таким образом на сайте образовалась каша таблицах полей. Старые записи имеют в моем случае кодировку uk, новые und.
Сейчас как раз работаю над разбором всей этой образовавшейся "каши". Программу действий наметил примерно следующую:
1. Изменение в field_config свойства translatable для "старых" полей, чтобы контент создавался уже с новыми значениями языковой локали.
2. Внеснение изменений в кастомные модули (например импорт и т. п.), если такого нет, значит нет.
3. Изменение в уже существующих значениях полей старой локали на новую (таблицы field_data_ и field_revision_)
UPD:
4. Внесение изменений в node
Руками все это делать муторно и очень долго, посему пишу скрипт, который пробежит по таблицам, и сделает апдейт полей, которые в этом нуждаются.
restyler - спасибо за информацию, очень полезно и познавательно.
всегда пожалуйста
я вам в личку написал, видели?
Только что просмотрел личку, к сожалению, пусто.
по идее на емейл (на который зарегистрирован ваш аккаунт здесь) должно было прийти.. мое мыло russiancss [at] gmail.com - напишите что-нибудь, я продублирую свое сообщение вам на почту (аськи у меня нет года два уже).