View source
<?php
define('ED_READMORE_TEXT_DEFAULT', 'Read more');
function _ed_readmore_place_readmore_link($thing, $link, $inlineflag) {
$read_more = '<span class="read-more">' . $link . '</span>';
if ($inlineflag) {
if (_ed_readmore_is_php4()) {
$find_last = '_ed_readmore_strrpos_string';
}
else {
$find_last = 'strrpos';
}
$marker_to_insert_at = '</p>';
$final_p_pos = $find_last($thing, $marker_to_insert_at);
if (!($final_p_pos === FALSE)) {
$thing = substr_replace($thing, $read_more, $final_p_pos, 0);
}
else {
$thing .= $read_more;
}
}
else {
$thing .= $read_more;
}
return $thing;
}
function ed_readmore_nodeapi(&$node, $op, $teaser, $page) {
$enabled = variable_get('ed_readmore_readmore_tweak', 1);
$inlineflag = variable_get('ed_readmore_readmore_inline', 1);
$strong = variable_get('ed_readmore_readmore_strong', 1);
if ($strong) {
$strong_l = '<strong>';
$strong_r = '</strong>';
}
else {
$strong_l = '';
$strong_r = '';
}
$link_text = filter_xss($strong_l . t(variable_get('ed_readmore_text', ED_READMORE_TEXT_DEFAULT)) . $strong_r);
$options = array(
'html' => true,
);
$readmore_url = l($link_text, "node/{$node->nid}", $options);
if ($enabled) {
if ($op == 'rss item') {
$options['absolute'] = true;
$options['attributes'] = array(
'target' => '_blank',
);
$readmore_url = l($link_text, "node/{$node->nid}", $options);
$item_length = variable_get('feed_item_length', 'teaser');
switch ($item_length) {
case 'teaser':
if (strlen($node->teaser) < strlen($node->body)) {
$node->teaser = _ed_readmore_place_readmore_link($node->teaser, $readmore_url, $inlineflag);
}
break;
}
return;
}
if ($op == 'view') {
if ($teaser && $node->readmore) {
$node->readmore = false;
$node->is_teaser = TRUE;
$node->content['body']['#value'] = _ed_readmore_place_readmore_link($node->content['body']['#value'], $readmore_url, $inlineflag);
}
}
}
}
function _ed_readmore_strrpos_string($haystack, $needle, $offset = 0) {
if (trim($haystack) != "" && trim($needle) != "" && $offset <= strlen($haystack)) {
$last_pos = $offset;
$found = false;
while (($curr_pos = strpos($haystack, $needle, $last_pos)) !== false) {
$found = true;
$last_pos = $curr_pos + 1;
}
if ($found) {
return $last_pos - 1;
}
else {
return false;
}
}
else {
return false;
}
}
function _ed_readmore_php_ver_major() {
return substr(PHP_VERSION, 0, 1);
}
function _ed_readmore_is_php4() {
return _ed_readmore_php_ver_major() == '4';
}
function ed_readmore_menu() {
$items['admin/settings/ed_readmore'] = array(
'title' => t('Read More Tweak'),
'description' => t('Relocate the teaser "read more" link from links section?'),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'ed_readmore_admin_settings',
),
'access arguments' => array(
'administer site configuration',
),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function ed_readmore_admin_settings() {
$form = array();
$form['readmore'] = array(
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#title' => t('Teaser "Read more" handling'),
);
$form['readmore']['ed_readmore_readmore_tweak'] = array(
'#type' => 'checkbox',
'#title' => t('Relocate <strong>Read more</strong> link from links section?'),
'#default_value' => variable_get('ed_readmore_readmore_tweak', 1),
'#description' => t('Move Read More from links to end of teaser? See <a target="_blank" href="http://www.angrydonuts.com/the_nuisance_of_the_read_more_fl">AngryDonuts.com</a> for details.'),
'#required' => FALSE,
);
$form['readmore']['ed_readmore_readmore_inline'] = array(
'#type' => 'checkbox',
'#title' => t('Put <strong>Read more</strong> inline in teaser?'),
'#default_value' => variable_get('ed_readmore_readmore_inline', 1),
'#description' => t('If relocation is enabled, and this option is set, place "read more" text on last line of teaser text using a <span> element.'),
'#required' => FALSE,
);
$form['readmore']['ed_readmore_text'] = array(
'#type' => 'textfield',
'#title' => t('The "read more" text to display in the teaser'),
'#default_value' => variable_get('ed_readmore_text', t(ED_READMORE_TEXT_DEFAULT)),
'#description' => t('Enter the text you wish to display in the read more link. May contain HTML.'),
'#required' => TRUE,
);
$form['readmore']['ed_readmore_readmore_strong'] = array(
'#type' => 'checkbox',
'#title' => t('bold this text'),
'#default_value' => variable_get('ed_readmore_readmore_strong', 1),
'#required' => FALSE,
);
return system_settings_form($form);
}