1. Мы продолжаем публиковать интересные статьи на тему SocialEngine 4. Одна из статей посвящена правильному выбору сервера для вашей социальной сети, а другая содержит советы по увеличению производительности платформы. Также мы добавили большую статью о пользовательских уровнях. Ознакомиться со статьями вы можете в разделе Вопросы и Ответы SocialEngine 4.
  2. Вам кажется, что ваша версия SocialEngine 4, работает медленно?

    Голосуйте. Пишите свою версию системы, железо на чем работает и количество пользователей. Будем увеличивать производительность :-) Подробнее

  3. В связи с участившимися случаями попыток продажи пользователями форума различных "сборок" коммерческих социальных платформ, обычно основанных на SocialEngine 3, вводится новое правило для форума. Запрещается создание тем или размещение в уже созданных предложений о продаже или размещение ссылок на сайты, где происходит продажа "сборок". Пользователи, которые продолжат свою коммерческую деятельность в данном направлении, будут заблокированы. Подробнее.

Проблема с каналом активности

Discussion in 'Прочая Поддержка - Help Requests' started by avantus, Jan 27, 2010.

  1. GumSlone User


    Offline
    Message Count:
    85
    Likes Received:
    8
    везде надо заменить, только проверь установлен ли mb string у тебя.
  2. Prado Challenge Everything


    Offline
    • Admin
    Message Count:
    3,191
    Likes Received:
    786
    My version of phpFox:
    3.0.0
    Что такое mb string?
  3. Gooos абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Multibyte string (модуль PHP, php_mbstring.dll) - версия модуля должна обязательно соответствовать версии PHP, иначе - not found ;)
    Прикол вы том, что была у меня на серваке, но почему-то теперь её нет, сейчас пытаю саппорт, куда дели и поставят ли назад.

    http://www.dlldll.com/dllfiles/P_page13.html - третья строчка сверху.

    P.S: просто, мож кому надо http://museum.php.net/php5/
  4. Prado Challenge Everything


    Offline
    • Admin
    Message Count:
    3,191
    Likes Received:
    786
    My version of phpFox:
    3.0.0
    Ну это же для Вин сервера. :(
  5. Gooos абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Для того, чтобы поставить данную библиотеку, вам потребуется php_mbstring.dll (можно скачать здесь всю сборку и взять нужную нам библиотеку в папке ext).
    http://files.d-world.org/archives/php_mbstring.zip ~1.1mb (PHP 5.2.4)

    ---------- Добавлено в 12:38 ---------- Предыдущее сообщение было написано в 12:12 ----------

    Плохо искал, нашёл, включил, теперь можно и хак применить. ;)
    В таких местах тоже надо менять?
    PHP:
      $group_thumb substr($group_photo0strrpos($group_photo"."))."_thumb".substr($group_photostrrpos($group_photo"."));
    PHP:
    if (substr($currentTag01) == "/") {
    PHP:
    $var_name substr($var_ref1, -1);
    PHP:
      $blogentry_array[$blogentryindex]['blogentry_body'] = preg_replace('/<.*?>/'' 'substr($blogentry_array[$blogentryindex]['blogentry_body'], 0300));
    PHP:
       $year substr($field_value04); 
          
    $month substr($field_value52); 
          
    $day substr($field_value82);
    PHP:
     $cats[cat_loop].subcats[subcat_loop].fields[field_loop].field_value|substr:0:!= "0000"
    или только в таких:
    PHP:
     if( strlen($comment_body_encoded) > 250 $comment_body_encoded substr($comment_body_encoded0247)."...";
    ---------------------------------------------------------
    Вопрос:
    Интересно поможет ли это решить проблему или всё же надо менять везде substr на mb_substr ?
    Заменить modifier.truncate.php на этот:
    PHP:
    <?php
    /**
    * Smarty plugin
    * @package Smarty
    * @subpackage plugins
    */


    /**
    * Smarty truncate modifier plugin
    *
    * Type:     modifier<br>
    * Name:     truncate<br>
    * Purpose:  Truncate a string to a certain length if necessary,
    *           optionally splitting in the middle of a word, and
    *           appending the $etc string or inserting $etc into the middle.
    * @link http://smarty.php.net/manual/en/language.modifier.truncate.php
    *          truncate (Smarty online manual)
    * @author   Monte Ohrt <monte at ohrt dot com>
    * @param string
    * @param integer
    * @param string
    * @param boolean
    * @param boolean
    * @return string
    */
    function smarty_modifier_truncate($string$length 80$etc '...'$break_words false$middle false)
    {
        
    /*
        if ($length == 0)
            return '';

        if (strlen($string) > $length)
        {
            $length -= strlen($etc);
            if (!$break_words && !$middle)
            {
                $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1));
            }
            if(!$middle)
            {
                return substr($string, 0, $length).$etc;
            }
             else
             {
                return substr($string, 0, $length/2) . $etc . substr($string, -$length/2);
             }
        }
         else
         {*/
            
    return $string;
         
    //}
    }

    /* vim: set expandtab: */

    ?>
  6. GumSlone User


    Offline
    Message Count:
    85
    Likes Received:
    8
    нет, смарти только для шаблонов он конечно улучшит проблему но не совсем так как надо, в ленте актвиности все равно буду исчезашие записи. Русские буквы в утф**-8 занимают как минимум 2 знака, substr считает только по одному знаку ибо в инглише все равно и обрезает выходит что обрезало на пол буквы. Надо ставить mb_substr и mb_strlen

    а для smartx modyfier.truncate.php советую использовать вот этот код:

    PHP:
    <?php
    /**
     * Smarty plugin
     * @package Smarty
     * @subpackage plugins
     */

    /**
     * Smarty truncate modifier plugin
     *
     * Type:     modifier<br>
     * Name:     truncate<br>
     * Purpose:  Truncate a string to a certain length if necessary,
     *           optionally splitting in the middle of a word, and
     *           appending the $etc string or inserting $etc into the middle.
     * @link http://smarty.php.net/manual/en/language.modifier.truncate.php
     *          truncate (Smarty online manual)
     * @author   Monte Ohrt <monte at ohrt dot com>
     * @param string
     * @param integer
     * @param string
     * @param boolean
     * @param boolean
     * @return string
     */
    function smarty_modifier_truncate($string$length 80$etc '...',
                                      
    $break_words false$middle false)
    {
        if (
    $length == 0)
            return 
    '';

        if (
    strlen($string) > $length) {
            
    $length -= min($lengthstrlen($etc));
            if (!
    $break_words && !$middle) {
                
    $string preg_replace('/\s+?(\S+)?$/'''substr($string0$length+1));
            }
            if(!
    $middle) {
                
    //return substr($string, 0, $length) . $etc;
                
    return utf8_str_limit($string$length$etc);
            } else {
                return 
    substr($string0$length/2) . $etc substr($string, -$length/2);
            }
        } else {
            return 
    $string;
        }
    }


    /**
     * Обрезает текст в кодировке UTF-8 до заданной длины,
     * причём последнее слово показывается целиком, а не обрывается на середине.
     * Html сущности корректно обрабатываются.
     *
     * @param    string   $s           текст в кодировке UTF-8
     * @param    int      $maxlength   ограничение длины текста
     * @param    string   $continue    завершающая строка, которая будет вставлена после текста, если он обрежется
     * @param    string   &$is_cutted  текст был обрезан?
     * @return   string
     *
     * @license  http://creativecommons.org/licenses/by-nc-sa/3.0/
     * @author   Nasibullin Rinat <n a s i b u l l i n  at starlink ru>
     * @charset  ANSI
     * @version  3.3.3
     */
    function utf8_str_limit($s$maxlength 256$continue "\xe2\x80\xa6", &$is_cutted null#"\xe2\x80\xa6" = "&hellip;"
    {
        
    $is_cutted false;
        if (
    $continue === null$continue "\xe2\x80\xa6";

        
    #оптимизация скорости:
        #{{{
        
    if (strlen($s) <= $maxlength) return $s;
        
    $s2 str_replace("\r\n"'?'$s);
        
    $s2 preg_replace('/&(?> [a-zA-Z][a-zA-Z\d]+
                                | \#(?> \d{1,4}
                                      | x[\da-fA-F]{2,4}
                                    )
                              );  # html сущности (&lt; &gt; &amp; &quot;)
                            /sx'
    '?'$s2);
        
    #utf8_decode() converts characters that are not in ISO-8859-1 to '?', which, for the purpose of counting, is quite alright.
        
    if (strlen($s2) <= $maxlength || strlen(utf8_decode($s2)) <= $maxlength) return $s;
        
    #}}}

        
    preg_match_all('/(?> \r\n   # переносы строк
                           | &(?> [a-zA-Z][a-zA-Z\d]+
                                | \#(?> \d{1,4}
                                      | x[\da-fA-F]{2,4}
                                    )
                              );  # html сущности (&lt; &gt; &amp; &quot;)
                           | [\x09\x0A\x0D\x20-\x7E]           # ASCII
                           | [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
                           |  \xE0[\xA0-\xBF][\x80-\xBF]       # excluding overlongs
                           | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
                           |  \xED[\x80-\x9F][\x80-\xBF]       # excluding surrogates
                           |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3
                           | [\xF1-\xF3][\x80-\xBF]{3}         # planes 4-15
                           |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16
                         )
                        /sx'
    $s$m);
        
    #d($m);
        
    if (count($m[0]) <= $maxlength) return $s;
        
    $is_cutted true;
        
    $left implode(''array_slice($m[0], 0$maxlength));
        
    #из диапазона ASCII исключаем буквы, цифры, закрывающие парные символы [a-zA-Z\d)}\];]
        #нельзя вырезать в конце строки символ ";", т.к. он используются в сущностях &xxx;
        
    $left2 rtrim($left"\x00..\x28\x2A..\x2F\x3A\x3C\x40\x5C\x5E..\x60\x7C\x7E\x7F");
        if (
    strlen($left) !== strlen($left2)) return $left2 $continue;

        
    #добавляем остаток к обрезанному слову
        
    $right implode(''array_slice($m[0], $maxlength));
        
    preg_match('/^(?: [a-zA-Z\d\)\]\}\-\.]  #английские буквы или цифры, закрывающие парные символы, дефис для составных слов, дата, IP-адреса, URL типа www.ya.ru!
                        | \xe2\x80[\x9d\x99]|\xc2\xbb|\xe2\x80\x9c  #закрывающие кавычки
                        | \xc3[\xa4\xa7\xb1\xb6\xbc\x84\x87\x91\x96\x9c]|\xc4[\x9f\xb1\x9e\xb0]|\xc5[\x9f\x9e]  #турецкие
                        | \xd0[\x90-\xbf\x81]|\xd1[\x80-\x8f\x91]   #русские буквы
                        | \xd2[\x96\x97\xa2\xa3\xae\xaf\xba\xbb]|\xd3[\x98\x99\xa8\xa9]  #татарские
                      )+
                    /sx'
    $right$m);
        
    #d($m);
        
    $right = isset($m[0]) ? rtrim($m[0], '.-') : '';
        
    $s2 $left $right;
        if (
    strlen($s2) !== strlen($s)) $s2 .= $continue;
        return 
    $s2;
    }

    ?>


    ---------- Добавлено в 14:33 ---------- Предыдущее сообщение было написано в 14:28 ----------

    здесь не обязательно:
    PHP:
      $group_thumb substr($group_photo0strrpos($group_photo"."))."_thumb".substr($group_photostrrpos($group_photo".")); 
    это тоже можно оставить:
    PHP:
    if (substr($currentTag01) == "/") { 
    а вот это надо:
    PHP:
    if( strlen($comment_body_encoded) > 250 $comment_body_encoded substr($comment_body_encoded0247)."...";
    на
    PHP:
    if( mb_strlen($comment_body_encoded) > 250 $comment_body_encoded mb_substr($comment_body_encoded0247)."...";
  7. Gooos абырвалГ


    Offline
    • Admin
    Message Count:
    2,435
    Likes Received:
    645
    My version of SE:
    3.20
    Заменил пока следующее, начну тестить. ;)

    class_comment.php
    PHP:
    if( mb_strlen($comment_body_encoded) > 250 $comment_body_encoded mb_substr($comment_body_encoded0247)."...";
    class_blog.php
    PHP:
    $blogentry_excerpt = ( mb_strlen($blogentry_body)>255 mb_substr($blogentry_body0254) : $blogentry_body );
    functions_album.php
    PHP:
    if(mb_strlen($album_info[description]) > 150) { $album_info[description] = mb_substr($album_info[description], 0147)."..."; }
    functions_blog.php
    PHP:
    $blogentry_info['blogentry_body'] = mb_substr($blogentry_info['blogentry_body'], 0147)."...";
    functions_game.php
    PHP:
    if(mb_strlen($game_info[game_desc]) > 150) { $game_info[game_desc] = mb_substr($game_info[game_desc], 0147)."..."; }
    functions_group.php
    PHP:
            if(mb_strlen($group_info['description']) > 150) { $group_info['description'] = mb_substr($group_info['description'], 0147)."..."; }
            if(
    mb_strlen($group_info['group_desc']) > 150) { $group_info['group_desc'] = mb_substr($group_info['group_desc'], 0147)."..."; }
    blog.php
    PHP:
    if( mb_strlen($global_page_content)>255 $global_page_content mb_substr($global_page_content0251).'...';
    group_discussion_post.php
    PHP:
    if( mb_strlen($grouppost_body_encoded) > 250 )
            
    $grouppost_body_encoded mb_substr($grouppost_body_encoded0247)."...";
    help_tos.php
    PHP:
    $global_page_description[1] = mb_substr($terms_of_service0150);
  8. Tema66 User


    Offline
    Message Count:
    42
    Likes Received:
    0
    Коллеги - предлагаю более простое и универсальное решение:

    После запуска своего поекта, после роста активности пользователей - в ленте активности - ряд действий не отражался - пустое поле - выглядит очень неэтстетично, да и наличие данных действий - было очень Важным для меня, так как вся увязка идет с главной страницы - и часть, именно через активность. Ближайший анализ показал, что проблема касается таких плагинов как видео, события, блоги, а именно - ак тивность связанная с комментариями, и не просто кооментариями - а комментариями достаточно содержательными. В таблице se_actions - в поле action_text - содежание просто резалось, т.е. имело на пример такой вид:

    PHP:
    a:4:{i:0;s:9:"nik1";i:1;s:23:"Вася Петров";i:2;s:1:"5";i:3;s:62:"Тектстттттттттттттттттттееееее
    ееееееееееееееее
    Вместо:

    PHP:
    a:4:{i:0;s:9:"nik1";i:1;s:23:"Вася Петров";i:2;s:1:"5";i:3;s:62:"Тектстттттттттттттттттттееееее
    ееееееееееееееее"
    ;}
    Изменния типа с TEXT, на MEDIUMTEXT или LONGTEXT - не помогло, заменил
    на MEDIUMBLOB - и вуаля - проблему как рукой сняло

    Действует только на новые записи (так как старые в базе уже записались коряво)
  9. Prado Challenge Everything


    Offline
    • Admin
    Message Count:
    3,191
    Likes Received:
    786
    My version of phpFox:
    3.0.0
    там момент в следующем. Когда вы пишите много букв русских оно начинает косячить, косяк может быть в любом из плагинов, и даже в обсуждения которые в группах.

    Большое количество русских символов.

    Если в это большое количество русских символов вставить одну английскую букву, то оно отобразится без проблем в ленте активности.
  10. Tema66 User


    Offline
    Message Count:
    42
    Likes Received:
    0
    Хе все правильно - поэтому переводим в 2ю систему - и все ок:)

Share This Page

All rights reserved SocEngine.ru ©