How create a new bbcode?

  • Thread starter Thread starter Deleted member 10469
  • Start date Start date
D

Deleted member 10469

Guest
Hi, i would like create a bbcode.

[secret=1,53,64]
{$text} to display for users or id = 1, 53 and 64.​
[/secret]

Replacement code:
Code:
<xen:if is="in_array({$visitor.user_id}, array(1, 53, 64))">
    Displayed {$text} for user where id = 1, 53 or 64.
</xen:if>

How to create this please ?

Thank :)
 
Update:

PHP:
    public static function parseSecret(array $tag, array $rendererStates, &$parentClass)
    {
        if (!empty($tag['option']) && $parentClass->parseMultipleOptions($tag['option']))
        {
            $attributes = $parentClass->parseMultipleOptions($tag['option']); // Id's
            $userSecretMessage = $tag['children'][0]; // Message
            
            foreach($attributes as $usersId)
            {
                $usersIdString = $usersId . ',';
            }

            return '<xen:if is="in_array({$visitor.user_id}, array($usersIdString))">
                        ' . $userSecretMessage . ' | Access id => ' . $usersIdString . '
                    </xen:if>';
        }
    }

==>

19SIn.jpg


==>

19SIP.jpg


My id => 1.
I see the message, the condition is not working, why please?

19SKt.jpg
 
What you're looking to do is impossible the way you're trying to do it. You're using template Xen codes... but you're not inside templates. So this code will not be parsed. You need to use php to do this. But, you'll soon discover than even with php your "secret" bbcode content will be visible in some pages. For more information, you should look my Premium bbcodes addon.
 
Hello, do you speak French ? I am french.

you should look my Premium bbcodes addon.
usersId and not groupsId.

Otherwise it is possible to return a XenForo template and passing multiple variables for parse the code and return a functionable code ?
____
Sinon est il possible de retourner un template xenforo en lui passant les variables pour qu'il puisse analyser le code et me retourne quelque chose de fonctionnel ?

Template secretBbcode:
HTML:
<xen:if is="in_array({$visitor.user_id}, array($usersIdString))">
    echo $secretMessage;
</xen:if>

But what to call it by giving the variables?
 
Hello, do you speak French ? I am french.


usersId and not groupsId.

Otherwise it is possible to return a XenForo template and passing multiple variables for parse the code and return a functionable code ?
____
Sinon est il possible de retourner un template xenforo en lui passant les variables pour qu'il puisse analyser le code et me retourne quelque chose de fonctionnel ?

Template secretBbcode:
HTML:
<xen:if is="in_array({$visitor.user_id}, array($usersIdString))">
    echo $secretMessage;
</xen:if>

But what to call it by giving the variables?

I don't know for templates, I've never tried to call them from bbcodes class. I will give a look, but it's not the problem. You can do what you want only with Php using this:
Code:
(using $visitor = XenForo_Visitor::getInstance();
But again, there will be a confidentiality problem in some area if you don't add a lot of code as I did in Premium BBcodes:

You've got a bbcode & a message content... then a bbcode parser. This bbcode parser will not be executed in all forum areas (preview, watch tread, etc). So no matter what you use in your code, the parser beeing not there, your code will not be there either ^^

I will try to look if I can make the protection I used customizable per bbcode, but I don't think it's possible to make a 'clean one' per user, the users selection being done inside your bbcode class (from the tags options). By 'clean one', I mean users who can access the content, will see the 'none parsed tags content' in 'forum none-parsed area' and user who can't access it will see nothing or a default message. but it would still be possible to display a standard message for all users in those areas.

Oui, je suis Français. Un petit résumé du message précédent :
1) Je ne sais pas pour ce qu'il s'agit d'appeler un template à partir de la classe de ton bbcode.
2) Tu peux utiliser le PHP pour réaliser ta condition ; pour accéder aux informations utilisateurs, procède ainsi :
Code:
$visitor = XenForo_Visitor::getInstance();
3) Cela ne résoudra pas le problème de protection du contenu du bbcode dans les zones où l'analyseur syntaxique (parseur) n'est pas exécuté.
4) Je regarderai si je peux facilement ouvrir mon addon à d'autres bbcodes. Mais là il me faut faire une pause avec Xenforo et revenir au chinois.
 
3) Cela ne résoudra pas le problème de protection du contenu du bbcode dans les zones où l'analyseur syntaxique (parseur) n'est pas exécuté.

Comment je peu corriger ça stp ?
J'aimerais justement que le parseur soit exécuté à l'affichage d'un message pour lire les conditions présente dans les messages.
 
Quand tu affiches un message, le parseur sera exécuté, pas de problème ici. Mais dans certaines zones, il ne le sera pas et cela est souhaitable. En revanche ton contenu "secret", ne le sera plus. Aussi, si ton attention est d'échanger des informations réellement sensibles, cela n'est pas la bonne option. J'ai contourné le problème avec Premium BBcodes (via des regex dans des zones données du forum semblables un copier/coller), mais on est jamais à l’abri d'une extension ou d'une nouvelle fonction qui risque d'afficher le contenu.
 
Ce n'est pas des informations sensibles.

En fait j'ai une 10ène de joueurs sur mon site qui ont monté un jeu de forum RolePlay/Stratégie, tout ce passe par écrit comme si s'était un jeu de rôle papier.

Chaque joueur (membre) est roi d'une province, et j'aimerais qu'ils puissent par l'intermédiaire de ce bbcode échanger des messages privés à la vue de plusieurs joueurs et pas d'autre, tout ça au beau milieu d'une discussion pour ajouter une touche de complot au jeu.

Exemple: Trois joueurs sur un topic, ils concluent une alliance à trois, et discrètement l'un d'eux envoi via ce bbcode un message secrètement à l'un des deux autres pour comploter une trahison sur l'autre.

Voilà tu sais maintenant à quoi sa vas servir ^^
Rien de sensible donc, ce n'est que pour un jeu :)
 
Comment je peux récupérer l'id de l'utilisateur courant stp ?

$visitor = XenForo_Visitor::getInstance();
var_dump($visitor->getId);

Me retroune => bool(false)
 
Code:
    public static function parseSecret(array $tag, array $rendererStates, &$parentClass)
    {
        if (!empty($tag['option']) && $parentClass->parseMultipleOptions($tag['option']))
        {       
            $attributes = $parentClass->parseMultipleOptions($tag['option']); // Id's
            $userSecretMessage = $tag['children'][0]; // Message
 
            $visitor = XenForo_Visitor::getInstance();
 
            foreach($attributes as $usersId)
            {
                if($visitor['user_id'] == $usersId)
                {
                    $secretAccess = True;
                }
                else
                {
                    $secretAccess = False;
                }
            }
 
            if($secretAccess == True)
            {
                return $userSecretMessage;
            }
        }
    }
C'est bon et ça marche, le code du bbcode est analysé à chaque fois ! :)
 
Code:
    public static function parseSecret(array $tag, array $rendererStates, &$parentClass)
    {
        if (!empty($tag['option']) && $parentClass->parseMultipleOptions($tag['option']))
        {     
            $attributes = $parentClass->parseMultipleOptions($tag['option']); // Id's
            $userSecretMessage = $tag['children'][0]; // Message
 
            $visitor = XenForo_Visitor::getInstance();
 
            foreach($attributes as $usersId)
            {
                if($visitor['user_id'] == $usersId)
                {
                    $secretAccess = True;
                }
                else
                {
                    $secretAccess = False;
                }
            }
 
            if($secretAccess == True)
            {
                return $userSecretMessage;
            }
        }
    }
C'est bon et ça marche, le code du bbcode est analysé à chaque fois ! :)
And now go to the thread preview :D The players who made an alliance have been discovered ;) Same thing if an opponent is watching the thread and receiving emails ^^
 
There are Xenfrench but I prefer to be active on the official website ^^.
 
Top Bottom