Drupal 7: Setting title module field programmatically

Hello and welcome back to Drupal Tips and Tricks. Today we will be looking at the Title module in combination with Entity Translation and we will be trying to change the value of the title field programmatically.

Title module replaces the title property on an entity with a field that can hold different language values. Unfortunately, this isn't as simple as it sounds, because the core title property is defined and used by the core directly in the node table.

A quick introduction to Drupal Entities

Drupal has always been known for its immense flexibility and exceptional adaptability. The CCK module's field system was a large step in the flexibility direction, but it had its limits. The fields were only really usable on content types (read: nodes), leading to additional modules which extended profiles, provided forms, a shopping cart, forums and more. But in Drupal 7, a new unified API, the entity system, was introduced that aimed to unify the various elements of the site - and it changed everything.

Undefined index: field in field_widget_field()

A few days ago, my colleague was building a custom form in Drupal 7. Everything was going great until he added a file field, at which point all hell broke loose. The data didn't submit and he received these notices:

Notice: Undefined index: field in field_widget_field() (Row 578 of ...)
Notice: Undefined index: instance in field_widget_instance() (Row 603 of ....)

Since the field was using a custom widget, we were first debugging there, until we finally found the real culprit somewhere completely else: passing by reference.