t("Node reference"), 'keyword' => 'nodereference', 'description' => t('Gets a node reference (CCK) from a node context.'), 'required context' => new panels_required_context(t('Node'), 'node'), 'context' => 'panels_nodereference_context', 'settings form' => 'panels_nodereference_settings_form', 'settings form validate' => 'panels_nodereference_settings_form_validate', ); return $args; } } /** * Return a new context based on an existing context */ function panels_nodereference_context($context = NULL, $conf) { $noderef_field = $conf['field']; if (!empty($context->data) && isset($context->data->$noderef_field)) { $ref = $context->data->$noderef_field; if (!empty($ref)) { $node = node_load($ref[0]['nid']); return panels_context_create('node', $node); } } // If unset it wants a generic, unfilled context, which is just NULL return panels_context_create_empty('node'); } /** * Settings form for the relationship */ function panels_nodereference_settings_form($conf) { $noderef_fields = array(); foreach ( content_fields() as $fname => $field) { if ($field['type'] == 'nodereference') { $noderef_fields[$fname] = $field['widget']['label']; } } $form['field'] = array( '#type' => 'select', '#title' => t('Node reference field'), '#options' => $noderef_fields, '#default_value' => $conf['field'] ); return $form; }