Есть в Dle замечательный тег {short-story limit=число}, который выводит краткую новость, обрезанную до определенного количества символов, но есть одна беда: при выводе текста теряется его форматирование.
что бы состряпать новый тег, который будет обрезать текст но в то же время сохранять основное форматирование текста (перенос строки, выделение жирным).
if ( preg_match( "#\\{short-story limit=['\"](.+?)['\"]\\}#i", $tpl->copy_template, $matches ) ) {
$count= intval($matches[1]);
$row['short_story'] = strip_tags( $row['short_story'], "<br>" );
if( $count AND dle_strlen( $row['short_story'], $config['charset'] ) > $count ) {
$row['short_story'] = dle_substr( $row['short_story'], 0, $count, $config['charset'] );
if( ($temp_dmax = dle_strrpos( $row['short_story'], ' ', $config['charset'] )) ) $row['short_story'] = dle_substr( $row['short_story'], 0, $temp_dmax, $config['charset'] );
}
$row['short_story'] = $row['short_story'] . "1t3";
$row['short_story'] = str_replace( "<br1t3", "<br />", $row['short_story'] );
$row['short_story'] = str_replace( "<br 1t3", "<br />", $row['short_story'] );
$row['short_story'] = str_replace( "<br /1t3", "<br />", $row['short_story'] );
$row['short_story'] = str_replace( "<b1t3", "<br />", $row['short_story'] );
$row['short_story'] = str_replace( "<1t3", "<br />", $row['short_story'] );
$row['short_story'] = str_replace( "1t3", " ", $row['short_story'] );
$tpl->set( $matches[0], $row['short_story']);
}
Немного пояснений по коду: удаляется все форматирование кроме переноса строки , исправляется последний перенос, если он попал на конец строки (битый). Выделение жирным не делал, так как не знаю как будет с быстродействием с большим количеством str_replace (для исправления последнего битого тега)
P.S.: Ничего лучшего не придумал, сам знаю что го...но код, поэтому прошу не обсуждать сам код, а по возможности предоставить решение получше)
Заранее благодарен за помощь!