Привет всем!
Есть задача: сделать ссылкой только часть заголовка, при выводе его во вьюс.
пример на картинке
при создании ноды будет достаточно обрамить ссылку символами-сепараторами, в моем случае это *
для начала приводим вывод заголовка в виде <путь><символ сепаратор><заголовок> через field rewrite модуля вьюс.
затем создаем шаблон вывода поля вьюс, для этого в расширенных настройках представления заходим в пункт меню "Theme: Information"
копируем имя файла для нашей версии вывода.
в моем случае это views-view-field--page--title.tpl.php, так как страниц вывода несколько.
создаем в папке templates вашей темы текстовый файл с именем views-view-field--page--title.tpl.php, в который помещаем код обработки ссылки
<?php
$mas=explode('|',$output);
if (substr_count($mas[1], '*')==2):
$mas1=explode('*',$mas[1]);
print $mas1[0];
?>
<a href=<?php print $mas[0]?>><?php print $mas1[1] ?></a>
<?php print $mas1[2] ?>
<?php else: ?>
<a href=<?php print $mas[0]; ?>><?php print $mas[1]; ?></a>
<?php endif; ?>
после этого необходимо отсканировать измененные файлы.
остается только убрать лишние символы при выводе заголовка ноды, для этого подойдет функция str_replace.
например: $title = str_replace('*',' ',$title);
таким образом я реализовал поставленную задачу, с удовольствие выслушаю ваши комментарии и замечания.
Комментарии
У вас вывод полей или отрендеренных тизеров?

просто допишите в views-view-field--page--title.tpl.php
<?php
$title_peaces = explode('*', $row->node_title);
if (isset($title_peaces[1])) {
$output = $title_peaces[0] . ' ' . l($title_peaces[1], 'node/' . $row->nid);
} else {
$output = l($title_peaces[0], 'node/' . $row->nid);
}
?>
спасибо за помощь, я уже сам разобрался и написал подробный мануал по проведенной работе, вдруг кому пригодится.
Поздравляю!
В шаблонах Views как правило уже есть всё необходимое. Например, в вашем случае
$row
, так что можно было обойтись без рирайтаЭто конечно все хорошо, но в базе как я понимаю будет оставаться заголовок с сепараторами, а это плохо.
Было бы лучше если брать ссылкой например последнии три слова в предложении.
да, но тогда не достигнется гибкость, то бить все придется стандартизировать, а смысл как раз в том, что можно выделить определенную часть ссылки или всю ссылку целиком
Мне кажется тогда должна быть следующая конструкция:
1. Поле title
2. Поле field_fancytitle
В форме создания ноды мы заполняем одно поле например field_fancytitle, заполняем его с сепаратором, значение поля field_fancytitle автоматически передается нашему заголовку, только через str_replace('*',' ',$title).
Т.е. будет тип материала например news стандартный заголовок мы уберем ансетом, и всегда будем заполнять кастомный, с кавычками или без не важно, будут кавычки, будет резаться заголовок, не будет, будет стандартный.
я пробовал сейчас нечто подобное сделать темизацией $form['title']['#value'] = str_replace('*',' ',$form['field_fancytitle ']['0']['value']['#value']);
но у меня ничего не вышло. Кто знает как это реализовать или возможно более красивый путь?
ps а вообще по мне так отрезать последнии три слова самое то! Только у меня тоже пока ничего не выходит.
по сути вы предлагаете излишнюю избыточность данных, то есть в базе будут храниться 2 заголовка, при этом мой алгоритм учитывает, что при отсутствии сепаратора выделять ссылку полностью.
Ну для меня ничего страшного нет в одном лишнем поле. А хранить все титлы с сепараторами в базе и потом ковырять шаблон node page rss и многое другое через что и кому вы отдаете новости, проблемно. Для небольшого блога, Ваше решение оптимально, но для контентного сайта, думаю нет.
возникла идея.
хранить не поле целиком, а 2 числа, начало и конец ссылки.
на досуге покопаюсь, как выдастся свободная минута.
Может быть. Но я все же думаю что от одного лишнего поля cck которой к тому же принадлежит только одному типу материала страшного не будет. И отказаться от этой идеи будет весьма просто просто удалив это поле и вернув оригинальное поля для заголовка.
Было бы очень любопытно посмотреть если у Вас получиться модернизировать Ваш метод.