truncate

#1 16 января 2014 в 00:50
Здравствуйте.Подскажите пожалуйста как вставить в php код truncate или как по другому ограничит кол-во символов здесь:
<? echo '<div clas="3d_rss">'.@$items[$i]['desc'].'</div>'; ?>

Вот скрипт полностью:
  1. <? $url=''; ;
  2. ?>
  3.  
  4. <?
  5. function startElementReader($parser, $name, $attrs) {
  6. global $tag, $rss;
  7. if ($name == 'RSS')
  8. $rss = '^RSS';
  9. elseif ($name == 'RDF:RDF')
  10. $rss = '^RDF:RDF';
  11.  
  12. $tag .= '^' . $name;
  13. }
  14.  
  15. function endElementReader($parser, $name) {
  16. global $tag;
  17. global $itemCount, $items;
  18. if ($name == 'ITEM') {
  19. $itemCount++;
  20. if (!isset($items[$itemCount])) $items[$itemCount] = array('title' => '', 'link' => '', 'desc' => '', 'pubdate' => '');
  21. }
  22.  
  23. $tag = substr($tag, 0, strrpos($tag, '^'));
  24. }
  25.  
  26. function characterDataReader($parser, $data) {
  27. global $tag, $chanTitle, $chanLink, $chanDesc, $rss, $imgTitle, $imgLink, $imgUrl;
  28. global $items, $itemCount;
  29.  
  30. $rssChannel = '';
  31. if ($data) {
  32. if ($tag == $rss . '^CHANNEL^TITLE') {
  33. $chanTitle .= $data;
  34. } elseif ($tag == $rss . '^CHANNEL^LINK') {
  35. $chanLink .= $data;
  36. } elseif ($tag == $rss . '^CHANNEL^DESCRIPTION') {
  37. $chanDesc .= $data;
  38. }
  39. if ($rss == '^RSS') $rssChannel = '^CHANNEL';
  40.  
  41. if ($tag == $rss . $rssChannel . '^ITEM^TITLE') {
  42. $items[$itemCount]['title'] .= $data;
  43. } elseif ($tag == $rss . $rssChannel . '^ITEM^LINK') {
  44. $items[$itemCount]['link'] .= $data;
  45. } elseif ($tag == $rss . $rssChannel . '^ITEM^DESCRIPTION') {
  46. $items[$itemCount]['desc'] .= $data;
  47. } elseif ($tag == $rss . $rssChannel . '^ITEM^PUBDATE') {
  48. $items[$itemCount]['pubdate'] .= $data;
  49. } elseif ($tag == $rss . $rssChannel . '^IMAGE^TITLE') {
  50. $imgTitle .= $data;
  51. } elseif ($tag == $rss . $rssChannel . '^IMAGE^LINK') {
  52. $imgLink .= $data;
  53. } elseif ($tag == $rss . $rssChannel . '^IMAGE^URL') {
  54. $imgUrl .= $data;
  55. }
  56. }
  57.  
  58. }
  59.  
  60. function parseRSSReader($url) {
  61. global $tag, $chanTitle, $chanLink, $chanDesc, $rss, $items, $itemCount, $imgTitle, $imgLink, $imgUrl;
  62. $chanTitle = '';
  63. $chanLink = '';
  64. $chanDesc = '';
  65. $imgTitle = '';
  66. $imgLink = '';
  67. $imgUrl = '';
  68. $tag = '';
  69. $rss = '';
  70.  
  71. global $items, $itemCount;
  72.  
  73. $itemCount = 0;
  74. $items = array(0 => array('title' => '', 'link' => '', 'desc' => '', 'pubdate' => ''));
  75.  
  76. $xml_parser = xml_parser_create();
  77. xml_set_element_handler($xml_parser, "startElementReader", "endElementReader");
  78. xml_set_character_data_handler($xml_parser, "characterDataReader");
  79.  
  80. @$fp = fopen($url, "r");
  81. $data = "";
  82. while (true) {
  83. @$datas = fread($fp, 4096);
  84. if (strlen($datas) == 0) {
  85. break;
  86. }
  87. $data .= $datas;
  88. }
  89.  
  90. @fclose($fp);
  91.  
  92. if ($data != '') {
  93. $xmlresult = xml_parse($xml_parser, $data);
  94. $xmlerror = xml_error_string(xml_get_error_code($xml_parser));
  95. $xmlcrtline = xml_get_current_line_number($xml_parser);
  96.  
  97. if ($xmlresult)
  98. displayDataReader();
  99. else
  100. print("Error parsing this feed !<br />Error: ".@$xmlError." , at line: ".@$xmlCrtline."");
  101. } else {
  102. print("Error while retriving feed ".$url."");
  103. }
  104.  
  105. xml_parser_free($xml_parser);
  106. }
  107.  
  108. function displayDataReader() {
  109. global $chanTitle, $chanLink, $chanDesc, $rss, $items, $itemCount, $imgTitle, $imgLink, $imgUrl;
  110. global $items, $itemCount;
  111. ?>
  112.  
  113. <!--<? echo '<h2><a href="'.$chanLink.'" target="_blank">'.$chanTitle.'</a></h2> ' ;?>-->
  114. <? echo '<a href="'.$imgLink.'" target="_blank"><img src="'.$imgUrl.'" alt="'.$imgTitle.'" /></a> '; ?>
  115. <!--<? echo $chanDesc;?>-->
  116. <?echo '<div style="clear:both"></div>'; ?>
  117.  
  118. <?
  119. for($i = 0;$i < 3;$i++) {
  120.  
  121. if(@$items[$i]['link']<>''){
  122. ?>
  123. <? echo '<h4><a href="'.@$items[$i]['link'].'" target="_blank"> '.@$items[$i]['title'].'</a></h4>'; ?>
  124. <? echo '<h5>'.@$items[$i]['pubdate'].'</h5>'; ?>
  125. <? echo '<div clas="3d_rss">'.@$items[$i]['desc'].'</div>'; ?>
  126.  
  127. <?
  128. }
  129. }
  130. ?>
  131. <?
  132. }
  133. parseRSSReader($url);
  134. ?>
  135. <?
  136. unset($items);
  137. ?>
  138.  
  139. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
#2 16 января 2014 в 01:31
#3 16 января 2014 в 01:41
Благодарствую, пойду колдовать. scratch
#4 16 января 2014 в 02:32
Посл того как вставил слетают стили.Может что то вернуть надо?
  1. <? echo '<div clas="3d_rss">'.mb_strimwidth(@$items[$i]['desc'], 0, 70, "...").'</div>'; ?>
#5 16 января 2014 в 02:53

слетают стили

Lora
Не стили слетают, а разметка, что там в $items[$i]['desc'] живет то?.. Впрочем судя по кол-ву оставленных знаков можно не заморачиваться и применить strip_tags
#6 16 января 2014 в 03:12
Кол-во знаков, так для теста.Будет думаю 150-200.В $items[$i]['desc'] текст из rss канала.Хорошо попробую strip_tags.И ещё.Там в начале скрипта ф-ция substr, они не могут конфликтовать?
#7 16 января 2014 в 03:18
  1. <? echo strip_tags(@$items[$i]['desc']); ?>
не помогает.
#8 16 января 2014 в 03:55
Может сначала очистить от тегов, потом обрезать? типа
  1. $txt = strip_tags(@$items[$i]['desc']);
  2. $txt = mb_substr($txt,0,150).'...';
  3. echo $txt;
  4.  
Одной строчкой <? echo mb_substr(strip_tags(@$items[$i]['desc']),0,150).'...'; ?>
#9 16 января 2014 в 05:07
Нашёл.Где-то float мешал. Поставил после дива clear:both и всё на место встало.Нет худа без добра.По ходу выучил две ф-ции. smileВсем большое спасибо, что помогли.
#10 16 января 2014 в 05:33
Вот, блин, всплыл нюанс.В том @$items[$i]['desc'] передаётся img тоже, когда оно есть в анонсах.И вот тогда видно ф-ция его тоже считает за символы, а текст почти не остаётся.Как можно ислючить img из ф-ции?
#11 16 января 2014 в 05:57
Возвращаемся к strip_tags(@$items[$i]['desc']); ))
#12 16 января 2014 в 06:39
Не получается так.Если вставляю
  1. <? echo strip_tags(@$items[$i]['desc']); ?>
то получается вообще непонятно что.Текст выводится и обрезанный и не обрезанный.Исключить что то в ф-ции не могу.Там нет тегов.
<div><img..>текст </div>
#13 16 января 2014 в 15:10
facepalm<?= mb_strimwidth(strip_tags($items[$i]['desc']), 0, 70, "..."); ?>
#14 16 января 2014 в 15:39
Pasha, Так вроде работает, текст и титл наместе, но кеш обновился видно и картинок в анонсах нет.Ну да Бог с ним, подожду, не пожар.Спасибо.
#15 16 января 2014 в 16:21
Ну а минус в профиле очевидно в знак благодарности?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.