tet Опубликовано 30 июня, 2014 Жалоба Поделиться Опубликовано 30 июня, 2014 Здравствуйте. А есть ли возможность обрезать текст по количеству символов, но до точки?Хочу products.tpl отобразить часть описания товара, но без обрезки на самом интересном.Сейчас:Наши раскладушки - самые раскладушные. Выпускаются в 4-х цветах: чёрном, белом, красном и зелёном. Производитель - известная...Хочу:Наши раскладушки - самые раскладушные. Выпускаются в 4-х цветах: чёрном, белом, красном и зелёном. Насколько я понял, нужно писать свою функцию для smarty, не так ли? Цитата Ссылка на сообщение Поделиться на другие сайты
osben Опубликовано 30 июня, 2014 Жалоба Поделиться Опубликовано 30 июня, 2014 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 afterTwo Sisters Reunite after---Two Sisters Reunite after EighTwo Sisters Reunite after E...Two Sisters Re..ckout Counter. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 30 июня, 2014 Жалоба Поделиться Опубликовано 30 июня, 2014 {$product->description|strip_tags|truncate:150} где 150 кол-во символов, или используйте краткое описание для вывода текста в списке товаров. Цитата Ссылка на сообщение Поделиться на другие сайты
tet Опубликовано 30 июня, 2014 Автор Жалоба Поделиться Опубликовано 30 июня, 2014 Оба ответа - мимо.Как видно из темы, я и так использую модификатор truncate, который к решению задачи никак не подходит. На выходе получаю неосмысленный текст. Мне нужно обрезать текст без использования truncate, строго до точки (например, два предложения) Цитата Ссылка на сообщение Поделиться на другие сайты
tet Опубликовано 30 июня, 2014 Автор Жалоба Поделиться Опубликовано 30 июня, 2014 Лучше здесь пишите. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 30 июня, 2014 Жалоба Поделиться Опубликовано 30 июня, 2014 Оба ответа - мимо. Как видно из темы, я и так использую модификатор truncate, который к решению задачи никак не подходит. На выходе получаю неосмысленный текст. Мне нужно обрезать текст без использования truncate, строго до точки (например, два предложения)Ну так что Вам мешает использовать в шаблоне вывод не полного а краткого описания товара с нужным текстом? Не понимаю ваших методов усложнения. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 30 июня, 2014 Жалоба Поделиться Опубликовано 30 июня, 2014 Лучше здесь пишите.Здесь этот гражданин ничего толкового бесплатно не напишет. Цитата Ссылка на сообщение Поделиться на другие сайты
tet Опубликовано 30 июня, 2014 Автор Жалоба Поделиться Опубликовано 30 июня, 2014 Ну так что Вам мешает использовать в шаблоне вывод не полного а краткого описания товара с нужным текстом?Не понимаю ваших методов усложнения.Лень. Цитата Ссылка на сообщение Поделиться на другие сайты
tet Опубликовано 30 июня, 2014 Автор Жалоба Поделиться Опубликовано 30 июня, 2014 Вот моё решение.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} Цитата Ссылка на сообщение Поделиться на другие сайты
tet Опубликовано 30 июня, 2014 Автор Жалоба Поделиться Опубликовано 30 июня, 2014 Такое решение сократит описание категории до 280 символов, затем найдёт последнюю точку с конца и удалит всё, что после неё.Вопрос у меня другой: как быть, если предложение оканчивается на знак вопроса или восклицательный знак? Тут без регулярных выражений не обойтись. Если кто сможет, подправьте код. Цитата Ссылка на сообщение Поделиться на другие сайты
Tetra Опубликовано 18 декабря, 2017 Жалоба Поделиться Опубликовано 18 декабря, 2017 И нихуя никто не смог. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 18 декабря, 2017 Жалоба Поделиться Опубликовано 18 декабря, 2017 И нихуя никто не смог.Неадекватам тут не место, вон двери вон на**р P.S. Для слепых: решение в самом верху топика. Цитата Ссылка на сообщение Поделиться на другие сайты
Tetra Опубликовано 18 декабря, 2017 Жалоба Поделиться Опубликовано 18 декабря, 2017 Ишь какой дерзкий. Внимательней надо быть, никто код не исправил. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 18 декабря, 2017 Жалоба Поделиться Опубликовано 18 декабря, 2017 Ишь какой дерзкий. Внимательней надо быть, никто код не исправил.Это ты резкий, дерзкий как понос мерзкий. Цитата Ссылка на сообщение Поделиться на другие сайты
madison21 Опубликовано 17 мая, 2018 Жалоба Поделиться Опубликовано 17 мая, 2018 А я пытался найти решение как обрезать не по количеству символов, а по количеству слов..Чтоб например можно было брать только первое слово.но не нашёл.. видимо такой нет функции в truncate Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 17 мая, 2018 Жалоба Поделиться Опубликовано 17 мая, 2018 если первое слово - то можно что то типа такого: {$words = ' '|explode:($my_string|trim)} Первое слово: {$words[0]} если хотите что то универсальней, то лучше сделать отдельную функцию для smarty.Можете эту взять https://gist.github.com/darryl-snow/3817802 если не хотите отдельную функцию делать - то можете воспользоватся ф-ми php.Вам поможет: explode array_slice implode, регулярные выражения(если знаете) так же может быть полезна функция smarty: count_words (считает количество слов) Цитата Ссылка на сообщение Поделиться на другие сайты
madison21 Опубликовано 17 мая, 2018 Жалоба Поделиться Опубликовано 17 мая, 2018 если первое слово - то можно что то типа такого: {$words = ' '|explode:($my_string|trim)} Первое слово: {$words[0]} если хотите что то универсальней, то лучше сделать отдельную функцию для smarty.Можете эту взять https://gist.github.com/darryl-snow/3817802 если не хотите отдельную функцию делать - то можете воспользоватся ф-ми php.Вам поможет: explode array_slice implode, регулярные выражения(если знаете) так же может быть полезна функция smarty: count_words (считает количество слов) Благодарю за наводку и примеры.Буду разбираться.. Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 24 января, 2019 Жалоба Поделиться Опубликовано 24 января, 2019 Друзья, а как сократить количество символов в свойствах товара, в данном коде: <td>{if {$compare_products.{$product->id}.{$f.id}}}{$compare_products.{$product->id}.{$f.id}}{else}-{/if}</td> Добавляю из того, что выше, ничего не происходит. Подскажите, пожалуйста.Спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 24 января, 2019 Жалоба Поделиться Опубликовано 24 января, 2019 Друзья, а как сократить количество символов в свойствах товара, в данном коде: <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} Ведь не известно что у вас там хранится в массиве. Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 25 января, 2019 Жалоба Поделиться Опубликовано 25 января, 2019 Для начала распечатайте результат и скиньте сюда, вот вам в помощь: {$compare_products.{$product->id}.{$f.id}|print_r}Ведь не известно что у вас там хранится в массиве.Спасибо за ответ.В данном случае добавляет "1" ко всем строкам Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 25 января, 2019 Жалоба Поделиться Опубликовано 25 января, 2019 Для начала распечатайте результат и скиньте сюда, вот вам в помощь: {$compare_products.{$product->id}.{$f.id}|print_r}Ведь не известно что у вас там хранится в массиве.Ваша подсказка помогла )) {$compare_products.{$product->id}.{$f.id}|strip_tags|truncate:70} Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.