Обрезаем названия материалов в списках views
Вы создали новый вид (с помощью модуля views), который выводит список название всех материалов Вашего сайта в виде ссылок. Однако нередко названия бывают очень длинными, что может не вписываться в дизайн Вашего сайта. Для этого есть решение и в рамках модуля views, но как часто бывает не все нюансы могут быть решены в рамках модуля.
Чтобы обрезать самые длинные названия материалов в Вашем виде, необходимо создать новый шаблон views:
Перейдите на вкладку "Изменить вид" странице /admin/build/views/edit/test) и нажмите кнопку "Theme: Information”.
Views предоставляет нам список возможных шаблонов для данного вида, которые можно использовать. Нас, прежде всего, интересует шаблон, который отвечает за вывод самого списка названий материалов. Это шаблон views-view-field--test--title.tpl.php. Создаем одноименный файл в папке темы Вашего сайта. В нем прописываем следующий код:
<?php
// $Id: views-view-field.tpl.php,v 1.1 2008/05/16 22:22:32 merlinofchaos Exp $
/**
* This template is used to print a single field in a view. It is not
* actually used in default Views, as this is registered as a theme
* function which has better performance. For single overrides, the
* template is perfectly okay.
*
* Variables available:
* - $view: The view object
* - $field: The field handler object that can process the input
* - $row: The raw SQL result that can be used
* - $output: The processed output that will normally be used.
*
* When fetching output from the $row, this construct should be used:
* $data = $row->{$field->field_alias}
*
* The above will guarantee that you'll always get the correct data,
* regardless of any changes in the aliasing that might happen if
* the view is modified.
*/
?>
<?php print $output; ?>
Теперь, когда шаблон готов, мы можем изменять конечное отображение нашего вида.
Наш список названий материалов выводиться через переменную
<?php print $output; ?>
Чтобы обрезать конечное отображаемое пользователям название материалов, мы используем функцию truncate_utf8, изменив код в шаблоне views-view-field--test--title.tpl.php на следующий:
<?php
$output = truncate_utf8($output,25,FALSE,TRUE);
print $output;
?>
Однако, хотя это будет работать хорошо, если список названий будет отображаться просто как текст, а не как ссылки на соответствующие материалы. названия просто (не-Link) текст.
Это происходит потому, что функция truncate_utf8 подсчитывает длину всей строки, в том числе и HTML, а не только тот текст который мы видим на экране. Например, следующее название материала будет обрезано некорректно
<a href="/node/1" title="My Test Page With A Really Really Really Really Really Really Really Really Really Really Really Really Really Really Long Title" alt="My Test Page With A Really Really Really Really Really Really Really Really Really Really Really Really Really Really Long Title">My Test Page With A Really Really Really Really Really Really Really Really Really Really Really Really Really Really Long Title</a>
После обрезания текста:
<a href="/node/1" tit ...
В целях успешной процедура усечения названия, мы должны сделать так, чтобы функция truncate_utf8 обрезала только конечный текст, не трогая html код. Мы можем сделать это, используя следующий код в наш новый шаблон:
<?php
$title = strip_tags($output); //title (no tags)
$title_trunc = truncate_utf8($title,25,FALSE,TRUE); //title (no tags) truncated
$output = str_replace($title,$title_trunc,$output); //new link
print $output;
?>
Таким образом мы добились нужного результата и наш список названий имеет одинаковую длину, а все длинные названия материалов корректно обрезаются.
Оригинал статьи: http://www.startdrupal.com/node/145