Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 50 Ответов
  • 10184 Просмотров
*

bfox

  • Осваиваюсь на форуме
  • 14
  • 0 / 0
как ограничить длину статуса. ибо так зафлудить можно...
*

bfox

  • Осваиваюсь на форуме
  • 14
  • 0 / 0
Re: ограничение длины статуса
« Ответ #1 : 05.02.2010, 21:22:00 »
   <div class="helloMeStatusText" style="margin-top:5px;">
                  <div id="helloMeEdit" style="display: none;">
                     <input name="helloMeStatusText" id="helloMeStatusText" type="text" class="status inputbox" style="width: 90%; margin: 0 auto;" value="" onblur="helloMe.saveStatus();return false;" onkeyup="helloMe.saveChanges(event);return false;" />
                  </div>
                  <div id="helloMeDisplay">
                     <span href="javascript:void(0);" id="helloMeStatusLink" style="text-decoration: none; cursor: pointer;" onclick="helloMe.changeStatus();">
                        <span id="helloMeStatus" style="text-decoration: none;"></span>
                     </span>
                    </div>
               </div>
            </div>
            
            <div style="border-bottom: 1px solid #ecebeb; margin: 4px 0; padding: 0 0 10px;">
               <a href="javascript:void(0);" id="saveLink" style="line-height: 18px; padding: 0 0 0 22px; display: none; background: transparent url(<?php echo JURI::root(); ?>modules/mod_hellome/images/icons-16x16.gif) no-repeat 0 -440px;" onclick="helloMe.saveStatus();" class="icon-save"><?php echo JText::_('MOD_HELLOME SAVE MY STATUS'); ?></a>
               <a href="javascript:void(0);" id="editLink" style="line-height: 18px; padding: 0 0 0 22px; display: block; background: transparent url(<?php echo JURI::root(); ?>modules/mod_hellome/images/icons-16x16.gif) no-repeat 0 -419px;" onclick="helloMe.changeStatus();" class="icon-edit"><?php echo JText::_('MOD_HELLOME EDIT MY STATUS'); ?></a>
            </div>
подскажите как мах длину указать
*

Zombeee

  • Захожу иногда
  • 328
  • 55 / 3
Прикрутил себе MyBlog и тут же в ленте активности стали напрягать огромные сообщения, которые там совершенно ни к чему... к тому же, чисто теоретически и другие активности могут быть тоже длинными, например комментарии... в общем решил копать не в MyBlog, а сделать более универсальный вариант.

Нам нужен файл: /com_community/libraries/activities.php начиная со строк 103-105, которые выглядят следующим образом:

Код
		if( $act->content == 'This is the body' ){
return '';
}

после этих строк вставляем следующий код:

Код
		$str = strip_tags(html_entity_decode(JString::trim($act->content))); // приводим строку к виду "только текст", теги на всякий случай тоже удаляем, зачем они нам в анонсе?

$limit = 600; // сколько символов оставляем
if (JString::strlen($str) > $limit) {
$limit = JString::strpos($str, " ", $limit);
$str = JString::substr($str, 0, $limit). '...'; //обрезаем до ближайшего пробела после указанного кол-ва символов и добавляем в конце многоточие
}

$str = htmlentities ($str, ENT_COMPAT, 'UTF-8'); //возвращаем строке вид, который хавает jomsocial

$act->content = $str;

Вуаля! Этот же кусок кода можно использовать для обрезания всех остальных объёмных данных в социалке, например длинные описания групп на главной
« Последнее редактирование: 09.03.2010, 12:39:52 от Zombeee »
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Хмм, если я не ошибаюсь, то функция strlen (да и вообще все строковые функции) некорректно работает с UTF-8. Для работы со строками лучше всего использовать соответствующие методы JString.
*

Zombeee

  • Захожу иногда
  • 328
  • 55 / 3
Хмм, если я не ошибаюсь, то функция strlen (да и вообще все строковые функции) некорректно работает с UTF-8. Для работы со строками лучше всего использовать соответствующие методы JString.

нормально всё в данном случае работает, проверено :) с методами JString не разбирался, не знаю что там есть по этому поводу...
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Не работать то будет, но длина будет вычисляться некорректно + возможные некорректные обрезания строк.

Цитировать
PHP по умолчанию не поддерживает UTF-8 и поэтому надо быть очень осторожными при работе со строковыми переменными. PHP «предполагает», что все символы состоят из 8 бит (1 байт), но так как Unicode символы могут быть длинее, то возможно повреждение Unicode данных.

Конечно, существует специальный модуль для PHP – mbstring, который добавляет поддержку Unicode, но не на всех системах он установлен. В Joomla! у нас  есть специальный static JString класс; этот класс позволяет нам использовать множество строковых функций для работы с UTF-8 символами.

В данном примере мы используем JString для перевода строки в заглавные символы. Обратите внимание, что названия методов JString совпадают с привычными для нас строковыми функциями PHP:

$string = JString::strtoupper($string);

http://api.joomla.org/Joomla-Framework/Utilities/JString.html
*

Zombeee

  • Захожу иногда
  • 328
  • 55 / 3
уговорил :) я исправил первый пост! Кстати, спасибо за ссылочку на Joomla API, а то я всю joomla.org излазил но так и не нашел...
*

vdr

  • Захожу иногда
  • 196
  • 17 / 0
  • Всё есть в тебе. Реализовывайся.
А где добавить эту функцию, чтоб ограничить - статус.
Сейчас там хоть книгу пихай.
Всё есть в тебе. Реализовывайся.
*

vdr

  • Захожу иногда
  • 196
  • 17 / 0
  • Всё есть в тебе. Реализовывайся.
Попробуйте в статус добавить 10000 символов. Они войдут... и отобразятся. И в ленте активности тоже.
Не могу найти , где применить данный вами код, чтоб ограничить длину статуса.
Всё есть в тебе. Реализовывайся.
*

Zombeee

  • Захожу иногда
  • 328
  • 55 / 3
дело в том, что у меня шаблон свой и статус добавляется не в textarea. а в простой input, а так кол-во символов легко ограничить
*

vdr

  • Захожу иногда
  • 196
  • 17 / 0
  • Всё есть в тебе. Реализовывайся.
дело в том, что у меня шаблон свой и статус добавляется не в textarea. а в простой input, а так кол-во символов легко ограничить
У меня шаблон стандартный. Может подскажешь куда смотреть и что править?
Всё есть в тебе. Реализовывайся.
*

Yavich

  • Захожу иногда
  • 133
  • 3 / 1
Спасибо, как раз начал это искать :)
*

Zombeee

  • Захожу иногда
  • 328
  • 55 / 3
У меня шаблон стандартный. Может подскажешь куда смотреть и что править?
ну, тут не так всё просто... во-первых надо ограничить кол-во вводимых знаков, у textarea это возможно сделать только с помощью java script, во-вторых, чтобы наверняка, нужно сделать проверку кол-ва символов перед записью в базу и выдавать ошибку, если их больше... короче тут надо писать, думать, время тратить... поищи по форумам готовые ява скрипты для ограничения ввода символов в текстареа
*

vdr

  • Захожу иногда
  • 196
  • 17 / 0
  • Всё есть в тебе. Реализовывайся.
Попробуйте в статус добавить 10000 символов. Они войдут... и отобразятся. И в ленте активности тоже.
Не могу найти , где применить данный вами код, чтоб ограничить длину статуса.
Zombeee, у тебя на сайте  такая-же проблема со статусом, сегодня оставил с testerа километровый статус.....
Может все-таки ограничить как нибудь кол-во символов на ввод в статусной строке? Так например Вконтакте делает.
Всё есть в тебе. Реализовывайся.
*

Zombeee

  • Захожу иногда
  • 328
  • 55 / 3
Хакеры блин :) да у меня просто ещё руки не дошли в инпуте поставить максимальное число символов :)
*

vdr

  • Захожу иногда
  • 196
  • 17 / 0
  • Всё есть в тебе. Реализовывайся.
Ограничение длины статуса.

в файле profile.header.php вашего шаблона ставим
Код
<script type="text/javascript">
function ismaxlength(obj){
var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""
if (obj.getAttribute && obj.value.length>mlength)
obj.value=obj.value.substring(0,mlength)
}
</script>

строку пониже
Код
<textarea name="statustext" id="statustext" class="status" rows="" cols=""></textarea>
заменяем на
Код
<textarea name="statustext" id="statustext" class="status" rows="" cols="" maxlength="140" onkeyup="return ismaxlength(this);"></textarea>

Все!
Теперь статус не больше 140 символов!
Кол-во можно поставить любое.

На ввод с клавиатуры это работает. Но из буфера обмена все равно можно вставить километровый текст...

Как ограничить и для вставки из буфера?
« Последнее редактирование: 07.03.2010, 09:37:52 от vdr »
Всё есть в тебе. Реализовывайся.
*

vdr

  • Захожу иногда
  • 196
  • 17 / 0
  • Всё есть в тебе. Реализовывайся.
И еще один вопрос про длину сообщений.
Как можно заставить принудительно переносить строки tttttttttttttttttttttttttttttttttttttttttttteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeesssssssssssssssssssssssssssssssssssssssssssssssssstttttttttttttttttttttttttttttttttttttttttttttt!
Сейчас это все просто идет в одну строку, выходя за края шаблона в никуда...

p.s. Пример был намного длиньше  ^-^ При вставки его форум обрезал  ^-^

Как обрезать?
Всё есть в тебе. Реализовывайся.
*

bigmus

  • Захожу иногда
  • 55
  • 4 / 1
Re: ограничение длины статуса
« Ответ #18 : 07.03.2010, 10:43:45 »
ищем фал profile.header.php
в начале файла вписываем js

<script type="text/javascript">
function limitText(limitField, limitCount, limitNum) {
    if (limitField.value.length > limitNum) {
        limitField.value = limitField.value.substring(0, limitNum);
    } else {
        limitCount.value = limitNum - limitField.value.length;
    }
}
</script>

далее ищем примерно строчка 140 и заменяем код на

                 <div class="statustext">
                    <form id="formstatustext" name="status" onsubmit="return false;">
                       <label for="statustext" id="labelstatustext"><?php echo JText::_('CC MY STATUS'); ?></label>
                       <textarea name="statustext" onKeyDown="limitText(this,this.form.count,55);"
onKeyUp="limitText(this,this.form.count,55);"
id="statustext" class="status" onfocus="changeStatus();return false;" onblur="saveStatus();return false;" onkeyup="saveChanges(event);return false;"></textarea>
                       <a class="button" href="javascript:void(0);" id="save-status" style="padding-left:10px; display: none; height: 15px;" onclick="saveStatus();return false;"><?php echo JText::_('Save'); ?></a>
                  </form>
                 </div>


где цифры 55 указывают на кол-во вводимых символов :) вот и все
*

vdr

  • Захожу иногда
  • 196
  • 17 / 0
  • Всё есть в тебе. Реализовывайся.
Re: ограничение длины статуса
« Ответ #19 : 07.03.2010, 10:47:18 »
ищем фал profile.header.php
в начале файла вписываем js

<script type="text/javascript">
function limitText(limitField, limitCount, limitNum) {
    if (limitField.value.length > limitNum) {
        limitField.value = limitField.value.substring(0, limitNum);
    } else {
        limitCount.value = limitNum - limitField.value.length;
    }
}
</script>

далее ищем примерно строчка 140 и заменяем код на

                 <div class="statustext">
                    <form id="formstatustext" name="status" onsubmit="return false;">
                       <label for="statustext" id="labelstatustext"><?php echo JText::_('CC MY STATUS'); ?></label>
                       <textarea name="statustext" onKeyDown="limitText(this,this.form.count,55);"
onKeyUp="limitText(this,this.form.count,55);"
id="statustext" class="status" onfocus="changeStatus();return false;" onblur="saveStatus();return false;" onkeyup="saveChanges(event);return false;"></textarea>
                       <a class="button" href="javascript:void(0);" id="save-status" style="padding-left:10px; display: none; height: 15px;" onclick="saveStatus();return false;"><?php echo JText::_('Save'); ?></a>
                  </form>
                 </div>


где цифры 55 указывают на кол-во вводимых символов :) вот и все

А это ограничивает длину сообщения при вставки из буфера обмена?
Всё есть в тебе. Реализовывайся.
*

bigmus

  • Захожу иногда
  • 55
  • 4 / 1
Re: ограничение длины статуса
« Ответ #20 : 07.03.2010, 11:58:40 »
да обрезает полностью до 55 символов
*

vdr

  • Захожу иногда
  • 196
  • 17 / 0
  • Всё есть в тебе. Реализовывайся.
Re: ограничение длины статуса
« Ответ #21 : 07.03.2010, 12:40:43 »
да обрезает полностью до 55 символов
Для стандартной темы 1.6.285 прикрутить не смог.
Все искревляется и кнопки сохранить нет...
Пока сделал так http://joomlaforum.ru/index.php/topic,101475.msg579094.html#msg579094
Всё есть в тебе. Реализовывайся.
*

bigmus

  • Захожу иногда
  • 55
  • 4 / 1
Re: ограничение длины статуса
« Ответ #22 : 07.03.2010, 12:48:50 »
в файл добавить js код описанный выше, а в textarea добавить onKeyDown="limitText(this,this.form.count,55);"
onKeyUp="limitText(this,this.form.count,55);" все должно работать у меня на 1.5 все работает
*

vdr

  • Захожу иногда
  • 196
  • 17 / 0
  • Всё есть в тебе. Реализовывайся.
Re: ограничение длины статуса
« Ответ #23 : 07.03.2010, 13:06:01 »
в файл добавить js код описанный выше, а в textarea добавить onKeyDown="limitText(this,this.form.count,55);"
onKeyUp="limitText(this,this.form.count,55);" все должно работать у меня на 1.5 все работает
Работает. Но из буфера все равно можно вставить мнооого текста.
Всё есть в тебе. Реализовывайся.
*

bigmus

  • Захожу иногда
  • 55
  • 4 / 1
Re: ограничение длины статуса
« Ответ #24 : 07.03.2010, 13:12:19 »
лишний же текс не печатается и обрезается!? у меня все прекрасно работает и даже из буфера все урезает :o проверял и в опера файрфокс и ие
*

ILexus

  • Осваиваюсь на форуме
  • 37
  • 5 / 0
Re: ограничение длины статуса
« Ответ #25 : 07.03.2010, 14:14:57 »
delete
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Я думаю, что самый жесткий способ - это в базе для поля status в таблице #__community_users выставить не text, а varchar с ограничением по символам  ::)

А можно попробовать залезть в libraries/core.php и найти там метод setStatus:
Код: php
/**
 * Sets the status for the current user
**/
function setStatus( $status = '' )
{
if( $this->id != 0 )
{
$this->set( '_status' , $status );
$this->save();
}
}

Ну соответственно колдуем над переменной $status:

Код: php
$limit = 100; // сколько символов оставляем
if (JString::strlen($status) > $limit) {
$limit = JString::strpos($status, " ", $limit);
$status = JString::substr($status, 0, $limit). '...'; //обрезаем до ближайшего пробела после указанного кол-ва символов и добавляем в конце многоточие
}

Ну и итог:

Код: php
function setStatus( $status = '' )
{
if( $this->id != 0 )
{
$limit = 100; // сколько символов оставляем
if (JString::strlen($status) > $limit) {
$limit = JString::strpos($status, " ", $limit);
$status = JString::substr($status, 0, $limit). '...'; //обрезаем до ближайшего пробела после указанного кол-ва символов и добавляем в конце многоточие
}

$this->set( '_status' , $status );
$this->save();
}
}

Вообщем я это не проверял, но по идее должно сработать.
*

vdr

  • Захожу иногда
  • 196
  • 17 / 0
  • Всё есть в тебе. Реализовывайся.
c изменением libraries/core.php не работает...

с базой тоже...
« Последнее редактирование: 07.03.2010, 17:12:00 от vdr »
Всё есть в тебе. Реализовывайся.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
c изменением libraries/core.php не работает...

с базой тоже...
Ну ладно я понимаю, что с кодом не срабатывает. Но базой точно должно! Ща у себя буду проверять...

UPDATE:
С базой все прекрасно работает. Вот как я урезал до 20 символов:
Код
ALTER TABLE `jos_community_users` CHANGE `status` `status` VARCHAR( 20 ) NOT NULL 

Если прописываешь статус в более 20 символов, то в input он попадавет весь, но после перезагрузки страницы обрезается до 20.

UPDATE:
Нашел где в коде требуется внести изменения. Не знаю, зачем этот метод нужен в core.php, но реально он исполняется в controllers/status.php. Добавляем после $message = JString::trim($message):

Код: php
$limit = 100; // // сколько символов оставляем
if (JString::strlen($message) > $limit) {
$limit = JString::strpos($message, " ", $limit);
$message = JString::substr($message, 0, $limit). '...'; //обрезаем до ближайшего пробела после указанного кол-ва символов и добавляем в конце многоточие
}
*

ILexus

  • Осваиваюсь на форуме
  • 37
  • 5 / 0
bzzik, работает отлично, спасибо. Проверял в профиле и модуле mod_hellome
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Все события и все видео на ленте активности расползается на всю страницу, при этом меню и все остальн

Автор mehman

Ответов: 1
Просмотров: 2245
Последний ответ 15.05.2015, 18:29:00
от motokraft
Вопрос по ленте активности в профиле

Автор Deni

Ответов: 43
Просмотров: 21210
Последний ответ 28.08.2014, 11:36:51
от sv13
Как убрать вывод последней активности на фронтальной странице?

Автор Andrej-zhe

Ответов: 1
Просмотров: 2397
Последний ответ 07.05.2014, 17:08:52
от Andrej-zhe
502 ошибка при загрузке изображений - решено

Автор Vikitos

Ответов: 2
Просмотров: 3067
Последний ответ 24.12.2013, 00:05:58
от Vikitos
Добавление фото в статус с мобильного телефона

Автор grafdrakula

Ответов: 0
Просмотров: 2354
Последний ответ 19.12.2013, 11:51:58
от grafdrakula