Связывание однотипных полей

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

Аватар пользователя Cristian Cristian 19 февраля 2013 в 13:34

Есть тип профиля "Продавец" (Profile2) и есть тип материала "Товар". И там, и там есть одинаковые поля разных типов (текст, число, ссылка на термин и т.д.).
Задача в том, чтобы, когда пользователь создает новый материал, значения полей из профиля автоматически подставлялись в соответствующие поля материала. Как более правильно это можно реализовать?

Насколько я понимаю, модуль Computed Field мне не совсем подходит, так как предполагает создание новых полей специального типа.

Комментарии

Аватар пользователя Cristian Cristian 5 марта 2013 в 13:06

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

<?php

/**
 * hook_form_alter
 */
function mymodule_form_alter(&$form, &$form_state$form_id)
{

    

// узнаем имя профиля, в зависимости от id формы
    
$profile_name _get_profile_name($form_id);
    if (
is_null($profile_name)) 
    {
        return;
    }

    global 

$user;
    
// загружаем профиль
    
$profile profile2_load_by_user($user->uid);

    if (isset(

$profile[$profile_name]))
    {
        
// перебираем поля профиля
        
foreach ($profile[$profile_name] as $key => $field)
        {
            
// если поле профиля присутсвует в форме, генерируем значение по умолчанию
            
if (substr($key06) == 'field_' and isset($form[$key]))
            {
                
$lang $form[$key]['#language'];
                
// для текстовых полей
                
if (isset($form[$key][$lang][0]))
                {
                    
$form[$key][$lang][0]['value']['#default_value'] = $field[$lang][0]['value'];
                }
                
// для ссылки на термин
                
elseif(isset($form[$key][$lang]))
                {
                    switch (
$form[$key][$lang]['#type']) {
                        
// виджет с автозаполнением
                        
case 'textfield':
                            
$term taxonomy_term_load($field[$lang][0]['tid']);
                            
$form[$key][$lang]['#default_value'] = $term->name;

                            break;
                        

// виджет обычного списка
                        
case 'select':
                            
$form[$key][$lang]['#default_value'] = array($field[$lang][0]['tid']);

                            break;
                    }
                    
                }
                else continue;
            }
        }
    }

}

/**
 * указываем имя профиля в зависимости от id формы
 */
function mymodule_get_profile_name($form_id)
{
    switch (
$form_id
    {
        case 
'form1_node_form':
            
$profile_name 'profile1';
            break;
        case 
'form2_node_form':
            
$profile_name 'profile2';
            break;
        default:
            
$profile_name null;
            break;
    }

    return 

$profile_name;
}

?>