zachshallbetter
  • 0
Учитель

Усечение различной длины информации

  • 0

Не так давно мне помогла форма пользовательского усечения от Toscho в этом посте, она работает очень хорошо, но я обнаружил, что мне нужно создать несколько вариантов длины для разных частей контента. Например, на моей странице поддержки мне нужно 80 max_chars по сравнению с моей домашней страницей, на которой мне нужно 200 max_chars.

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

Как всегда, любая помощь будет оценена по достоинству. Спасибо, парни!

function utf8_truncate( $string, $max_chars = 200, $append = "\xC2\xA0…" )
{
    $string = strip_tags( $string );
    $string = html_entity_decode( $string, ENT_QUOTES, 'utf-8' );
    // \xC2\xA0 is the no-break space
    $string = trim( $string, "\n\r\t .-;–,—\xC2\xA0" );
    $length = strlen( utf8_decode( $string ) );

    // Nothing to do.
    if ( $length < $max_chars )
    {
        return $string;
    }

    // mb_substr() is in /wp-includes/compat.php as a fallback if
    // your the current PHP installation doesn't have it.
    $string = mb_substr( $string, 0, $max_chars, 'utf-8' );

    // No white space. One long word or chinese/korean/japanese text.
    if ( FALSE === strpos( $string, ' ' ) )
    {
        return $string . $append;
    }

    // Avoid breaks within words. Find the last white space.
    if ( extension_loaded( 'mbstring' ) )
    {
        $pos   = mb_strrpos( $string, ' ', 'utf-8' );
        $short = mb_substr( $string, 0, $pos, 'utf-8' );
    }
    else
    {
        // Workaround. May be slow on long strings.
        $words = explode( ' ', $string );
        // Drop the last word.
        array_pop( $words );
        $short = implode( ' ', $words );
    }

    return $short . $append;
}
Share
  1. Я знаю, что toscho это не очень нравится, но в любом случае: преобразовал входные аргументы в массив:

    function utf8_truncate( $args = array( 'string' => null, 'max_chars' => 200, 'append' => "\xC2\xA0…" ) )
    {
        $args['string'] = strip_tags( $args['string'] );
        $args['string'] = html_entity_decode( $args['string'], ENT_QUOTES, 'utf-8' );
        // \xC2\xA0 is the no-break space
        $args['string'] = trim( $args['string'], "\n\r\t .-;–,—\xC2\xA0" );
        $length = strlen( utf8_decode( $args['string'] ) );
    
        // Nothing to do.
        if ( $length < $args['max_chars'] )
        {
            return $args['string'];
        }
    
        // mb_substr() is in /wp-includes/compat.php as a fallback if
        // your the current PHP installation doesn't have it.
        $args['string'] = mb_substr( $args['string'], 0, $args['max_chars'], 'utf-8' );
    
        // No white space. One long word or chinese/korean/japanese text.
        if ( FALSE === strpos( $args['string'], ' ' ) )
        {
            return $args['string'] . $args['append'];
        }
    
        // Avoid breaks within words. Find the last white space.
        if ( extension_loaded( 'mbstring' ) )
        {
            $pos   = mb_strrpos( $args['string'], ' ', 'utf-8' );
            $short = mb_substr( $args['string'], 0, $pos, 'utf-8' );
        }
        else
        {
            // Workaround. May be slow on long strings.
            $words = explode( ' ', $args['string'] );
            // Drop the last word.
            array_pop( $words );
            $short = implode( ' ', $words );
        }
    
        return $short . $args['append'];
    }
    

    Это позволяет использовать его так (возможно, вы все равно пропустили, как использовать массивы) :

    $args = array(
         'string' => 'bla'
        ,'max_chars' => 50 // INPUT LENGTH HERE
    );
    echo '<p>' . utf8_truncate( $args ) . '</p>';
    

    Вы также можете переключить это по требованию:

    if ( is_page() )
    {
        $args['max_chars'] = 100;
    }
    elseif ( is_archive() )
    {
        $args['max_chars'] = 50;
    }
    elseif ( is_whatever() )
        ... etc ...
    }
    
    • 0

Оставить ответ

You must login to add an answer.