/* * Перед рендерингом формы свойств поля добавляем в нее требуемый 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; } } } Tutmonda Esperanto-adresaro http://www.adresaro.org eo Tutmonda Esperanto-adresaro http://www.adresaro.org/enhavo/adresaro <h4><b>En la tutmonda Esperanto-adresaro vi povas trovi multon:</b><br /> <h4> <h5> <li>Tranoktu en fremdaj landoj! </li><li>Trovu korespondamikojn el la plej interesaj landoj de la mondo! </li><li>Trovu personon, kiuj pretas montri al vi sian urbon! </li><li>Trovu amikojn kun kiuj vi dumvojaĝe povas trinki kafon aŭ bieron (kompreneble ankaŭ eblas aliaj trinkaĵoj aŭ manĝaĵoj) </li><li>Trovu amikojn kun kiuj vi kune povas lerni Esperanton! </li><li>Trovu personojn, kiuj havas la samajn interesojn kiel vi! </li><li>Trovu personojn, kiuj helpas al vi trovi hotelon aŭ hostelon! </li><li>Trovu personojn kiuj ofertas liton kaj matenmanĝon kontraŭ eta pago!</li> <p>Por uzi la adresaron vi nur devas registriĝi. Se vi volas uzi la bazajn funkciojn de la tutmonda Esperanto-adresaro la afero estas tute senpaga por vi, </p> </h5></h4></h4><p><a href="http://www.adresaro.org/enhavo/adresaro" target="_blank">legu pli</a></p> Sat, 30 Apr 2011 08:34:09 +0000 retumanto 11 at http://www.adresaro.org