/*
* Перед рендерингом формы свойств поля добавляем в нее требуемый checkbox
*
*/
function i18ncck_form_alter(&$form, $form_state, $form_id) {
if (($form['form_id']['#value'] == 'content_field_edit_form') && (variable_get('i18n_node_' . $form['type_name']['#value'], FALSE))) {
$i18ncck = array(
'#type' => 'checkbox',
'#title' => t('Language independent values'),
'#default_value' => variable_get('i18ncck_' . $form['field_name']['#value'] , FALSE),
);
/*
* Указываем дополнительный обработчик формы функцию _i18ncck_field_submit()
*
*/
if(isset($form['field'])) {
$form['field'] = array_merge(array('i18ncck' => $i18ncck), $form['field']);
$form['#submit'][] = '_i18ncck_field_submit';
}
}
}
function _i18ncck_field_submit($form, &$form_state) {
/*
* Если флажок выставлен сохраняем уникальную переменную для каждого поля,
* если нет – удаляем ее.
*
*/
if (isset($form_state['values']['i18ncck']) && $form_state['values']['i18ncck']) {
variable_set('i18ncck_' . $form_state['values']['field_name'], TRUE);
} else {
variable_del( 'i18ncck_' . $form_state['values']['field_name']);
}
}
/*
* При подтверждении формы редактирования материала обрабатываются
* два случая: вставка и обновление.
*
*/
function i18ncck_nodeapi(&$node, $op, $a3, $a4) {
if ( variable_get('i18n_node_' . $node->type, FALSE)) {
switch ($op){
/*
* Получаем исходный по языку материал и все его переводы.
* Проходим по циклу все поля, если для него указана многоязычность -
* загружаем все переводы, присваиваем введенное значение поля и сохраняем их.
*
*/
case 'update':
$translations = translation_node_get_translations($node->tnid);
foreach( content_fields() as $field) {
$field = $field['field_name'];
if ( variable_get('i18ncck_' . $field, FALSE) && isset($node->tnid)) {
foreach($translations as $lang){
if($node->nid!=$lang->nid) {
$i18n_node = node_load($lang->nid);
$i18n_node->$field = $node->$field;
node_save($i18n_node);
unset($i18n_node);
}
}
}
}
break;
/*
* От случая обновления отличается только способом получения NID исходного перевода
*
*/
case 'insert':
if(isset($node->translation_source->nid)) {
$translations = translation_node_get_translations($node->translation_source->nid);
foreach(content_fields() as $field) {
$field = $field['field_name'];
foreach( $translations as $translation) {
$i18n_node = node_load($translation->nid);
$i18n_node->$field = $node->$field;
node_save($i18n_node);
unset($i18n_node);
}
}
}
break;
}
}
}
Dokumentoj pri Esperanto (ankaŭ sciencaj studoj) | Tutmonda Esperanto-adresaro
Dokumentoj pri Esperanto (ankaŭ sciencaj studoj)