Как обрезать теги в тизере? Решение есть!

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

Аватар пользователя smile smile 29 ноября 2010 в 17:32

Всем привет!

Я думаю, что вам всем, а если не всем, то многим известна проблема: пользователи публикуют контент в том формате, в котором им (пользователям) хочется. Иной раз на выходе выглядит это презабавнейше: в рамках одной вьюхи или странички стили тизеров "пляшут" - нода жирным, нода италиком, нода с подчеркиванием, нода с "битым" куском видео (object) и т.д. Выглядит не очень, а все теги не запретишь. Что же делать?

Пишем функцию в template.php:

function ИМЯ ТЕМЫ_preprocess_node(&$vars, $hook) {
// Strip tags from teaser
if ($vars['teaser']) {
$coreteaser = $vars['node']->content['body']['#value'];
if ($coreteaser) {
$teaser = $vars['content'];
$start = strpos($teaser, $coreteaser);
$length = strlen($coreteaser);
$replacement = strip_tags($coreteaser);
$vars['content'] = substr_replace($teaser, $replacement, $start, $length);
}
}
}

Отлично. Поубивали все теги! Верните мне переносы строки и картинки, с3№;%!

Нет проблем, шеф!

Меняем:
$replacement = strip_tags($coreteaser);

на

$replacement = strip_tags($coreteaser, '
');

Нет, все равно фигня какая-то. Прикрепеленные темы и голосования побились!
И снова никаких проблем!

Дописываем:
if(($vars['sticky'])|| ($vars['node']->type == 'poll')) {
//do nothing, leave all tags
}
else {

и в самом конце, после $vars['content'] = substr_replace($teaser, $replacement, $start, $length);
}
}

еще одну }

В сборе получаем:
function ИМЯТЕМЫ_preprocess_node(&$vars, $hook) {
if(($vars['sticky'])|| ($vars['node']->type == 'poll')) {
//do nothing, leave all tags
}
else {
// Strip tags from teaser
if ($vars['teaser']) {
$coreteaser = $vars['node']->content['body']['#value'];
if ($coreteaser) {
$teaser = $vars['content'];
$start = strpos($teaser, $coreteaser);
$length = strlen($coreteaser);
$replacement = strip_tags($coreteaser, '
');
$vars['content'] = substr_replace($teaser, $replacement, $start, $length);
}
}
}}

Комментарии

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 29 ноября 2010 в 17:50

"smile" wrote:
Выглядит не очень, а все теги не запретишь. Что же делать?

Зачем запрещать все теги, если можно разрешить лишь некоторые. Велосипед изобретаете. К тому же, если вы тизеры через вид выводите - это вопрос отмеченной галочки

Аватар пользователя smile smile 29 ноября 2010 в 18:06

Никакого велосипеда.

С галками-то понятно, тут вопросов нету. Вопрос - где взять грамотных юзеров и парсера-недибила?

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

Разрешая хотя бы болд вы уже рискуете получить крайне неоднородные по виду тизеры.

Аватар пользователя xxandeadxx xxandeadxx 29 ноября 2010 в 18:17

"smile" wrote:
Разрешая хотя бы болд вы уже рискуете получить крайне неоднородные по виду тизеры.

.teaser b { font-weight:normal !important; }