strip_tags

Тема в разделе "PHP", создана пользователем fafee, 13 сен 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. fafee

    fafee Постоялец

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

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

    подскажите как научить стрип_тагс не съедать конкретные теги?
    спасибо:)
     
  2. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    Записать это в файл 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);
    }
    ?>
     
    fafee нравится это.
  3. fafee

    fafee Постоялец

    Регистр.:
    4 окт 2008
    Сообщения:
    92
    Симпатии:
    0
    там такой файл уже был, заменил его новым, увы не помогло. :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:
     
  4. antn

    antn Постоялец

    Регистр.:
    11 июл 2009
    Сообщения:
    104
    Симпатии:
    30
    Регулярку маленько подправил:
    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);
    }
    Не помогло - значит не оставляет указанные теги или же проблема вообще не в них?
    Вызов такой:
     
    fafee нравится это.
  5. fafee

    fafee Постоялец

    Регистр.:
    4 окт 2008
    Сообщения:
    92
    Симпатии:
    0
    :yahoo:
    спасибо огромное заработало)))
    теги забыл вписать после false)

    :ay:
     
  6. Holy Diver

    Holy Diver Создатель

    Регистр.:
    17 авг 2009
    Сообщения:
    22
    Симпатии:
    8
    Эм, такие костыли не очень желательны. К примеру, если вдруг вздумается обновить 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:"..."}
     
    fafee нравится это.
  7. 01ssv

    01ssv Постоялец

    Регистр.:
    29 янв 2008
    Сообщения:
    65
    Симпатии:
    5
    Чтобы все работало при обновлении версии надо писать свой модификатор, и ложить его в свою папку my_plugins а для этого прописать:

    PHP:
    $tpl->plugins_dir[] = "./my_plugins";
     
Статус темы:
Закрыта.