Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   TypoScript практикум (http://forum.typo3.ru/forumdisplay.php?f=27)
-   -   возможности crop (http://forum.typo3.ru/showthread.php?t=1885)

Tod 06.10.2006 16:36

возможности crop
 
В общем, для отображения результатов поиска выводятся как бы отрывки текста.
Код:

20.field = short//bodytext
20.crop = -250

Так вот оно так дико его отрезает, со всем форматированием.. и если еще с самого начала брать текст, то идут заголовки и смотрится ну просто дико.
Можно ли как-то настроить crop чтобы оно выводило по другому? ну код хтмл например или тексты без форматирования вообще. Есть ли в TS нечто подобное?

Valery Romanchev 06.10.2006 17:56

наверное стоит свою Php функцию написать и подцепить ее через Ts... и в ней уже что угодно делать

Tod 06.10.2006 18:43

А с помощью там какого-то HTMLparser ничего сделать нельзя? может как-то тэги поубирать из текста просто... ? или точно нет?))

Valery Romanchev 06.10.2006 18:51

Цитата:

Сообщение от Tod
А с помощью там какого-то HTMLparser ничего сделать нельзя? может как-то тэги поубирать из текста просто... ? или точно нет?))
Если свою функцию, то может пример наведете как что куда подцепить? (если не слочно)

PHP код:

// Correction to long lines of HTML code
page.includeLibs.user_textWrap fileadmin/templates/design/user_textWrap.php
page
.stdWrap.preUserFunc user_textWrap 

PHP код:

<?
//
// see  http://ru.php.net/manual/en/function.wordwrap.php
//

function user_textWrap($tstr,$conf ) {

$len 75;
$br "\r\n";
$strs explode($br,$tstr);
$retstr "";
foreach (
$strs as $str) {
$str=trim($str);
if (
strlen($str)>75)      
$retstr .= better_wordwrap($str,75,"\r\n") . $br;
else 
$retstr .=$str $br;
     }

/*
$strs = explode($br,$retstr);
$retstr = "";
$j=0;
foreach ($strs as $str) {
if (strlen($str)>75)      
$retstr .= wrap_tags($str) . $br;
//$retstr .=$str . $br;
//$retstr .=$str . $br;
else 
$retstr .=$str . $br;
$j++;
     }
//echo $j;
*/

return $retstr;
}


function 
wrap_tags($str) {
$i=0;
$tag_close '>';

$str_new='';
$str_remains=$str;

while (
strlen($str_remains) > 90) {
//echo $i."<br>". htmlspecialchars($str_remains)."<br><br>";
    
$pos strpos($str_remains$tag_close75); //
    
$str_new .= substr($str_remains,0,$pos+1)."\r\n";
//echo "<br>". htmlspecialchars($str_new)."<br><br><br>";
$str_remains substr($str_remains,$pos+1,strlen($str_remains));
$i++;
}
$str_new .=$str_remains;
   return 
$str_new;
}


function 
better_wordwrap($str,$cols,$cut){
   
$tag_open '<';
   
$tag_close '>';
   
$count 0;
   
$in_tag 0;
   
$str_len strlen($str);
   
$segment_width 0;
 
   for (
$i=$i<=$str_len $i++){
       if (
$str[$i] == $tag_open) {
           
$in_tag++;
       } elseif (
$str[$i] == $tag_close) {
           if (
$in_tag 0) {
               
$in_tag--;
           }
       } else {
           if (
$in_tag == 0) {               
               
$segment_width++;
               if ((
$segment_width $cols) && ($str[$i] == " ")) {
                 
$str substr($str,0,$i).$cut.substr($str,$i+1,$str_len-1);
                 
$i += strlen($cut);
                 
$str_len strlen($str);
                 
$segment_width 0;
               }
           }
       }
   }
   return 
$str;
}


?>


Pavel Antonov 07.10.2006 16:36

Цитата:

Сообщение от Tod
А с помощью там какого-то HTMLparser ничего сделать нельзя? может как-то тэги поубирать из текста просто... ? или точно нет?))

Убрать весь HTML очень просто: stdWrap.stripHtml = 1

А вот сделать crop и оставить HTML - это уже задача не простая.

Tod 07.10.2006 18:35

валерий, функцию подцепить так и не удалось... прописал как ты говорил - вылездла какая-то ошибка, да и работать в Ts она упорно отказывалась... в общем, проблема решена и разбираться где именно я ошибся при подключении пхп функции буду в другой раз:)
павел, спасибо! это именно то, что нужно!!!


Часовой пояс GMT +4, время: 06:02.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot