Тема: Пробелы и смайлы
Как сделать чтобы смайлы парсились всегда? Тоесть, если даже все написано слитно, то смайл преобразовывался бы в картинку.
|
Фонд моральной поддержки |
|
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
PunBB по-русски → Работа системы → Пробелы и смайлы
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как сделать чтобы смайлы парсились всегда? Тоесть, если даже все написано слитно, то смайл преобразовывался бы в картинку.
Этот регекс надо править:
$text = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($smiley_text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />$2', $text);
Нужно спецов по регекспам спрашивать.
ну здесь идет проверка на НЕ Слова СЛОВа и прочее.
Проще заменить строчку на $text=str_replace($arr1,$arr2,$text); где $arr1 равер списку замены. (какие символы заменять);
$arr2 равен '<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />' соответственно для каждой замены.
Регулярка тогда вообще теряет необходимость. и быстрее будет.
если укажете файл и номер строчки приведенного выше кода сделаю инструкцию поточнее.
/include/parser.php - делай поиск "Convert a series of smilies to images", т.к. у меня моды стоят, номера строк изменены.
Найти
for ($i = 0; $i < $num_smilies; ++$i)
$text = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($smiley_text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />$2', $text);
return substr($text, 1, -1);заменить на
for ($i = 0; $i < $num_smilies; ++$i)
$arr2[$i]='<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0,-4).'" />';
$text = str_replace($smiley_text,$arr2,$text);
return $text;Хотел бы узнать мнение остальных, а зачем вообще было сделано с помощью регулярки? чтобы не переводились вот такие
)))))))) ? хотя и такие переводятся.
знаю еще что очень любится переводится http
/ м.б. из-за этого. но если все смайлы оформить как :smile01: то в принципе паралельно )
ну тогда и менять всю эту строку.
это функция do_smilies ~358
упс. с помощью регулярки делалось, я так думаю, именно с целью менять только смайлы отделённые пробелами.
Кстати, вот код из IPB2:
if ($in['SMILIES'] != 0 and $in['SIGNATURE'] == 0)
{
$txt = ' '.$txt.' ';
usort( $ibforums->cache['emoticons'] , array( 'post_parser', 'smilie_length_sort' ) );
if ( count( $ibforums->cache['emoticons'] ) > 0 )
{
foreach( $ibforums->cache['emoticons'] as $a_id => $row)
{
if ( $row['emo_set'] != $ibforums->skin['_emodir'] )
{
continue;
}
$code = $row['typed'];
$image = $row['image'];
//------------------------------
// Make safe for regex
//------------------------------
$code = preg_quote($code, "/");
$txt = preg_replace( "!(?<=[^\w&;/])$code(?=.\W|\W.|\W$)!ei", "\$this->convert_emoticon('$code', '$image')", $txt );
}
}
$txt = trim($txt);
if ( $ibforums->vars['max_emos'] )
{
if ($this->emoticon_count > $ibforums->vars['max_emos'])
{
$this->error = 'too_many_emoticons';
}
}
}
$txt = $this->bad_words($txt);
$txt = $this->bbcode_check($txt);
return $txt;Мож кто переделает для пуна. Думаю так будет намного удобней.
А как зделать так чтоб смайлы не были стандартного размера? Тоесть все стандартные идут 15х15. Когда я добавил свои, то у меня их сжало да таких-же размеров. А они у меня все разные по зазмерам. ![]()
Думаю, поиск по строке width=15 или width="15 может очень помочь ![]()
Да. Находил и правил эти строки только вот проблема в том что если я там меняю размер, то все смайли не зависимо от того более у них разширение или меньшее становятся именно того размера что там указан. ![]()
Ты эти строки не правь а просто убери. Хоть и не по стандарту, но браузеры отобразять корректно.
Оо. Большое спасибо. Помогло. Как я сразу не догадался попробовать. Можно еще вопрос? Как мне зделать смайлы для админов? Чтоб они небыли доступны для обычных пользователей? В принципе можно запретить вывод в ХЕЛП команд которые выводят этот смаил, но тогда нужно зделать насколько ХЕЛПов которые будет выводиться в зависимости от уровня доступа. Вобщем не знаю.
Да и еще писать парсер, который будет проверять, оставлен пост админом или нет, чтобы, посмотрев код страницы, пользователи не смогли использовать "элитные" смайлы.
Найти
for ($i = 0; $i < $num_smilies; ++$i) $text = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($smiley_text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />$2', $text); return substr($text, 1, -1);заменить на
for ($i = 0; $i < $num_smilies; ++$i) $arr2[$i]='<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0,-4).'" />'; $text = str_replace($smiley_text,$arr2,$text); return $text;
а как сделать так что бы он исключал из этого тег [img] ? а то http
/ не проходит)
Ты эти строки не правь а просто убери. Хоть и не по стандарту, но браузеры отобразять корректно.
Подскажете? Строки убрал, но эффекта никакого нету. Есть желание загрузить смыйлы из QIP, которые размерами 51 на 51 максимально.
Здесь можно прочитать как добавить свои смайлики - Как сделать больше 15 смайлов?
Значения width и height нужно убрать в parser.php и в файлах модов mod_easy_bbcode.php, mod_modern_bbcode.php и т.д. если подобные моды установлены.
но эффекта никакого нету
Не может этого быть
, где ты не видишь эффекта? В BB-панели? В самих сообщениях?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
PunBB по-русски → Работа системы → Пробелы и смайлы
Сгенерировано за 1.353 секунды (5% PHP — 95% БД) 11 запросов к базе данных
Технологии с открытым исходным кодом, несомненно, обладают серьезным преимуществом над аналогичными продуктами, распространяемыми по ограниченным лицензиям. И совершенно неважно, что это. Возможно это:
Впрочем, неважно. Что бы это ни было, важно всячески поощрять и поддерживать Open Source в любом виде. Тем более, что вы знаете, PunBB распространяется по лицензии GPL/GNU. И спасибо за внимание.