Помогите сделать bb код

1. 3DwEp (13.04.2010 / 20:05)
Всем привет.. Помогите пожалуйста сделать bb код на мотор такого типа [ball=30]текст[/ball]
если у пользователя меньше 30 баллов допустим, то чтобы он не мог видеть текст.. Что нужно для этого? заранее спасибо)

2. Lugaro (13.04.2010 / 20:40)
Как то так
$msg = preg_replace('#\[ball=([0-9]+)\](.*?)\[/ball\]#sie', "твоя_функция('$1', '$2')", $msg);
Создай функцию "твоя_функция" в которой проверяй выводить ли юзеру

3. ramzes (13.04.2010 / 20:48)
<?php
function hide_ball($text){
global $udata;
   if($udata[36]>=$text[1]){
return 'hide text: '.$text[2];
   }else{
return 'this text hidden';
   }
}
....
function bb_code($msg){
...
$msg = preg_replace_callback('|\[ball>([0-9]+)\](.*?)\[\/ball\]|i', hide_ball, $msg);
...
}
?>
[ball>50] hello! [/ball]

4. WCO (13.04.2010 / 20:54)
3. ramzes,
может
$msg = preg_replace_callback('|\[ball>([0-9]+)\](.*?)\[\/ball\]|i','hide_ball', $msg);
?

5. Удаленный (13.04.2010 / 20:57)
4. WCO, Нет

6. WCO (13.04.2010 / 21:02)
хм, почему ?

7. WCO (13.04.2010 / 21:04)
будет же ошибка, необьявленная константа hide_ball

8. 3DwEp (13.04.2010 / 21:06)
ramzes, почему-то при добавлении каждого сообщения теперь пишет: this text hidden

9. Удаленный (13.04.2010 / 21:12)
7. WCO, Ето не константа а функция.
Че неюзал preg_replace_callback

10. WCO (13.04.2010 / 21:14)
TLENSi (Сегодня / 21:12)
7. WCO, Ето не константа а функция.
Че неюзал preg_replace_callback
$msg = preg_replace_callback('|\[ball>([0-9]+)\](.*?)\[\/ball\]|i',hide_ball, $msg);
hide_ball - нужно указать что это строка, обрамить ' или "

11. ramzes (13.04.2010 / 21:23)
Это не строка, а функция. Тупо читаем выше, человек попробывал, ошибки не выдало. Вывод?
8 global $udata; замени на переменную в которой массив профиля храниться, я от балды написал, не юзаю мотор. И 36 ячейка может уже другаяsmile тебе виднее должно быть где баллы хранятсяsmile

12. Удаленный (13.04.2010 / 21:27)
10. WCO, Попробуй
1. Сейчас дам код

13. WCO (13.04.2010 / 21:27)
в стандарте в моторе отключен показ ошибок, а это Notice;
<?php
error_reporting(E_ALL);
function somefunct(){};
preg_replace_callback('/a{3}/','somefunct','328aaa95782aaa42г3957aaa423908');
echo '<br />';
preg_replace_callback('/a{3}/',somefunct,'328aaa95782aaa42г3957aaa423908');
?>
Notice: Use of undefined constant somefunct - assumed 'somefunct' in home/file.php(2081) : eval()'d code on line 6


14. ramzes (13.04.2010 / 21:28)
Там по моему просто не принципиально в кавычках или нет. Лучше конечно в кавычках, но и без них вроде работает..

15. ramzes (13.04.2010 / 21:30)
Ну может и так. Не суть важноsmile две кавычки добавить не сложно.

16. WCO (13.04.2010 / 21:31)
если интерпретатор не "знает" константу somefunct, он переводит её в строку и использует, выводя ошибку.
если бы до этого было
типа
<?php
define('somefunct','somefunct');
?>
то все сработает

17. WCO (13.04.2010 / 21:32)
15, не сложно.
Это нужны прививать внутри-мышечно ded

18. Удаленный (13.04.2010 / 21:35)
Вот юзай наздорове
<?
$udata[36]=24;
function hide_ball($text){
global $udata;
if(eregi('/[^0-9]/',$text[0]))
{return $text[0];}
   if($udata[36]>=$text[1]){
return 'hide text: '.$text[2];
   }else{
return 'this text hidden';
   }
}
$msg='[ball>30]Hello[/ball]';
$msg = preg_replace_callback('|\[ball>([0-9]+)\](.*?)\[\/ball\]|i', hide_ball, $msg);
echo $msg;


19. Удаленный (13.04.2010 / 21:37)
Толькоже ставь не в bbcode а у вывод с форума ато зачислять будет по балам создавшего а не читающего

20. Удаленный (13.04.2010 / 21:46)
Секундочку сейчас подправлю

21. Удаленный (13.04.2010 / 21:55)
<?
$udata[36]=30;
function hide_ball($text){
global $udata;
if(eregi('/[^0-9]/',$text[1]))
{return $text[0];}
   if($udata[36]>=$text[1]){
return 'hide text: '.$text[2];
   }else{
return 'this text hidden';
   }
}
$msg='Tlens [ball>30]Hello[/ball] word';
$msg = preg_replace_callback('|\[ball>([0-9]+)\](.*?)\[\/ball\]|i', hide_ball, $msg);
echo $msg;


22. WCO (13.04.2010 / 22:04)
прошу прощение за оффтоп, но не легче ли intval($text[1]), тем более что POSIX выражения будет исключены из ядра в PHP v6

23. Удаленный (13.04.2010 / 22:12)
WCO, Возможно у тибя старая версия пхп у меня ошибок недавало никогда и работало отлично.
Хотя на php.net ненашол такого примера

24. WCO (13.04.2010 / 22:14)
ты о чем именно?
если о 13м посте, то я не зря указал "error_reporting(E_ALL);"
а у меня 5.2.4

25. Удаленный (13.04.2010 / 22:14)
http://php.net/manual/en/function.preg-replace-callback.php

26. WCO (13.04.2010 / 22:15)
тут не функция виновата xD
тут, незначительная ошибка синтаксиса что ли

27. Удаленный (13.04.2010 / 22:15)
У меня тоже включен показ

28. WCO (13.04.2010 / 22:18)
хочешь сказать что у тебя нет ошибок при использовании
$msg = preg_replace_callback('|\[ball>([0-9]+)\](.*?)\[\/ball\]|i', hide_ball, $msg);
?
при условии что константа 'hide_ball' не определена, и директива error_reporting принимает значение E_ALL ???

29. 3DwEp (13.04.2010 / 22:18)
Блин чёто вообще запутался куда что писать %)

30. Удаленный (13.04.2010 / 22:19)
Вот мой кусочек кода работает нежалуется со включенными оповещениями
<?
function tlens_back($m){
global $url;
return 'href='.$m[1].str_replace('{rand}',rand(0,999),$url).$m[1].'>';
}
//------------------------------------------------------------------//
function tlens($f)
{return preg_replace_callback('/href=(.).+?.>/si', tlens_back,$f);}
ob_start(tlens);}


31. 3DwEp (13.04.2010 / 22:32)
Блин так и не разобрался куда что писатьsad

32. WCO (13.04.2010 / 22:33)
какой именно мотор (18,19), модов не ставил?
сейчас сделаем

33. Удаленный (13.04.2010 / 22:34)
Вощем если ненравится ставь кавычки.

34. Удаленный (13.04.2010 / 22:37)
А куда в bb code на выход а не вход.
Впрынципе ставь как ставил ето просто у меня обрабатуется сообщение перед записю и выходом.

35. Удаленный (13.04.2010 / 22:40)
28 Сейчас протестирую

36. 3DwEp (13.04.2010 / 22:41)
Мотор 18, бб код на выход

37. 3DwEp (13.04.2010 / 22:42)
32, модов не ставил, пробую на чат установить бб код.. сделай пожалуйста)

38. Удаленный (13.04.2010 / 22:43)
WCO, Все верно ошибка прилитела

39. WCO (13.04.2010 / 22:46)
37, так нужно на чат или форума?

40. Артур (13.04.2010 / 23:21)
21, какой смысл проверять $text[1] на наличие цыфры? preg_replace_callback не пропустит не цыфры. Только лишний код.

41. ramzes (13.04.2010 / 23:25)
Ну вы развели.. Как я понял не найдя константу, будет происходить поиск функции с тем же именем, работать будет по выведет "варнинг".. Вроде так.
Код что я да полностью рабочий, кавычки добавить и $udata изменить на массив с профилем. Все. Ни чего больше не надо. Простейшая фишка же

42. WCO (13.04.2010 / 23:26)
темку можно крыть, автору уже не нужно))

43. Макс (27.04.2010 / 02:56)
Дайте пожалуйста правильный код :-) и напиши где именно где прописать

URL: https://visavi.net/topics/8174