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

BbCodes & Buttons Manager 3.3.4

Create some Bb Codes & Buttons - Configure XenForo default Bb Codes

  1. cclaerhout

    cclaerhout Well-Known Member

    cclaerhout submitted a new resource:

    BbCodes & Buttons Manager - Create some Bb Codes & Buttons - Configure XenForo default Bb Codes

    Read more about this resource...
     
    sag-sag, Luxus and resonansER like this.
  2. cclaerhout

    cclaerhout Well-Known Member

    FAQ

    1. There are three rendering methods, which one should I use if I want to begin with?
      If your Bb Code is basic, just use the Replacement method. But I still recommend to use the Template method.

      The big advantage of the Template Method is that it's easier to customize & write a Bb Code. For example, to include a javascript you don't need to worry to use a hook listener (or a replacement with TMS). You just use the xen tag <xen:require js="js/directory/file.js" /> and the javascript will be automatically loaded, and this only once, when the Bb Code is used. Same thing for css.

      It is also more comfortable to manage Bb Codes options thanks to the XenForo template conditionals and helpers. Speaking of Bb Codes options, I've got only one recommendation: always keep the control on which final value will be used at the end. See the highlighter template code: the background color can be selected by the user, but it's you (and not the user) who decides if the option is valid or not.

    2. I was using before the StopAutolinkingPatch. Should I do something before remove it and use this addon stop autolinking function?
      Yes. Read here.

    3. How can I make the parser permissions work with XenPorta?
      Disclaimer: I remind you the parser permissions is an experimental feature
      Try this:
      Edit this file: {yourForum}/library/EWRporta/ViewPublic/Custom.php
      Search for:
      PHP:
                      $bbCodeParser = new XenForo_BbCode_Parser(XenForo_BbCode_Formatter_Base::create('Base', array('view' => $this)));
      Replace with:
      PHP:
                      $this->_params['posts'] = $params[$block['block_id']];
                      
      $bbCodeParser = new XenForo_BbCode_Parser(XenForo_BbCode_Formatter_Base::create('Base', array('view' => $this)));
    4. The "Custom Bb code Manager" BbCode xml files don't work with this addon, is this normal?
      Yes, you will need to recreate them. With the 1.1 version, a converter/exporter is available, just use it.

    5. I'm using PHP 5.2.x and I have problems: most of the tags are disappearing. What can I do?
      You will have to edit a XenForo file. Sorry there is no other alternative.
      This file is: XenForo_BbCode_Formatter_Base
      Path: {yourForum}/library/XenForo/BbCode/Formatter/Base.php

      Search:
      PHP:
                  return call_user_func($tagInfo['callback'], $tag$rendererStates$this);
      Replace:
      PHP:
                  /*return call_user_func($tagInfo['callback'], $tag, $rendererStates, $this);*/
                  
      return call_user_func_array(array($tagInfo['callback'][0], $tagInfo['callback'][1]), array($tag$rendererStates$this));
      Explanation (as far as I'm able to explain...): $this doesn't seem to be recognized using call_user_func in an extended class (xfcp). Using call_user_func_array fixes the problem.

    6. How to configure buttons with XenForo Redactor Editor ?
      A tool is now included in this addon. If you want to do it manually, see this section.

    7. Should I modify the "BbCodes Options Separator" option in this addon general options or should I modify the "Custom options separator" option in the bbcode options ("Parser configuration tab") ?
      If you have any other bbcodes using [coma+blank] as separator, don't modify the global options:
      View attachment 56413
      But modify it here
      View attachment 56412

      If you don't have any other bbcodes using [coma+blank] as separtor, don't hesitate to modify the goblal option.

    8. Using some bbcodes inside the options of a Bb Code breaks the opening tag, ie: [bbcode=[b]Text[/b]]Content[/bbcode], how can I avoid this?
      Check this.

    9. I want to select an icon for my button, but the XenForo default sprite has not the icon I need, what can I do ?
      Use your imagination & talent to create an icon or go there: http://icomoon.io/app/, then select a free pack of icons, ajust the size,and download the ones you will have selected (png format is available).
     

    Attached Files:

    Last edited: Sep 29, 2013
  3. cclaerhout

    cclaerhout Well-Known Member

    Tools for developers to use in callbacks

    > Get thread datas (when a Bb Code is used inside a XenForo thread)
    • $parentClass->getThreadParams(); //Get all thread parameters
    • $parentClass->getThreadParam('myParam');//Get one thread parameter
    Returns null if the Bb Code has not been used inside a thread

    Example:
    PHP:
    $nodeid $parentClass->getThreadParam('node_id');
    > Get post datas (when a Bb Code is used inside a XenForo thread)
    • $parentClass->getPostParams(); //Get all current post parameters
    • $parentClass->getPostParam('myParam'); //Get one parameter of the current post
    Returns null if the Bb Code has not been used inside a thread

    Example:
    PHP:
    $post_date $this->getPostParam('post_date');
    Disclaimer: this function is using a reverse processing method to get post datas from the thread datas (see the "parser permissions" section of this addon presentation)

    > Add/Remove a wrapper to a Bb Code
    • $parentClass->addWrapper('wrappingTag', 'wrapping Tag Options');
    • $parentClass->removeWrapper();
    Example:
    If you want to make a text container and want to automatically wrap it inside the spoiler tag of your forum:
    PHP:
    $parentClass->addWrapper('spoiler''Inside this spoiler... a magical picture !');

    > Render a template with the PHP callback Method
    • $parentClass->renderCustomTemplate('templateName', $params); //params being an array
    Example:
    PHP:
        $template $parentClass->renderCustomTemplate('templateName', array(
            
    'content' => $yourBbContent,
            
    'misc' => $yourMiscVariables
        
    ));

        if(
    $template !== false)
        {
            return 
    $template;
        }

        
    /*****
        *  The parent class variable $this->_view was null (must be a template admin)
        *  Then the $template variable returned false
        *  Let's return some direct html code
        ****/
        
    return "<b>Your Fallback</b>";
    Important: if you render a template from a php callback, you must first cache it (see below)

    > Cache one or several templates with the PHP callback Method
    In this situation you can't call a direct function from your Bb Code callback. You need to create one static function for your class. It doesn't matter if your class renders one or several Bb Codes. This static function must be named "preloadTemplates". The method called (the Bb Code function use to parse it) is passed as an argument.

    PHP:
    public static function preloadTemplates($callbackFunction)
    {
        switch(
    $callbackFunction)
        {
            case 
    'parseTagBbCode1':
                return 
    'TemplateName_1';
            break;
        }
    }

    public static function 
    parseTagBbCode1(array $tag$bboptions$options$parentClass)
    {
        
    //your own code
    }
    Important: no need to cache a template with the Template Callback Method. It is automatically done, unless you redirect it to another template. But don't bother you to do this. Once in the main template, you can play with conditionals and with the xen tag include.

    > Buffer extra information (add/get) during the page building
    The parser is called by page and not by post. This means when a Bb Code is parsed it's possible to add & stock extra information in the parent class in order to retrieve it the next time the Bb Code will be parsed in the page. Here are two functions to use this buffer: the first one is to add extra information in that buffer (all added information are sorted by tags), the second one is to get information from that buffer.
    • $parentClass->addTagExtra($infoKey, $info)
      • $info can be an array or a string
      • a third parameter exists: true/false (default is false). Its purpose to activate an "array mode". Example: $parentClass->addTagExtra($infoKey, $info, true). Once activated if each added $info will not erase the previous one, but will create an array for the $infoKey
    • $parentClass->getTagExtra($infoKey)
      • a second parameter exists. If the value of the $infoKey is an array you can match one of its element directly: $parentClass->getTagExtra($infoKey, $arrayKey)
      • As mentioned previously all information are added or extracted by tag. If you want all extra information for all the tags, use this: $parentClass->getTagExtra() (without any parameter).
    For an example, please have a look at the picasa Bb Code available in this addon.


    > Get attachments parameters
    • Basic command: $parentClass->getAttachmentParams('ID');
    • Optional parameters:
      • Valid Extensions: array
        $parentClass->getAttachmentParams('ID', $validExtensions);
      • Extra Permissions: arraymade with another array with three keys:
        • 'permissions' ; optional, if not specified will use the "permissions" key of the visitor object
        • 'group'
        • 'permission'
        $parentClass->getAttachmentParams('ID', $validExtensions, $extraPerms);

        These extra permissions are a fallback when the attachment parameters don't exist, which means the attachment is not in the post but can be available in the thread or another post
      • Return: arraywith these keys:
        • 'attachment': if valid Attachment, array with attachment data (the attachment must be inside the post to get this)
        • 'validAttachment': true or false (if not authorised extension: false)
        • 'canView': true or false
        • 'url': url to the attachement
        • 'fallbackPerms': true or false
    Example:
    PHP:
                    $validExtensions = array('gif''png''jpg''jpeg');
                    
    $permsFallback[] = array('group' => 'forum''permission' => 'viewAttachment');
                    
    $attachmentParams $parentClass->getAttachmentParams($attachmentID$validExtensions$permsFallback);
     

    Attached Files:

    Last edited: Jun 7, 2013
    resonansER likes this.
  4. cclaerhout

    cclaerhout Well-Known Member

    How to configure buttons with XenForo Redactor Editor ?

    Edit: with the version 2.2.0 of this addon, there is now a feature to avoid the below steps. Of course the below steps are still working and might give your more possibilities to customize your buttons.

    Presentation
    If you don't want to use the TinyQuattro editor and still want to use the XenForo Redactor Editor, you will have to check the html code and get the button class (see the example in the next section below). It should be like this: .redactor_btn_bbm_yourBbCodeTag. You need to create your own sprite (a sprite is an image with several icons) and then use css to set the position of your icon in the sprite. You can also use the XenForo default sprite and play with this code (move background position):

    Code:
    .redactor_toolbar li a.redactor_btn_bbm_yourBbCodeTag,
    .redactor_toolbar li a.redactor_btn_bbm_yourBbCodeTag:hover {
       background-position: 0 0;
    }
    
    Demo with the XenForo default sprite and the default XenForo smiley icon
    Click here to display the XenForo default sprite. We're going to change the smiley icon with another one, let's say the one above inside the sprite:
    redactor_editor.png

    To get the smiley icon class, just use any developer tool provided with your browser (for example with Firefox: Firebug). So with Firebug: right click on the smiley icon, then select "Inspect with Firebug". You should see this then:
    redactor_editor2.png

    As you can see, the css class for the smiley icon is: redactor_btn_smilies. It will be the same thing for your custom buttons with the BBM, except the class format will be: redactor_btn_bbm_yourBbCodeTag (a prefix "bbm" is used before your bbcode tag).

    The previous screenshot has also an important information about css (see in green):
    redactor_editor3.png

    If you want to use another icon of the XenForo default sprite, you will only have to modify the background position. You can do it in live with Firebug:
    redactor_editor4.png

    So the new background position will be: 3px -2365px. You just need to add this information into your EXTRA.css template. Since you're overriding the XenForo default configuration of the smiley icon, you will have to add !important to the css:
    Code:
    .redactor_toolbar li a.redactor_btn_smilies {
       background-position: 3px -2365px !important;
    }
    
    If you want to set the same icon for a custom button using the XenForo default sprite:
    Code:
    .redactor_toolbar li a.redactor_btn_bbm_yourBbCodeTag,
    .redactor_toolbar li a.redactor_btn_bbm_yourBbCodeTag:hover {
       background-position: 3px -2365px;
    }
    
    P.S: the hover extra configuration seems to be needed according to Mike West (source). I don't use Redactor, so I can't confirm but do as Mike West recommends.

    You can also use your own sprite, which means you will have to create your own image with several icons in it. Once you created your sprite, the logic is the same as above. You just need to add what sprite you want to use:
    Code:
    .redactor_toolbar li a.redactor_btn_bbm_yourBbCodeTag,
    .redactor_toolbar li a.redactor_btn_bbm_yourBbCodeTag:hover {
      background-image: url("styles/default/xenforo/editor/mySprite.png");
       background-position: 0 0;
    }
    
    P.S: You can of course change your sprite path. You will have to set your background position too.

    The below information are very detailed. Once you understand how to use css, you will spend no more than 20 seconds to configure one custom button.
     

    Attached Files:

    Last edited: Sep 28, 2013
  5. Adam Howard

    Adam Howard Well-Known Member

    So does this replace the other BB Code Manager?

    I know it was released under someone else, but I'm fairly sure you helped maintain that one. Just wondering if I need to uninstall the other one or do they play nice?
     
    tyteen4a03 likes this.
  6. tyteen4a03

    tyteen4a03 Well-Known Member

    Yes, holding off installation of this (and two of your other addons) until I get an answer.
     
  7. cclaerhout

    cclaerhout Well-Known Member

    Please have a look at this addon presentation and read the "Important" paragraph (in orange) of the "Installation" section. You can also refer to the last screenshot for more information. If you believe the Important paragraph can be rephrased in a proper and more understable English, please do and I will correct.
     
    Adam Howard likes this.
  8. principia

    principia Well-Known Member

  9. cclaerhout

    cclaerhout Well-Known Member

    principia likes this.
  10. tyteen4a03

    tyteen4a03 Well-Known Member

    This is what you get for not reading :p Sorry about that.
     
  11. TBDragon

    TBDragon Active Member

    so after creating the template i need to go to the style and put the code there and save it right ?!

    i hope u put some explanation about how to make the code =( cuz i try before with bbcode manager and i didn`t understand how its work and none answer any question i ask =(
    so i hope working with this addon is different
     
  12. TBDragon

    TBDragon Active Member

    when i try to import xml file
    its says

    Fatal error: Call to undefined method SimpleXMLElement::count() in /home/user/public_html/forum/library/BBM/ControllerAdmin/BbCodes.php on line 418
     
  13. tyteen4a03

    tyteen4a03 Well-Known Member

    Strange... what version of PHP do you have?
     
  14. TBDragon

    TBDragon Active Member


    its 5.2.17
     
  15. tyteen4a03

    tyteen4a03 Well-Known Member

    You must be on PHP 5.2, because that function only exists on PHP 5.3.

    Untested solution:

    In that file, Line 418, find:
    $BbCodes = $file->BbCode->count();
    Replace with
    $BbCodes = count($file->BbCode);
     
    cclaerhout and TBDragon like this.
  16. TBDragon

    TBDragon Active Member

    yes its 5.2.17

    ok i will try this solution ^,^
     
  17. cclaerhout

    cclaerhout Well-Known Member

    Thank you, I've tested and it works, but it must be confirmed by a php 5.2 user. I will wait a little before publishing an update to see if there's no other problem.
     
  18. TBDragon

    TBDragon Active Member

    importing done correctly without error =)
     
    cclaerhout likes this.
  19. cclaerhout

    cclaerhout Well-Known Member

    The easiest to do is to have a look at the highlighter Bb Code or this Bb Code (more complex => has a template callback).

    The big advantage of the Template Method is that it's easier to customize & write your Bb Code. For example if you want to include a javascript you don't need to worry to use a hook listener (or a replacement with TMS). You just use the xen tag <xen:require js="js/directory/file.js" /> and the javascript will be automatically loaded, and this only once, when the Bb Code is used. Same thing for css.

    It is also more comfortable to manage Bb Codes options thanks to the XenForo template conditionals and helpers. Speaking of Bb Codes options, I've got only one recommendation: always keep the control on which final value will be used at the end. See the highlighter template code: the background color can be selected by the user, but it's you (and not the user) who decides if the option is valid or not.

    I might create some helpers to check Bb Codes options (is it a number, how many figures has it, etc) but I didn't think clearly about it and I can't spend too much time on developing new functions. I would be nice if users can help each others like tyteen4a03 just did.
     
    TBDragon likes this.
  20. Adam Howard

    Adam Howard Well-Known Member

    Upgrade your version of PHP

    5.2.x reached end of life December 2010 (almost 2 1/2 years ago). There is also a few known security issues which have not been patched or addressed.

    Suggest you upgrade to php 5.4 as 5.5 will soon be released.

    If you can't do this because you don't know how, ask for help and I'll be happy to do it for you. OR if you're on a shared hosting account, ask your host if they offer something newer and if not, find a new host.
     
    cclaerhout likes this.

Share This Page