В общем в результате долгих мучений всё-таки сделал как надо.
Для того чтобы обрезать контент разработчики придумали маркер ###MORE### который надо вставить в тексте контента и в список блогов выведеться только то, что до маркера.
Но не тут то было!!!
Текст действительно становиться меньше, но обрезается он не в месте маркера, а ниже и отображается еще примерно такое же количество текста.
Долго ломал голову и ковырял код t3blog расширения. Вроде бы все верно делается.
Смущало лишь одно.. В функции, где делается обрезка получается не верная позиция маркера ###MORE###
Тут до меня и дошло, что при работе с кодировкой UTF-8 функция strpos видит больше байтов в строке, кодированной utf-8 и потому позиция находиться не та.
Итак я нашел функцию utf8_strpos и внедрил ее в код.
Вот какие изменения я внес:
файл: .../ext/t3blog/pi1/lib/class.t3blog_div.php
Код:
class t3blog_div {
static public function utf8_strpos($haystack, $needle, $offset = 0){
// get substring (if isset offset param)
$offset = ($offset<0) ? 0 : $offset;
if ($offset>0){
preg_match('/^.{' . $offset . '}(.*)/us', $haystack, $dummy);
$haystack = (isset($dummy[1])) ? $dummy[1] : '';
}
// get relative pos
$p = strpos($haystack, $needle);
if ($haystack=='' or $p===false) return false;
$r = $offset;
$i = 0;
// calc real pos
while($i<$p){
if (ord($haystack[$i])<128) {
# ascii symbol
$i = $i + 1;
} else {
# non-ascii symbol with variable length
# (handling first byte)
$bvalue = decbin(ord($haystack[$i]));
$i = $i + strlen(preg_replace('/^(1+)(.+)$/', '\1', $bvalue));
}
$r++;
}
return $r;
}
//........тут дальнейший код
Код:
static public function fetchContentData($postId, array &$contentUidArray, &$hasDivider, &$textBeforeDivider) {
.....какой-то код
if ($rowContent['CType'] == 'text' || $rowContent['CType'] == 'textpic') {
$dividerPosition = t3blog_div::utf8_strpos($rowContent['bodytext'], '###MORE###');
.....какой-то код
}
и еще там же в другой функции.. найдите эту строку
Код:
$textBeforeDivider = $cObj->cropHTML($renderedText,
($dividerPosition + 10). '|');
и замените "10" на 14
Код:
$textBeforeDivider = $cObj->cropHTML($renderedText,
($dividerPosition + 14). '|');
Это они немного накасячили, забыв включить в размер закрытый тег </p>
Всё должно работать.
Думаю пригодиться!