readmore.field.inc in Readmore 7
Field formatter hooks to implement a readmore.
File
readmore.field.incView source
<?php
/**
* @file
* Field formatter hooks to implement a readmore.
*/
/**
* Implements hook_field_formatter_info().
*/
function readmore_field_formatter_info() {
return array(
'readmore' => array(
'label' => t('Read more'),
'field types' => array(
'text',
'text_long',
'text_with_summary',
),
'settings' => array(
'readmore_trim_length' => 500,
'readmore_more_text' => 'Read more',
'readmore_less_text' => 'Read less',
'readmore_trim_on_break' => TRUE,
'readmore_show_readless' => FALSE,
'readmore_ellipsis' => TRUE,
'readmore_wordsafe' => FALSE,
),
),
);
}
/**
* Implements hook_field_formatter_settings_form().
*/
function readmore_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
$display = $instance['display'][$view_mode];
$settings = $display['settings'];
$element = array();
if ($display['type'] == 'readmore') {
$element['readmore_trim_length'] = array(
'#title' => t('Trim length'),
'#type' => 'textfield',
'#size' => 10,
'#default_value' => $settings['readmore_trim_length'],
'#element_validate' => array(
'element_validate_integer_positive',
),
'#required' => TRUE,
);
$element['readmore_more_text'] = array(
'#title' => t('Text for more link'),
'#type' => 'textfield',
'#size' => 20,
'#default_value' => $settings['readmore_more_text'],
'#required' => TRUE,
);
$element['readmore_less_text'] = array(
'#title' => t('Text for less link'),
'#type' => 'textfield',
'#size' => 20,
'#default_value' => $settings['readmore_less_text'],
'#required' => TRUE,
);
$element['readmore_trim_on_break'] = array(
'#type' => 'checkbox',
'#title' => t('Trim on @break', array(
'@break' => '<!--break-->',
)),
'#description' => t('If @break not found in the text then trim length used.', array(
'@break' => '<!--break-->',
)),
'#default_value' => $settings['readmore_trim_on_break'],
);
$element['readmore_show_readless'] = array(
'#type' => 'checkbox',
'#title' => t('Show read less'),
'#default_value' => $settings['readmore_show_readless'],
);
$element['readmore_ellipsis'] = array(
'#type' => 'checkbox',
'#title' => t('Add ellipsis'),
'#default_value' => $settings['readmore_ellipsis'],
);
$element['readmore_wordsafe'] = array(
'#type' => 'checkbox',
'#title' => t('Truncate on a word boundary'),
'#default_value' => $settings['readmore_wordsafe'],
);
}
return $element;
}
/**
* Implements hook_field_formatter_settings_summary().
*/
function readmore_field_formatter_settings_summary($field, $instance, $view_mode) {
$display = $instance['display'][$view_mode];
$settings = $display['settings'];
$summary = '';
if ($display['type'] == 'readmore') {
$summary[] = t('Trim length: @length', array(
'@length' => $settings['readmore_trim_length'],
));
$summary[] = t('Text for more link: @more_text', array(
'@more_text' => $settings['readmore_more_text'],
));
$summary[] = t('Text for less link: @less_text', array(
'@less_text' => $settings['readmore_less_text'],
));
$summary[] = $settings['readmore_trim_on_break'] ? t('Trim on @break', array(
'@break' => '<!--break-->',
)) : t('Do not trim on @break', array(
'@break' => '<!--break-->',
));
$summary[] = $settings['readmore_show_readless'] ? t('Show read less') : t('Do not show read less');
$summary[] = $settings['readmore_ellipsis'] ? t('Add ellipsis') : t('Do not add ellipsis');
$summary[] = $settings['readmore_wordsafe'] ? t('Safe words') : t('Do not safe words');
}
return implode('<br />', $summary);
}
/**
* Implements hook_field_formatter_view().
*/
function readmore_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
switch ($display['type']) {
case 'readmore':
drupal_add_js(READMORE_MODULE_PATH . '/js/readmore.js');
foreach ($items as $delta => $item) {
$text = _text_sanitize($instance, $langcode, $item, 'value');
$text_length = drupal_strlen($item['value']);
$trim_length = $display['settings']['readmore_trim_length'];
$text_read_more = $display['settings']['readmore_more_text'];
$text_read_less = $display['settings']['readmore_less_text'];
// Don't do anything if text length less than defined.
if ($text_length > $trim_length) {
// Add Read less if need.
if ($display['settings']['readmore_show_readless']) {
$text .= ' ' . l($text_read_less, current_path(), array(
'attributes' => array(
'class' => array(
'readless-link',
),
),
));
}
// Get trimmed string.
$summary = readmore_truncate_string($text, isset($item['format']) ? $item['format'] : NULL, $trim_length, $display['settings']['readmore_wordsafe'], $display['settings']['readmore_trim_on_break']);
// Add readmore link.
$summary .= '<span>';
$summary .= $display['settings']['readmore_ellipsis'] ? t('...') : NULL;
$summary .= l($text_read_more, current_path(), array(
'attributes' => array(
'class' => array(
'readmore-link',
),
),
));
$summary .= '</span>';
// Close all HTML tags.
$summary = _filter_htmlcorrector($summary);
$element[$delta] = array(
'#markup' => theme('readmore', array(
'text' => $text,
'summary' => $summary,
)),
);
}
else {
$element[$delta] = array(
'#markup' => $text,
);
}
}
break;
}
return $element;
}
Functions
Name![]() |
Description |
---|---|
readmore_field_formatter_info | Implements hook_field_formatter_info(). |
readmore_field_formatter_settings_form | Implements hook_field_formatter_settings_form(). |
readmore_field_formatter_settings_summary | Implements hook_field_formatter_settings_summary(). |
readmore_field_formatter_view | Implements hook_field_formatter_view(). |