Программное добавление значения к полю

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

Аватар пользователя avatar avatar 21 января 2016 в 13:53

Не может же быть, чтобы ни у кого не возникало подобной задачи.
Но — не могу найти ни одного мануала, как это сделать.
Примерная задача: есть тип материала Type1. Еще есть тип Type2, у которого есть поле field (текстовый список).
При сохранении материала Type1 в поле field надо добавить значение, равное заголовку этого материала. Чтобы впоследствии при создании Type2 можно было выбрать это значение.
Предполагается использование модуля Rules и экшена "произвольный php-код".
Но вот что туда вставить - даже примерно не могу найти. Есть много материалов по программному созданию поля, добавлению его к материалу, кастомизации вывода и тд. А вот просто добавить значение - не вижу.
Помогите, пожалуйста, хоть примерным направлением, куда копать.

Комментарии

Аватар пользователя bumble bumble 21 января 2016 в 16:19

Просто предложение!

Используйте вместо Type1 - таксономию, а вместо field (текстовый список) - ссылку на термин.

Аватар пользователя avatar avatar 22 января 2016 в 11:58

bumble wrote:

Просто предложение!
Используйте вместо Type1 - таксономию, а вместо field (текстовый список) - ссылку на термин.


Спасибо за совет.
Но мне такой вариант не подходит, по многим причинам.
В том числе - а как предоставить пользователю возможность добавлять термин в словарь, чтоб удобно было? Ну и так, там еще должно быть описание, картинка..Я ж "на пальцах" схему обрисовал, без нюансов.

Аватар пользователя bumble bumble 22 января 2016 в 15:18

avatar wrote:

предоставить пользователю возможность добавлять термин в словарь.. ..там еще должно быть описание, картинка.

Ну это все, как раз без проблем. Термин такая же сущность, как и нода - доступны поля, при необходимости, настройка отображений.
А вот каждый раз изменять поле - это... ну неправильно. Но возможно:

<?php

$field 

field_info_field('field_name');

$options = &$field['settings']['allowed_values'];

$options['key'] = $node->title;
// Рекомендую использовать NID в качестве ключа, вот так:
// $options[$node->nid] = $node->title;

field_update_field($field);

?>
Аватар пользователя avatar avatar 25 января 2016 в 13:47

bumble wrote:

А вот каждый раз изменять поле - это... ну неправильно. Но возможно:

Огромнейшее вам спасибо! Это именно то, что мне надо.
То есть, нигде такого рецепта не смог найти, потому что это противоречит принципам друпала?

Аватар пользователя bumble bumble 25 января 2016 в 14:21

avatar wrote:

..это противоречит принципам друпала?

От части да.
Для списков, в которых возможны изменения, как раз и была придумана таксономия.
В крайнем случае, Entity reference.