[РЕШЕНО]решение для выделения части ссылки во вьюс

Главные вкладки

Аватар пользователя nyhm nyhm 2 февраля 2012 в 9:58

Привет всем!
Есть задача: сделать ссылкой только часть заголовка, при выводе его во вьюс.
пример на картинке

при создании ноды будет достаточно обрамить ссылку символами-сепараторами, в моем случае это *
для начала приводим вывод заголовка в виде <путь><символ сепаратор><заголовок> через 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);
таким образом я реализовал поставленную задачу, с удовольствие выслушаю ваши комментарии и замечания.

Комментарии

Аватар пользователя kalabro kalabro 2 февраля 2012 в 12:50

просто допишите в 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);
}
?>
Аватар пользователя nyhm nyhm 2 февраля 2012 в 12:50

"kalabro" wrote:

просто допишите в views-view-field--page--title.tpl.php


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

Аватар пользователя kalabro kalabro 2 февраля 2012 в 12:57

Поздравляю!
В шаблонах Views как правило уже есть всё необходимое. Например, в вашем случае $row, так что можно было обойтись без рирайта Smile

Аватар пользователя Folcon Folcon 3 февраля 2012 в 9:46

Это конечно все хорошо, но в базе как я понимаю будет оставаться заголовок с сепараторами, а это плохо.
Было бы лучше если брать ссылкой например последнии три слова в предложении.

Аватар пользователя nyhm nyhm 3 февраля 2012 в 9:48

"Folcon" wrote:

Это конечно все хорошо, но в базе как я понимаю будет оставаться заголовок с сепараторами, а это плохо.
Было бы лучше если брать ссылкой например последнии три слова в предложении.

да, но тогда не достигнется гибкость, то бить все придется стандартизировать, а смысл как раз в том, что можно выделить определенную часть ссылки или всю ссылку целиком

Аватар пользователя Folcon Folcon 3 февраля 2012 в 10:06

Мне кажется тогда должна быть следующая конструкция:
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 а вообще по мне так отрезать последнии три слова самое то! Только у меня тоже пока ничего не выходит.

Аватар пользователя nyhm nyhm 3 февраля 2012 в 10:12

"Folcon" wrote:
Мне кажется тогда должна быть следующая конструкция:
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 заголовка, при этом мой алгоритм учитывает, что при отсутствии сепаратора выделять ссылку полностью.

Аватар пользователя Folcon Folcon 3 февраля 2012 в 10:16

Ну для меня ничего страшного нет в одном лишнем поле. А хранить все титлы с сепараторами в базе и потом ковырять шаблон node page rss и многое другое через что и кому вы отдаете новости, проблемно. Для небольшого блога, Ваше решение оптимально, но для контентного сайта, думаю нет.

Аватар пользователя nyhm nyhm 3 февраля 2012 в 10:18

"Folcon" wrote:
Ну для меня ничего страшного нет в одном лишнем поле. А хранить все титлы с сепараторами в базе и потом ковырять шаблон node page rss и многое другое через что и кому вы отдаете новости, проблемно. Для небольшого блога, Ваше решение оптимально, но для контентного сайта, думаю нет.

возникла идея.
хранить не поле целиком, а 2 числа, начало и конец ссылки.
на досуге покопаюсь, как выдастся свободная минута.

Аватар пользователя Folcon Folcon 3 февраля 2012 в 10:23

Может быть. Но я все же думаю что от одного лишнего поля cck которой к тому же принадлежит только одному типу материала страшного не будет. И отказаться от этой идеи будет весьма просто просто удалив это поле и вернув оригинальное поля для заголовка.
Было бы очень любопытно посмотреть если у Вас получиться модернизировать Ваш метод.