1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

How create a new bbcode?

Discussion in 'XenForo Development Discussions' started by Zephyr, Sep 30, 2012.

  1. Zephyr

    Zephyr Well-Known Member

    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 :)
     
  2. M@rc

    M@rc Well-Known Member

  3. Zephyr

    Zephyr Well-Known Member

    ==> Edit: bottom.
     
  4. Zephyr

    Zephyr Well-Known Member

    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>'
    ;
            }
        }
    ==>

    [​IMG]

    ==>

    [​IMG]

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

    [​IMG]
     
  5. cclaerhout

    cclaerhout Well-Known Member

    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.
     
  6. Zephyr

    Zephyr Well-Known Member

    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?
     
  7. cclaerhout

    cclaerhout Well-Known Member

    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.
     
  8. Zephyr

    Zephyr Well-Known Member

    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.
     
  9. cclaerhout

    cclaerhout Well-Known Member

    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.
     
  10. Zephyr

    Zephyr Well-Known Member

    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 :)
     
  11. Zephyr

    Zephyr Well-Known Member

    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)
     
  12. Zephyr

    Zephyr Well-Known Member

    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 ! :)
     
  13. cclaerhout

    cclaerhout Well-Known Member

    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 ^^
     
  14. Insy

    Insy Well-Known Member

    It would be nice to have a forum dedicated to the support in other languages.
     
    Zephyr and cclaerhout like this.
  15. Zephyr

    Zephyr Well-Known Member

    There are Xenfrench but I prefer to be active on the official website ^^.
     
    Insy likes this.

Share This Page