Разумнее перенос слов со Smarty? - PullRequest
1 голос
/ 18 февраля 2009

Я пытаюсь найти способ обернуть длинный заголовок после определенного количества слов, основываясь на общем количестве символов заголовка. Моя цель - сделать нижнюю строку переносимого текста длиннее верхней, чтобы улучшить читаемость.

Я бы хотел использовать Smarty, чтобы найти количество символов заголовка, а затем решить, как долго делать первую строку, основываясь на размере шрифта по умолчанию и ширине содержащего элемента. Но я не программист и не знаю лучшего способа создания массивов, циклов foreach, счетчиков итераций и прочего, что, вероятно, необходимо для этого.

Я в основном пытаюсь:

  1. Найдите общее количество символов заголовка, используя {$item.name|count_characters:true}

  2. Если общее количество символов составляет от 60 до 100 символов, добавьте тег br в конце первого слова, которое заканчивается после 30 символов.

1 Ответ

2 голосов
/ 18 февраля 2009

Я считаю, что вы можете сделать это с помощью register_modifier () . По сути, вы пишете функцию php для вставки тега, а затем регистрируете его как модификатор. После того, как вы это сделаете, используйте его в smarty, как и другие модификаторы, например:

{$variable|break_title}

В общем, лучше не делать сложное форматирование в шаблонах smarty. Чем ближе ваши шаблоны к ванильному html, тем лучше.

Возможная реализация:

function break_title($title) {
   return wordwrap($title, 59, '<br />\n');
}

/* later */
$smarty->register_modifier('break_title', 'break_title');

Если вы хотите принять во внимание размер шрифта, вы можете установить глобальную переменную конфигурации, указывающую количество символов, которые нужно разбить.

EDIT: Как упоминает комментатор, если существует существующая функция php, которая делает то, что вы хотите, вы можете получить к ней доступ без регистрации функции:

{$variable|wordwrap:59:"<br />\n"}
...