diff --git a/includes/fields.inc b/includes/fields.inc index fb321ba..4e91f78 100644 --- a/includes/fields.inc +++ b/includes/fields.inc @@ -83,6 +83,36 @@ function ctools_fields_get_field_formatter_settings_form($field, $formatter_type $form += $settings_form; } } + + list($prefix, $suffix) = explode('@count', t('Display @count value(s)')); + if (isset($field['cardinality']) && $field['cardinality'] != 1) { + $form['delta_limit'] = array( + '#type' => 'textfield', + '#size' => 5, + '#field_prefix' => $prefix, + '#field_suffix' => $suffix, + '#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' => $prefix, + '#field_suffix' => $suffix, + '#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 1a7d5a0..53b82e9 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', ); @@ -119,6 +119,35 @@ function ctools_entity_field_content_type_render($subtype, $conf, $panel_args, $ $field_settings['settings'] = $conf['formatter_settings']; } + $all_values = $entity->{$field_name}[$language]; + + // Reverse values. + if (isset($conf['delta_reversed']) && $conf['delta_reversed']) { + $all_values = array_reverse($all_values); + } + + if (isset($conf['delta_limit'])) { + $delta_limit = $conf['delta_limit']; + $offset = intval($conf['delta_offset']); + $total = count($all_values); + + if ($delta_limit == 'all') { + $delta_limit = $total - $offset; + } + + $new_values = array(); + for ($i = 0; $i < $delta_limit; $i++) { + $new_delta = $offset + $i; + + if (isset($all_values[$new_delta])) { + $new_values[] = $all_values[$new_delta]; + } + } + + $all_values = $new_values; + } + + $entity->{$field_name}[$language] = $all_values; $field_output = field_view_field($entity_type, $entity, $field_name, $field_settings, $language); // Build the content type block. @@ -210,6 +239,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']; + } } /**