[Помогите] Помогите с настройкой плагина Wordpress

Тема в разделе "Wordpress", создана пользователем Деймос, 4 янв 2009.

Статус темы:
Закрыта.
Модераторы: Sorcus
  1. Деймос

    Деймос

    Регистр.:
    29 ноя 2008
    Сообщения:
    228
    Симпатии:
    53
    Есть плагин Limit Posts который режет пост по нужному количеству символов, проблема в том что он русские буквы воспринимает как не за один символ (за два или три), можно что нибудь сделать? Т.е. не он правильно обрезает текст. Вот код плагина:
    Код:
    <?php
    function the_content_limit($max_char, $more_link_text = '(...)', $stripteaser = 0, $more_file = '') {
        $content = get_the_content($more_link_text, $stripteaser, $more_file);
        $content = apply_filters('the_content', $content);
        $content = str_replace(']]>', ']]&gt;', $content);
        $content = strip_tags($content);
    
       if (strlen($_GET['p']) > 0) {
          echo "<p>";
          echo $content;
          echo "</p>";
       }
       else if ((strlen($content)>$max_char) && ($espacio = strpos($content, " ", $max_char ))) {
            $content = substr($content, 0, $espacio);
            $content = $content;
            echo "<p>";
            echo $content;
            echo "...";
            echo "</p>";
       }
       else {
          echo "<p>";
          echo $content;
          echo "</p>";
       }
    }
    
    ?>
    Заранее спасибо!
     
  2. Albino

    Albino Создатель

    Регистр.:
    14 дек 2008
    Сообщения:
    42
    Симпатии:
    4
    Это что еще за плагин такой.. Обычно все используют плагин "automore", который обрезает текст либо по абзацу либо по числу символов, это как ты укажишь в опциях. Плагин русифицирован, нстроек минимум, но есть все что нужно.
     
  3. joefast

    joefast

    Заблокирован
    Регистр.:
    6 ноя 2007
    Сообщения:
    464
    Симпатии:
    74
    Использовать mb_strlen вместо strlen и mb_strpos вместо strpos. На хостинге должно стоять соответствующее расширение для пхп.
     
  4. Деймос

    Деймос

    Регистр.:
    29 ноя 2008
    Сообщения:
    228
    Симпатии:
    53
    плагин "automore" нужен для разбивки поста на страницы, этот же плагин нужен например для вывода заголовков и описаний в конкретных местах с нужным тебе размером.

    Не помогло, ситуация не изменилась, есть еще варианты? В шаблоне это выводится так:

    Код:
    <a href="<?php the_permalink() ?>"><?php the_title2('', '...', true, '40') ?></a>
    <?php the_content_limit(100, ""); ?>
    
     
  5. MBH

    MBH Постоялец

    Регистр.:
    31 янв 2007
    Сообщения:
    50
    Симпатии:
    8
    Я не стал разбираться, что там, да как... просто полез в свой один плагинец и нашёл пару функций. На их основе я считаю можно сделать легко, то, что ты хочешь:
    Код:
    // функция формирования нужного количества слов
    function words($text, $dl) {
    	$arr = explode(" ", $text);
    	$count_arr = count($arr);
    	$out ="";
    	
    	if ($dl > $count_arr) $dl2 = $count_arr;
    			else $dl2 = $dl;
    	
    	for ($i = 0; $i<$dl2; $i++) $out .= $arr[$i]." ";
    	
    	if ($dl2 != $count_arr) $out .= "...";
    
    	return ($out);
    }
    // функция убивания тегов HTML
    function del_tags($data) {
    	$data = preg_replace("/<.*?>/ms","",$data);
    	$data = str_replace("\n"," ",$data);
    	$data = str_replace("\r"," ",$data);
    	$data = str_replace("*"," ",$data); // здесь замена какогото странного пробела.
    	$data = str_replace("  "," ",$data);
    	return $data;
    }
    
    Просто я считаю, как-то некрасиво делить по символам, а по словам самое то... Ну а убивание тегов, это чтобы не было глюков в отображении. Надеюсь помог.
     
  6. Деймос

    Деймос

    Регистр.:
    29 ноя 2008
    Сообщения:
    228
    Симпатии:
    53
    MBH спасибо конечно, но это не совсем то что надо, надо именно по символам, т.к. кое где в дизайне сайта обрезания по словам просто не подойдет. Знаю что не очень правильно, но в целом скажу что получается красиво и кликабельно) Так что до сих пор продолжаю искать способ чтобы русская буква считалась за один символ)
     
  7. joefast

    joefast

    Заблокирован
    Регистр.:
    6 ноя 2007
    Сообщения:
    464
    Симпатии:
    74
    В функциях mb_strlen и mb_strpos последним параметром нужно указывать кодировку, в которой представлен текст. Что-то вроде:
    PHP:
    echo mb_strlen("Зеленый""UTF-8");
    echo 
    mb_strpos("Зеленый""ы"0,  "UTF-8");
    2 MBH, обратите внимание на функцию strip_tags ;)
     
  8. MBH

    MBH Постоялец

    Регистр.:
    31 янв 2007
    Сообщения:
    50
    Симпатии:
    8
    Да знаю я её, но что-то она у меня не корректно на тот момент работала. Поэтому лёгким движением регулярки я их чищу, а вообще там ведь общая функция, она вообще чистит контент, приводя его в простой текст, без лишних пробелов и прочей херни.

    p.s. А вообще спасибо :) Люблю заботу :D
     
  9. azzepis

    azzepis Создатель

    Регистр.:
    12 сен 2006
    Сообщения:
    32
    Симпатии:
    2
    у меня была проблема с этой функцией - the_title2
    в ней надо заменить substr на mb_substr

    мне помогло
     
  10. Деймос

    Деймос

    Регистр.:
    29 ноя 2008
    Сообщения:
    228
    Симпатии:
    53
    Сегодня переехал на другой хостинг (VDS) дак появилась ошибка mb_strlen () - подскажите какое расширение для php должно стоять?

    Вы просто в коде сделали так:
    Код:
    <?php
    function the_content_limit($max_char, $more_link_text = '(...)', $stripteaser = 0, $more_file = '') {
        $content = get_the_content($more_link_text, $stripteaser, $more_file);
        $content = apply_filters('the_content', $content);
        $content = str_replace(']]>', ']]&gt;', $content);
        $content = strip_tags($content);
    
       if ([B]mb_strlen[/B]($_GET['p']) > 0) {
          echo "<p>";
          echo $content;
          echo "</p>";
       }
       else if (([B]mb_strlen[/B]($content)>$max_char) && ($espacio = [B]mb_strpos[/B]($content, " ", $max_char ))) {
            $content = substr($content, 0, $espacio);
            $content = $content;
            echo "<p>";
            echo $content;
            echo "...";
            echo "</p>";
       }
       else {
          echo "<p>";
          echo $content;
          echo "</p>";
       }
    }
    
    ?>
    или еще что то дописали - поменяли?
     
Статус темы:
Закрыта.