diff --git a/includes/fields.inc b/includes/fields.inc index f4debb4..df41d44 100644 --- a/includes/fields.inc +++ b/includes/fields.inc @@ -81,6 +81,33 @@ function ctools_fields_get_field_formatter_settings_form($field, $formatter_type if ($settings_form) { $form['ctools_field_list']['#value'][] = $field; $form += $settings_form; + + if (isset($field['cardinality']) && $field['cardinality'] != 1) { + $form['delta_limit'] = array( + '#type' => 'textfield', + '#size' => 5, + '#field_prefix' => t('Display'), + '#field_suffix' => t('value(s)'), + '#default_value' => $conf['delta_limit'], + '#prefix' => '
', + ); + + list($prefix, $suffix) = explode('@count', t('starting from @count')); + $form['delta_offset'] = array( + '#type' => 'textfield', + '#size' => 5, + '#field_prefix' => t('starting from'), + '#default_value' => $conf['delta_offset'], + '#description' => t('(first item is 0)'), + ); + $form['delta_reversed'] = array( + '#title' => t('Reversed'), + '#type' => 'checkbox', + '#default_value' => $conf['delta_reversed'], + '#suffix' => '
', + '#description' => t('(start from last values)'), + ); + } } } } diff --git a/plugins/content_types/entity_context/entity_field.inc b/plugins/content_types/entity_context/entity_field.inc index d729d65..108a7c4 100644 --- a/plugins/content_types/entity_context/entity_field.inc +++ b/plugins/content_types/entity_context/entity_field.inc @@ -7,7 +7,7 @@ $plugin = array( 'title' => t('Entity field'), - 'defaults' => array('label' => 'title', 'formatter' => ''), + 'defaults' => array('label' => 'title', 'formatter' => '', 'delta_limit' => 'all', 'delta_offset' => '0', 'delta_reversed' => FALSE), 'content type' => 'ctools_entity_field_content_type_content_type', ); @@ -117,6 +117,30 @@ function ctools_entity_field_content_type_render($subtype, $conf, $panel_args, $ $field_output = field_view_field($entity_type, $entity, $field_name, $field_settings, $language); + // Reverse values. + if (isset($conf['delta_reversed']) && $conf['delta_reversed']) { + $field_output['#items'] = array_reverse($field_output['#items'], TRUE); + } + + if (isset($conf['delta_limit'])) { + $delta_limit = $conf['delta_limit']; + $offset = intval($conf['delta_offset']); + + if ($delta_limit == 'all') { + $delta_limit = count($field_output['#items']) - $offset; + } + + $new_values = array(); + for ($i = 0; $i < $delta_limit; $i++) { + $new_delta = $offset + $i; + + if (isset($field_output['#items'][$new_delta])) { + $new_values[$new_delta] = $field_output['#items'][$new_delta]; + } + } + $field_output['#items'] = $new_values; + } + // Build the content type block. $block = new stdClass(); $block->module = 'entity_field'; @@ -206,6 +230,12 @@ function ctools_entity_field_content_type_formatter_styles_submit($form, &$form_ } } } + + if (isset($form_state['values']['delta_limit'])) { + $form_state['conf']['delta_limit'] = $form_state['values']['delta_limit']; + $form_state['conf']['delta_offset'] = $form_state['values']['delta_offset']; + $form_state['conf']['delta_reversed'] = $form_state['values']['delta_reversed']; + } } /**