1. Приветствуем Вас на нашем закрытом форуме для складчиков сайта cmsheaven.org. Если Вы частный вебмастер, фрилансер, владелец малого или среднего бизнеса, представитель студии по разработке сайтов - будем рады видеть Вас в наших рядах экономных людей.
    Регистрация на форуме возможна только после вступления в складчину

Компонент EasySocial обрезка русского текста

Discussion in 'Вопросы по расширениям Joomla [тех. поддержка]' started by Sobolev, Jul 30, 2015.

Thread Status:
Not open for further replies.
  1. Sobolev

    Sobolev Cкладчик

    Joined:
    May 6, 2015
    Messages:
    7
    Likes Received:
    2
    Платформа, на которой работает PHPLinux ****** 2.6.32-531.23.3.lve1.3.6.el6.x86_64 #1 SMP Mon Sep 29 16:27:54 CEST 2014 x86_64
    Версия базы данных5.5.42-cll
    Кодировка базы данныхutf8_general_ci
    Версия PHP5.5.27
    Веб-серверLiteSpeed
    Интерфейс между веб-сервером и PHPlitespeed
    Версия Joomla!Joomla! 3.4.3 Stable [ Ember ] 2-July-2015 16:00 GMT
    Версия Joomla! PlatformJoomla Platform 13.1.0 Stable [ Curiosity ] 24-Apr-2013 00:00 GMT
    EasySocial v1.3.29
    Шаблон Qubic - JoomShaper
    Так же стоит конструктор страниц SP Page Builder

    Проблема состоит в том, что если в EasySocail писать русский текст и спользовать именно запятые, то запятую и всё, что после неё он не отображает(НЕ удаляет).

    Через консоль отладки Joomla смотрел ошибки и нашел в **Непереведенные строки**
    # JROOT/components/com_easysocial/themes/wireframe/registration/default.profiles.php

    ______="русский текст" - НЕ отображается запятая в консоле + в тексте на сайте
    Например на странице регистрации меня есть русский текст и если есть запятая, то он её и то, что после её не отображает. Если же текст на английском и есть запятые, то всё нормально.
    Так же если после запятой английский текст, то он отображает всё номрально!
    Даже если так
    русский текст, dsdsd русский текст, русский текст, русский текст.
    Отображает все запятые! Причём не важно отделено ли англ текст. И так работает:
    русский текст, dsdsdрусский текст, русский текст, русский текст.

    Если же вместо англ. текста поставить цифру или символ(независимо от раскладки), то не срабатывает.
    Если англ текст поставить перед запятой(не важно насколько перед) - тоже не срабатывает.


    Пробовал банально менять запятые на англ. раскладке. Не помогло.
    Так же немного попытавшись разобраться я обнаружил, что вывод joomla не обрезает ничего
    Например:
    PHP:
    $appJFactory::getApplication();
    $app->redirect('index.php/test','тест, тест');
    Исходя из этого сравнил где выводятся ошибки и обнаружил, что всё идёт от
    public_html\administrator\components\com_easysocial\includes\foundry.php

    Например для этой страницы, которую я рассматриваю в этом примере текст обрезается тут:
    PHP:
    $profile->get'description' );
    Profile находится с помощью FD, как и всё в ES.
    В админке, в редактировании отображается полный текст с запятыми.
    Этот пример: настройки компонента->типы профилей-> описание
    Всё отображается так, как и вводилось в поле.

    Пробовал банально foundry.php перекодировать из ANSI в UTF-8, но он обратно кодируется в ANSI (права 644)
    Так же meta стоит <meta http-equiv="content-type" content="text/html; charset=utf-8">

    На других страницах сайта всё отображается корректно.
    Пробовал отключать плагины в админке, что бы проверить возможные конфилкты:
    System - Helix3 Framework
    Система - Политика P3P
    System - EasySocial
    Система - Подсветка
    Не помогло.

    Для меня эта ситуация совершенно непонятна. Может стоит какой то парсер, но тогда почему такая ошибка не у всех.
    Спасибо!
    #1
  2. Modi34

    Modi34 Свой человек

    Joined:
    Oct 31, 2014
    Messages:
    2,033
    Likes Received:
    720
    это поле для юникода с запятыми не предназначено - именно поэтому разработчик вынес описания в примерах в языковой файл
    вот пример
    [​IMG]
    [​IMG]
    собственно не вижу сложности использовать языковой файл вообще с чем хотите внутри, включая любые теги...
    #2
  3. Sobolev

    Sobolev Cкладчик

    Joined:
    May 6, 2015
    Messages:
    7
    Likes Received:
    2
    Я бы не написал сюда просто так.
    Забыл упомянуть, что текст из языковых файлах тоже образается.
    #3
  4. Modi34

    Modi34 Свой человек

    Joined:
    Oct 31, 2014
    Messages:
    2,033
    Likes Received:
    720
    быть того не может - у меня же все ок... пришлите пример...

    а теперь по поводу бага - вы неправильно определили проблему
    во первых вот пример кода выводящего описание
    /media/com_easysocial/apps/fields/user/header/themes/default/sample.php
    [​IMG]
    $params->get( 'description' ) - выдает все правильно русский текст с запятой проблема в jtext - а следовательно это баг самой joomla
    вот описание проблемы https://groups.google.com/forum/#!topic/joomla-dev-cms/Rv9uQ8B_Bbc

    в общем если хотите чтобы все было ок откажитесь от языкового файла и уберите JTEXT - я еще это поковыряю и если что найду напишу.
    #4
    modern.po and Sobolev like this.
  5. Modi34

    Modi34 Свой человек

    Joined:
    Oct 31, 2014
    Messages:
    2,033
    Likes Received:
    720
    ок, я решил проблему нужно JText::_( $params->get( 'description' ) ); заменить на JText::sprintf( $params->get( 'description' ) );
    [​IMG]
    скрин чтобы сомнений не было...
    [​IMG]
    все что нужно это заменять _ на sprintf - это баг joomla и когда-нибудь его поправят - вызван баг добавлением спринтф
    #5
    modern.po likes this.
  6. Sobolev

    Sobolev Cкладчик

    Joined:
    May 6, 2015
    Messages:
    7
    Likes Received:
    2
    Спасибо!
    Т.к у меня во всех скриптах ES такое, то заменять будет проблематично.
    Перешел по ссылке, что вы дали и нашел место где обрезается текст:
    libraries/joomla/language/text.php
    PHP:
    if (strpos($string','))
            {
                
    $test substr($stringstrpos($string','));

                if (
    strtoupper($test) === $test)
                {
                    
    $strs explode(','$string);

                    foreach (
    $strs as $i => $str)
                    {
                        
    $strs[$i] = $lang->_($str$jsSafe$interpretBackSlashes);

                        if (
    $script)
                        {
                            
    self::$strings[$str] = $strs[$i];
                        }
                    }

                    
    $str array_shift($strs);
                    
    $str preg_replace('/\[\[%([0-9]+):[^\]]*\]\]/''%\1$s'$str);
                    
    $str vsprintf($str$strs);

                    return 
    $str;
                }
            }  
    Закомментировал это всё и проблема ушла.
    По моему этот код просто не нужен.
    Не возникнут другие проблемы, если я всё закомментил?

    Ещё раз большое спасибо!
    Last edited: Jul 31, 2015
    #6
    modern.po likes this.
Thread Status:
Not open for further replies.