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

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

Тема в разделе "Вопросы по расширениям Joomla [тех. поддержка]", создана пользователем Sobolev, 30 июл 2015.

Статус темы:
Закрыта.
  1. Sobolev

    Sobolev Cкладчик

    Регистрация:
    6 май 2015
    Сообщения:
    7
    Симпатии:
    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 Свой человек

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

    Sobolev Cкладчик

    Регистрация:
    6 май 2015
    Сообщения:
    7
    Симпатии:
    2
    Я бы не написал сюда просто так.
    Забыл упомянуть, что текст из языковых файлах тоже образается.
    #3
  4. Modi34

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

    Регистрация:
    31 окт 2014
    Сообщения:
    2.033
    Симпатии:
    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 и Sobolev нравится это.
  5. Modi34

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

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

    Sobolev Cкладчик

    Регистрация:
    6 май 2015
    Сообщения:
    7
    Симпатии:
    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;
                }
            }  
    Закомментировал это всё и проблема ушла.
    По моему этот код просто не нужен.
    Не возникнут другие проблемы, если я всё закомментил?

    Ещё раз большое спасибо!
    Последнее редактирование: 31 июл 2015
    #6
    modern.po нравится это.
Статус темы:
Закрыта.