![]() |
Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community |
![]() |
#2 |
Продвинутый
Регистрация: 05.07.2011
Адрес: Россия, Интернет
Сообщений: 69
|
![]()
В общем в результате долгих мучений всё-таки сделал как надо.
Для того чтобы обрезать контент разработчики придумали маркер ###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). '|'); Код:
$textBeforeDivider = $cObj->cropHTML($renderedText, ($dividerPosition + 14). '|'); Всё должно работать. Думаю пригодиться! ![]() Последний раз редактировалось elezeo; 01.09.2011 в 02:31 |
![]() |
![]() |
Теги |
bloglist, crop, обрезка, strpos, t3blog |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не могу настройть T3BLOG | demav | Общие вопросы | 4 | 18.06.2011 15:20 |
t3blog 500 Internal Server Error | Aprel | Общие вопросы | 0 | 23.06.2010 23:44 |
Security issues in third party TYPO3 extensions including t3blog | RSS Bot | Новости TYPO3 (на английском) | 0 | 04.03.2010 18:50 |
tt_news: листание статьи в режиме SINGLE | simon.kms | TypoScript практикум | 4 | 04.01.2008 23:33 |
Статьи из журнала T3N Magazine | Comrade | Новости TYPO3-разработки | 1 | 12.07.2006 16:12 |