#php
На stackoverflow в одном из ответов (https://ru.stackoverflow.com/a/190992/232533) нашел код для вставки в php с помощью которого можно обрезать строку по определенному количеству символов и добавить троеточие в конце. Вот найденный код : {$text1 = "Допустим здесь ваш текст из 1000 символов"; $text = mb_substr($text1,0,140, 'UTF-8'); //140 это кол. знаков $str_count = substr_count($text," "); // возвращает количество пробелов $text = explode(" ", $text1); //количество слов for($i=0;$i<$str_count; $i++){ echo $text[$i].' '; } echo "...";} Со слов автора данного кода, этот код не будет обрезать слова (по среди слова), а количество символов не будет превышать указанное количество и будет добавлено троеточие после обрезного текста. В моем php файле (весь код файла ниже) есть строка: 'item_intro'=>mb_strimwidth(strip_tags($row->introtext,''.$allow_tags.''),0,$chars, "..."), с помощью которой удалось обрезать строку по количеству символов (значение берется из настроек модуля и указано в переменной $chars)и после обрезки добавить троеточие после текста. Вроде все хорошо текст режиться троеточие добовляеться, но проблема в том, что слова могут обрезаться по середине слова, а хотелось бы чтобы в тексте до троеточия были только целые слова, что вроде как возможно сделать с помощью найденного кода (указан выше). У меня к сожалению не хватает знаний, сколько не бился, как прикрутить найденный код к моему php файлу. Помогите пожалуйста грамотно добавить найденный код в мой php-файл Мой исходный php файл: get('id'); global $aid; $aid = $user->get('aid', 0); $contentConfig = JComponentHelper::getParams( 'com_content' ); $access2 = !$contentConfig->get('shownoauth'); $nullDate = $db->getNullDate(); $date = JFactory::getDate(); if(intval(JVERSION) >= 3 ){ $now = $date->toSql() ; }else{ $now = $date->toMySQL(); } /* prepare default module params */ $yj_mod_name = basename(dirname(__FILE__));// 10-8-2011 $item_source = $params->get ('item_source',1);// 10-8-2011 switch ($item_source) { case 1 : require('modules/'.$yj_mod_name.'/yjme/get_joomla.php'); require_once('modules/'.$yj_mod_name.'/yjme/jomfunctions.php'); break; case 2: require('modules/'.$yj_mod_name.'/yjme/get_k2.php'); require_once('modules/'.$yj_mod_name.'/yjme/k2functions.php'); break; } // this is the main array for k2/joomla news items. both use same vars for ouptut $main_yj_arr = array(); foreach ( $load_items as $row ) { switch ($item_source) { case 1 : $item_url = yjme_get_url($row); $img_url = yjme_art_image($row); $cat_url = yjme_get_cat_url($row); $author_url = yjme_get_author_url($row); $advert_url = yjme_advert($row); $advert_img = yjme_advert_img($row); $item_media = yjme_media($row); $item_hook = yjme_hookon($row); $item_playlist = yjme_playlist($row); if(JPluginHelper::getPlugin('system', 'jcomments')){ $config = JCommentsFactory::getConfig(); $categories = $config->get('enable_categories'); $ids = explode(',', $categories); if(in_array($row->catid,$ids)){ //print_r($ids); $comments_on = 1; $comments_count = $row->ccount; }else{ $comments_on = 0; $comments_count = 0; } }else{ $comments_on = 0; $comments_count = 0; } break; case 2: $img_url = k2_yjme_art_image($row); $item_url = k2_yjme_get_url($row); $cat_url = k2_yjme_get_cat_url($row); $author_url = k2_yjme_get_author_url($row); $advert_url = k2_yjme_advert($row); $advert_img = k2_yjme_advert_img($row); $item_media = k2_yjme_media($row); $item_hook = k2_yjme_hookon($row); $item_playlist = k2_yjme_playlist($row); $comments = json_decode($row->categoryparams); if(isset($comments->itemComments)){ $comments_on = $comments->itemComments; $comments_count = $row->ccount; }else{ $comments_on = 0; $comments_count = 0; } break; } $yj_get_items = array( 'item_title' => htmlspecialchars($row->title, ENT_QUOTES, 'UTF-8'), 'item_url' => $item_url, 'item_intro' => mb_strimwidth(strip_tags($row->introtext,''.$allow_tags.''),0,$chars, "..."), 'img_url' => $img_url, 'cat_title' => htmlspecialchars($row->cattitle, ENT_QUOTES, 'UTF-8') , 'cat_url' => $cat_url, 'item_author' => $row->username, 'item_author_rn' => $row->realname, 'author_url' => $author_url, 'item_date' => JHTML::_('date', $row->created,JText::_('YJ_DATE_FORMAT')), 'item_id' => $row->id, 'advert_url' => $advert_url, 'advert_img' => $advert_img, 'item_hits' => $row->hits, 'item_likes' => $row->likes, 'item_comments' => $comments_on, 'comments_count' => $comments_count, 'item_media' => $item_media, 'item_hook' => $item_hook, 'item_playlist' => $item_playlist, ); $main_yj_arr[] = $yj_get_items; } return $main_yj_arr; } } } ?> Если приведенный выше найденный код не совсем подходит для решения моей задачи, буду признателен за решение, как это можно реализовать по другому.
Ответы
Ответ 1
А у меня получилось так: $length) { $repl = mb_substr($repl, 0, $length) . '...'; } else if ($lr < $lt) { $repl .= '...'; } return $repl; } ?>Длина исходной строки: .
До скольки символов обрезать | Результат |
---|---|
$i | ".reduction($text, $i)." |