Обрезать текст при просмотре списка для поля "Текст" аналогично "Текст HTML"

#1 17 мая 2016 в 23:36
Доброго времени суток, сообщество.
Вопрос:" Как обрезать текст при просмотре списка для поля "Текст" также как это реализовано для поля "Текст HTML"?
Вопрос в том числе и об удалении форматирования — не секрет что в поле "текст" легко вставляется код.
Спасибо
#2 9 марта 2017 в 16:28
У меня более реальная проблема.
Поле текст "Обрезать текст при просмотре списка"

указываешь, например, 600 символов
но перед текстом вставляешь картинку или видео
и они тоже обрезаются! Выводится только текст

как это вылечить?
#3 9 марта 2017 в 16:36
@iKrym, видео и картинки отдельными полями + чекбокс "показывать в списке"
#4 14 марта 2017 в 17:30

Вопрос:" Как обрезать текст при просмотре списка для поля "Текст" также как это реализовано для поля "Текст HTML" ?

Алексей

Тоже интересует, как это сделать?
#6 14 марта 2017 в 20:03
я в php не силен — сделал так:

.content_list_item .ft_text.f_content{
max-height:60px;
overflow:hidden;
margin-top:-20px;
}
.content_list_item .ft_text.f_content:before{
content:"";
display:block;
height:15px;
position:relative;
top:50px;
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0), #fff 75%)
}

* к своему проекту доработать напильником
#7 14 марта 2017 в 22:08


Можно попробовать вытянуть поле из цикла и дальше ruseller.com/lessons.php?id=1769

Jestik

Спасибо, но для меня пока сложновато ))
#8 14 марта 2017 в 22:09


я в php не силен — сделал так:

.content_list_item .ft_text.f_content{
max-height:60px;
overflow:hidden;
margin-top:-20px;
}
.content_list_item .ft_text.f_content:before{
content:"";
display:block;
height:15px;
position:relative;
top:50px;
background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0), #fff 75%)
}

* к своему проекту доработать напильником

Алексей


Спасибо!
Пожалуйста, можно поподробнее, в каком файле и где именно вставить этот код или заменить?
#9 14 марта 2017 в 23:56
@Igoreha247, уточните: вам при просмотре списка записей типа контента обрезать нужно?
#10 15 марта 2017 в 11:47


@Igoreha247, уточните: вам при просмотре списка записей типа контента обрезать нужно?

Олег Васильевич я

Да, в списке, тип контента "Текст". Чтобы при просмотре списка не отображался весь текст, а был обрезан до нужной длины, как сделано для типа поля "Текст HTML" там есть "Обрезать текст при просмотре списка". Странно, что это сразу не сделано для типа поля "Текст".
#11 15 марта 2017 в 12:10
Если устраивает работа встроенной в коробку функции, можете так попробовать:
В нужном файле списков (templates\default\content\ файлы содержащие в названии _list) найти:
  1.  
  2. <?php echo $field['handler']->setItem($item)->parseTeaser($item[$field['name']]); ?>
  3.  
заменить на:
  1.  
  2. <?php if($field['name'] == 'shorttext') { ?>
  3. <?php echo string_short($field['handler']->setItem($item)->parseTeaser($item[$field['name']]), 50); ?>
  4. <?php } else { ?>
  5. <?php echo $field['handler']->setItem($item)->parseTeaser($item[$field['name']]); ?>
  6. <?php } ?>
  7.  
Где:
shorttext — имя поля, текст которого будет обрезан,
50 — количество знаков (1:1 работает только до первой точки)
#12 15 марта 2017 в 14:22


Если устраивает работа встроенной в коробку функции, можете так попробовать:
В нужном файле списков (templates\default\content\ файлы содержащие в названии _list) найти:

  1.  
  2.  
  3.  
заменить на:
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
Где:
shorttext — имя поля, текст которого будет обрезан,
50 — количество знаков (1:1 работает только до первой точки)

Олег Васильевич я


Спасибо! Ваш вариант работает.

Тоже разобрался, вот ещё вариант. Я изменил сам тип поля "Текст" как в типе поля "Текст HTML" Так можно в админке устанавливать количество знаков.

В файл sistem/fields/text.php добавил строки из sistem/fields/html.php :

new fieldNumber('teaser_len', array(
'title' => LANG_PARSER_HTML_TEASER_LEN,
'hint' => LANG_PARSER_HTML_TEASER_LEN_HINT,
)),
и
public function parseTeaser($value) {
$max_len = $this->getOption('teaser_len');
if ($max_len){
$url = href_to($this->item['ctype']['name'], $this->item['slug']. ".html");
$value = string_short($value, $max_len);
$value .= ' <a class="read-more" href="'.$url.'">'.LANG_MORE.'</a>';
}
return $value;
}
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.