We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 7642
    • 37 Posts
    При обрезании текста (&truncLen) Ditto вместо нормального обрезания добавляет вопросик �
    Кто нибудь знает как решить эту проблему?
      • 7642
      • 37 Posts
      решил сам но частично

      Раскомментировал в php.ini extension mbstring

      Вопросик перестал появляться, но обрезает все равно неправильно тоесть число символов не соответствует заданному.
        • 897
        • 1,620 Posts
        пробелы, точки, запятые тоже считайте
          "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

          Не используйте Revo для "просто сайтов". Используйте Evo

          Who can defeat the Russian bear?
          • 14983
          • 6 Posts
          проблема явственно в другом.

          Собирая summary из вложенных разделов наблюдал такую фигню:
          от каких-то страниц откусывает буквально две строчки, другие выдает чуть не целиком.

          Уродует ссылки в тексте, разрезая теги посередине, и т.п.
            • 21610
            • 360 Posts
            Quote from: dm-tlt at May 14, 2007, 07:15 AM

            При обрезании текста (&truncLen) Ditto вместо нормального обрезания добавляет вопросик �
            Кто нибудь знает как решить эту проблему?
            Формируйте сылку по другому, прямо в шаблоне!
            <a href="[~[+id+]~]">подробнее<img src="img/podrob.gif" border="0" align="absbottom"></a>


            Во всяком случае в Ditto 2.0.х от тэга [+link+] в шаблоне отказались!
              Разработка сайтов на MODx
              • 33694
              • 742 Posts
              Стандартная функция обрезающая текст, часто не умеет делать это правильно с текстом в utf8 кодировке. Есть альтернативное решение: http://www.phpinsider.com/smarty-forum/viewtopic.php?t=5487&highlight=truncate, должно работать, наверное, сам не пробовал.
                • 921
                • 4 Posts
                Quote from: [e
                Bu$ter link=topic=14802.msg98569#msg98569 date=1180427820]
                Есть альтернативное решение: http://www.phpinsider.com/smarty-forum/viewtopic.php?t=5487&highlight=truncate, должно работать, наверное, сам не пробовал.
                Дейтвительно работает! Нет этих грёбаных квадратиков. Вот код( где то на 376 строке в AjaxSearch вставил, после $search = explode(" ", $searchString) )

                function smarty_modifier_mb_truncate($string, $intEncode='UTF-8', $length = 80, $etc = '...', $break_words = false)
                {
                    if ($length == 0) return '';
                
                   // Set the internal encoding
                   if (!$intEncode) $intEncode = "UTF-8";
                   mb_internal_encoding($intEncode);
                
                    if (mb_strlen($string) > $length) {
                        $length -= mb_strlen($etc);
                        if (!$break_words) $string = preg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length+1));
                     
                        return mb_substr($string, 0, $length).$etc;
                    } else {
                        return $string;
                    }    
                } 
                       
                foreach( $search as $string ){
                smarty_modifier_mb_truncate($string, $intEncode='UTF-8', $length = 80, $etc = '...', $break_words = false);
                }
                
                  • 26586
                  • 184 Posts
                  автообрезание - зло. Почему бы не заполнять поле аннотация коротким текстом? И выводить либо аннотацию, либо контент.

                  Переделанный из Smarty (правда старого =( ) модификатора PHx модификатор phx:trunk
                  <?php
                  if (strpos($options, '|')===false) $options .= '| ...';
                  list($anonslen, $anonsetc) =  explode('|',$options);
                  $anonslen = (int)$anonslen;
                  $anonslen = empty($anonslen) ? 100 : $anonslen;
                  $anonsetc = empty($anonsetc) ? ' ...' : $anonsetc;
                  
                  $length = $anonslen;
                  if (strlen($output) > $length) {
                    $length -= strlen($anonsetc);
                    $output = preg_replace('/\s+?(\S+)?$/', '', substr($output, 0, $length+1));
                    $output = substr($output, 0, $length).$anonsetc;
                  }
                  
                  return $output;
                  ?>


                  пример использования:
                  [+introtext:ifempty=`[+content:trunk=`200|&nbsp;`+]`+]