Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

Здравствуйте. А есть ли возможность обрезать текст по количеству символов, но до точки?

Хочу products.tpl отобразить часть описания товара, но без обрезки на самом интересном.

Сейчас:

Наши раскладушки - самые раскладушные. Выпускаются в 4-х цветах: чёрном, белом, красном и зелёном. Производитель - известная...

Хочу:

Наши раскладушки - самые раскладушные. Выпускаются в 4-х цветах: чёрном, белом, красном и зелёном.

 

Насколько я понял, нужно писать свою функцию для smarty, не так ли?

Ссылка на сообщение
Поделиться на другие сайты

http://www.smarty.net/docs/en/language.modifier.truncate.tpl
 

where template is:

{$articleTitle}
{$articleTitle|truncate}
{$articleTitle|truncate:30}
{$articleTitle|truncate:30:""}
{$articleTitle|truncate:30:"---"}
{$articleTitle|truncate:30:"":true}
{$articleTitle|truncate:30:"...":true}
{$articleTitle|truncate:30:'..':true:true}
 

This will output:

Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after...
Two Sisters Reunite after
Two Sisters Reunite after---
Two Sisters Reunite after Eigh
Two Sisters Reunite after E...
Two Sisters Re..ckout Counter.
 

Ссылка на сообщение
Поделиться на другие сайты

{$product->description|strip_tags|truncate:150} где 150 кол-во символов, или используйте краткое описание для вывода текста в списке товаров.

Ссылка на сообщение
Поделиться на другие сайты

Оба ответа - мимо.

Как видно из темы, я и так использую модификатор truncate, который к решению задачи никак не подходит. На выходе получаю неосмысленный текст. Мне нужно обрезать текст без использования truncate, строго до точки (например, два предложения)

Ссылка на сообщение
Поделиться на другие сайты

Оба ответа - мимо.

Как видно из темы, я и так использую модификатор truncate, который к решению задачи никак не подходит. На выходе получаю неосмысленный текст. Мне нужно обрезать текст без использования truncate, строго до точки (например, два предложения)

Ну так что Вам мешает использовать в шаблоне вывод не полного а краткого описания товара с нужным текстом?

Не понимаю ваших методов усложнения.

Ссылка на сообщение
Поделиться на другие сайты

Ну так что Вам мешает использовать в шаблоне вывод не полного а краткого описания товара с нужным текстом?

Не понимаю ваших методов усложнения.

Лень.

Ссылка на сообщение
Поделиться на другие сайты

Вот моё решение.

modifier.trim.php

<?php
function smarty_modifier_trim($string, $length = 80, $etc = '.')
{
    if ($length == 0)
        return '';
    if (is_callable('mb_strlen')) {
        if (mb_detect_encoding($string, 'UTF-8, ISO-8859-1') === 'UTF-8') {
            // $string has utf-8 encoding
            if (mb_strlen($string) > $length) {
                $length -= min($length, mb_strlen($etc));
                $string = preg_replace('/\s+?(\S+)?$/u', '', mb_substr($string, 0, $length + 1));
				$string = substr ($str, 0, strrpos($str, $etc)+1);
            } else {
                return $string;
            } 
        } 
    } 
    // $string has no utf-8 encoding
    if (strlen($string) > $length) {
        $length -= min($length, strlen($etc));
        $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1));
		$string = substr ($str, 0, strrpos($str, $etc)+1);
    } else {
        return $string;
    } 
} 

?>

Пример использования:

{$category->description|strip_tags|trim:280}

Ссылка на сообщение
Поделиться на другие сайты

Такое решение сократит описание категории до 280 символов, затем найдёт последнюю точку с конца и удалит всё, что после неё.

Вопрос у меня другой: как быть, если предложение оканчивается на знак вопроса или восклицательный знак? Тут без регулярных выражений не обойтись. Если кто сможет, подправьте код.

Ссылка на сообщение
Поделиться на другие сайты
  • 3 года спустя...

И нихуя никто не смог.

Неадекватам тут не место, вон двери вон на**р :D

P.S. Для слепых: решение в самом верху топика.

Ссылка на сообщение
Поделиться на другие сайты

Ишь какой дерзкий. Внимательней надо быть, никто код не исправил.

Это ты резкий, дерзкий как понос мерзкий.
Ссылка на сообщение
Поделиться на другие сайты
  • 4 месяца спустя...

А я пытался найти решение как обрезать не по количеству символов, а по количеству слов..
Чтоб например можно было брать только первое слово.
но не нашёл.. видимо такой нет функции в truncate 

Ссылка на сообщение
Поделиться на другие сайты

если первое слово - то можно что то типа такого:

{$words = ' '|explode:($my_string|trim)}
Первое слово: {$words[0]}
 
если хотите что то универсальней, то лучше сделать отдельную функцию для smarty.
Можете эту взять https://gist.github.com/darryl-snow/3817802
 
 
если не хотите отдельную функцию делать - то можете воспользоватся ф-ми php.
Вам поможет: explode array_slice implode,  регулярные выражения(если знаете)
 
так же может быть полезна функция smarty: count_words (считает количество слов)
 
 
Ссылка на сообщение
Поделиться на другие сайты

 

если первое слово - то можно что то типа такого:

{$words = ' '|explode:($my_string|trim)}
Первое слово: {$words[0]}
 
если хотите что то универсальней, то лучше сделать отдельную функцию для smarty.
Можете эту взять https://gist.github.com/darryl-snow/3817802
 
 
если не хотите отдельную функцию делать - то можете воспользоватся ф-ми php.
Вам поможет: explode array_slice implode,  регулярные выражения(если знаете)
 
так же может быть полезна функция smarty: count_words (считает количество слов)
 
 

Благодарю за наводку и примеры.

Буду разбираться..

Ссылка на сообщение
Поделиться на другие сайты
  • 8 месяцев спустя...

Друзья, а как сократить количество символов в свойствах товара, в данном коде:

<td>{if {$compare_products.{$product->id}.{$f.id}}}{$compare_products.{$product->id}.{$f.id}}{else}-{/if}</td>

Добавляю из того, что выше, ничего не происходит. Подскажите, пожалуйста.

Спасибо!

Ссылка на сообщение
Поделиться на другие сайты

Друзья, а как сократить количество символов в свойствах товара, в данном коде:

 

<td>{if {$compare_products.{$product->id}.{$f.id}}}{$compare_products.{$product->id}.{$f.id}}{else}-{/if}</td>

Добавляю из того, что выше, ничего не происходит. Подскажите, пожалуйста.

Спасибо!

Для начала распечатайте результат и скиньте сюда, вот вам в помощь:

{$compare_products.{$product->id}.{$f.id}|print_r}

Ведь не известно что у вас там хранится в массиве.

Ссылка на сообщение
Поделиться на другие сайты

 

Для начала распечатайте результат и скиньте сюда, вот вам в помощь:

{$compare_products.{$product->id}.{$f.id}|print_r}

Ведь не известно что у вас там хранится в массиве.

Спасибо за ответ.

В данном случае добавляет "1" ко всем строкам

Ссылка на сообщение
Поделиться на другие сайты

 

Для начала распечатайте результат и скиньте сюда, вот вам в помощь:

{$compare_products.{$product->id}.{$f.id}|print_r}

Ведь не известно что у вас там хранится в массиве.

Ваша подсказка помогла ))

{$compare_products.{$product->id}.{$f.id}|strip_tags|truncate:70}
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...