strip_tags

Статус
В этой теме нельзя размещать новые ответы.

fafee

Постоялец
Регистрация
3 Окт 2008
Сообщения
92
Реакции
0
добрый день.
использую смарти. на странице вывода анонсов статей по первым строкам съедает переносы строк, скорее всего тег <p> или <br>
в коде есть строчка, которая за это отвечает

PHP:
{$articleentry.article->article_info.article_body|strip_tags:false|truncate:400:"..."}

пробовал научить смарти не есть эти теги подставив в стрип-тагс
PHP:
{|strip_tags:false:'<p><br>'|}
не помогает....
отключить стрип_тагс тоже нельзя, так как весь код тогде лезет в текст...

подскажите как научить стрип_тагс не съедать конкретные теги?
спасибо:)
 
Записать это в файл Smarty/plugins/modifier.strip_tags.php
PHP:
<?php

function smarty_modifier_strip_tags($string, $replace_with_space = true, $allowable_tags = '')
{
    if ($replace_with_space){
    	preg_match_all('~<(\\w+)>~', $allowable_tags, $m);
    	foreach($m[1] as &$v)
    		$v = preg_quote($v, '~');
    	$tags = implode('|', $m[1]);
    	if('' != $tags)
    		$tags = "(?!(?:{$tags})\\b)";
        return preg_replace("~</?{$tags}[^>]*?>~", ' ', $string);
    }
    else
        return strip_tags($string, $allowable_tags);
}
?>
 
там такой файл уже был, заменил его новым, увы не помогло. :nezn:
а вот содержание старого

PHP:
function smarty_modifier_strip_tags($string, $replace_with_space = true)
{
    if ($replace_with_space)
        return preg_replace('!<[^>]*?>!', ' ', $string);
    else
        return strip_tags($string);
}
:bc:
 
Регулярку маленько подправил:
PHP:
function smarty_modifier_strip_tags($string, $replace_with_space = true, $allowable_tags = '')
{
    if ($replace_with_space){
        preg_match_all('~<(\\w+)>~', $allowable_tags, $m);
        foreach($m[1] as &$v)
            $v = preg_quote($v, '~');
        $tags = implode('|', $m[1]);
        if('' != $tags)
            $tags = "(?!(?:{$tags})\\b)";
        return preg_replace("~</?+{$tags}[^>]*?>~", ' ', $string);
    }
    else
        return strip_tags($string, $allowable_tags);
}
Не помогло - значит не оставляет указанные теги или же проблема вообще не в них?
Вызов такой:
{$var|strip_tags:false:'<p><br>'}
 
:yahoo:
спасибо огромное заработало)))
теги забыл вписать после false)

:ay:
 
Эм, такие костыли не очень желательны. К примеру, если вдруг вздумается обновить smarty, то по забывчивости такой костыль будет стёрт.
Функцию обрезки тегов лучше доверить движку, а не шаблонизатору.
Если уж очень хочется использовать обрезку в шаблоне, в коде рядом с инициализацией smarty допишите:
PHP:
function smarty_strip_tags($string, $replace_with_space = true, $allowable_tags = ''){
// код функции от antn
}
$smarty->register_modifier('new_strip_tags', 'smarty_strip_tags');
А в шаблоне использовать так: {$articleentry.article->article_info.article_body|new_strip_tags:false:'<p><br>'|truncate:400:"..."}
 
Эм, такие костыли не очень желательны. К примеру, если вдруг вздумается обновить smarty, то по забывчивости такой костыль будет стёрт.

Чтобы все работало при обновлении версии надо писать свой модификатор, и ложить его в свою папку my_plugins а для этого прописать:

PHP:
$tpl->plugins_dir[] = "./my_plugins";
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху